Я определил матрицу, содержащую положение и ориентацию камеры, аналогичную матрице GL_MODELVIEW:Загрузка ModelViewMatrix использованием glulookat
(м3 = 0; m7 = 0; М11 = 0; M15 = 1)
Я пытаюсь загрузить эти данные в ModelViewMatrix. Я думаю, в этих двух possibilites:
Использование функции glLoadTransposeMatrixf():
Если я использую это решение я добиться правильного положения и ориентации. Проблема в том, что мне нужно использовать второе решение, потому что я изменяю векторы Left/Up/Forward/Translation в своем коде, чтобы изменить представление.
Использование функции gluLookAt():
gluLookAt(Translation->X, Translation->Y, Translation->Z, Translation->X-Forward->X, Translation->Y-Forward->Y, Translation->Z-Forward->Z, Up->X, Up->Y, Up->Z);
Моя проблема заключается в том, что GL_MODELVIEW матрица, что я получить с этим отличается от другого случая. В частности, вектор перевода неверен, но векторы Left/Up/Forward верны.
Я действительно смущен этим. Может кто-нибудь объяснить, есть ли различия между этими двумя вариантами и что я делаю неправильно, пожалуйста?
EDIT
Полученные результаты:
Я использую матрицу M следующим образом:
M = (Lx Upx Fwx tx)
(Ly Upy Fwy ty)
(LZ Upz Fwz tz)
(0 0 0 1)
С первого метода я хочу получить правильную матрицу GL_MODELVIEW:
N = (Lx Upx Fwx tx)
(Ly Upy Fwy ty)
(Lz Upz Fwz tz)
(0 0 0 1)
но с secon d метод я получить следующую матрицу GL_MODELVIEW:!
N = (Lx Upx Fwx tx')
(Ly Upy Fwy ty')
(Lz Upz Fwz tz')
(0 0 0 1)
Обратите внимание, что ТХ '! = Тх, Ту' = TY, TZ '= TZ. Это очень запутывает ...
Итак, вы говорите, что я должен использовать ** - Перевод ** вместо ** Перевод ** на моей gluLookAtFunction, правильно? В любом случае, я не получаю ожидаемого результата, поэтому есть что-то еще не так. –
@ Escucum: Я говорю гораздо больше. Вы не получите полученный результат таким образом, так как ваша матрица M по-прежнему является инверсией того, что делает gluLookAt. Вы могли бы достичь того же результата, что и M^-1, если смотреть на gluLookAt (Transpose, Transpose ** + ** Forward, Up); Если вы хотите получить именно свою матрицу назад, вам нужно будет не только отказаться от Translate, но и указать полностью разные векторы. – derhass
Хорошо, теперь я тебя достал. Но я уже использую правильную матрицу транспозиции M в решении gluLookAt. Я отредактировал вопрос, включая конкретный пример с полученными результатами, с двумя возможными способами, чтобы прояснить мою проблему. –