2013-05-12 3 views
0

Я определил матрицу, содержащую положение и ориентацию камеры, аналогичную матрице GL_MODELVIEW:Загрузка ModelViewMatrix использованием glulookat

GL_MODELVIEW matrix

(м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. Это очень запутывает ...

ответ

1

Существуют различия между двумя вариантами. Назовем вашу матрицу M. Что делает M на самом деле? Это не превращается из пространства мира в пространство глаз, а наоборот. Думаю об этом. Вы предполагаете, что ваша камера находится в точке «перевод». Предположим, что остальная часть M является тождественной, поэтому точка, расположенная точно в месте расположения камеры, должна быть переведена в начало координат. Но это будет в переводе.xyz + translation.xyz, так что на самом деле ваша камера находится в точке -translation.xyz.

Если ваш первый метод действительно дает «правильные» результаты, у вас, похоже, что-то еще не так.

+0

Итак, вы говорите, что я должен использовать ** - Перевод ** вместо ** Перевод ** на моей gluLookAtFunction, правильно? В любом случае, я не получаю ожидаемого результата, поэтому есть что-то еще не так. –

+0

@ Escucum: Я говорю гораздо больше. Вы не получите полученный результат таким образом, так как ваша матрица M по-прежнему является инверсией того, что делает gluLookAt. Вы могли бы достичь того же результата, что и M^-1, если смотреть на gluLookAt (Transpose, Transpose ** + ** Forward, Up); Если вы хотите получить именно свою матрицу назад, вам нужно будет не только отказаться от Translate, но и указать полностью разные векторы. – derhass

+0

Хорошо, теперь я тебя достал. Но я уже использую правильную матрицу транспозиции M в решении gluLookAt. Я отредактировал вопрос, включая конкретный пример с полученными результатами, с двумя возможными способами, чтобы прояснить мою проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^