c ++ OpenGL преобразование координат - PullRequest
0 голосов
/ 22 октября 2009

Я просто не могу понять это в моей голове. Я пытаюсь переместить объект в трехмерном пространстве.

Если у меня есть точка 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 (или что такое каждая новая координата)?

Пожалуйста, помогите, я так долго застрял на этом!

Ответы [ 2 ]

4 голосов
/ 22 октября 2009

Попробуйте следующее:

1) Вставить текущую матрицу в стек; 2) Загрузите личность и примените ваши преобразования; 3) Получите полученную матрицу преобразования в некоторую временную переменную. glGet или что-то подобное поможет; 4) вытолкнуть матрицу из стека;

Теперь у вас есть матрица преобразований. Умножьте свою точку на эту матрицу, чтобы предсказать координаты точки после преобразования.

0 голосов
/ 22 октября 2009

Определенно: проверить http://research.cs.queensu.ca/~jstewart/454/notes/pipeline/

Короче говоря, все эти вызовы сводятся к одной матрице, которая умножается на точку.

Метод SadSido определенно даст вам результирующую матрицу, но это не помешает на самом деле понять, что происходит за кулисами. Вышеприведенные вычисления приведут к следующему уравнению линейной алгебры:

pOut = [mTranslate] * [mRotate] * [mTranslate] * pIn

где mTranslate = вызовы перевода (матрица для перевода) и mRotate = вызов поворота (матрица для вращения вокруг произвольной оси). Посчитайте это, и вы готовы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...