c ++ OpenGL преобразование координат
-
05-07-2019 - |
Вопрос
Я просто не могу понять это в своей голове. Я пытаюсь переместить объект в трехмерном пространстве.
Если у меня есть точка 5,15,5 и я использую функции opengl, чтобы изменить вид модели ....
glTranslatef( 10.0f, 4.0f, 4.0f );
glRotatef( 33.0f, 1.0f, 0.0f, 0.0f );
glTranslatef( 10.0f, 4.0f, 4.0f );
Есть ли способ узнать, где находится эта точка (в мировых / глобальных координатах)? Могу ли я сделать какие-то матричные вычисления, которые вернут мне 20,26,23 (или какова будет каждая новая координата)?
Пожалуйста, помогите, я застрял на этом так долго!
Решение
Попробуйте сделать следующее:
1) Вставить текущую матрицу в стек; 2) Загрузите личность и примените ваши преобразования; 3) Получите полученную матрицу преобразования в некоторую временную переменную. glGet или что-то подобное поможет; 4) вытолкнуть матрицу из стека;
Теперь у вас есть матрица преобразования. Умножьте свою точку на эту матрицу, чтобы предсказать координаты точки после преобразования. Р>
Другие советы
Обязательно: ознакомьтесь с http: //research.cs.queensu .ca / ~ jstewart / 454 / примечание / трубопровод /
Короче говоря, все эти вызовы сводятся к одной матрице, которая умножается на точку. Р>
Метод SadSido определенно даст вам результирующую матрицу, но это не помешает на самом деле понять, что происходит за кулисами. Вышеуказанные вычисления приведут к следующему уравнению линейной алгебры:
pOut = [mTranslate] * [mRotate] * [mTranslate] * pIn
где mTranslate = переводные вызовы (матрица для перевода) и mRotate = поворотный вызов (матрица для вращения вокруг произвольной оси). Рассчитайте это, и вы готовы!