2013-07-20 2 views
0

Я узнал из чтения многих источников и путем повторной реализации функции и изучения самих матриц, что gluLookAt() эквивалентен вращению, за которым следует перевод в обратную координату глаза. Реализация похожа на OpenGL, Mesa, Cogl и т.д ... и хорошее резюме здесь: http://pic.dhe.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.opengl/doc/openglrf/gluLookAt.htmНе могли бы вы объяснить мое заблуждение gluLookAt()?

Однако, рассмотрим случай, когда внешний вид-на мишень находится в начале координат, т.е. (0, 0, 0) , а виртуальная камера слегка смещена от оси Z, например (2, 2, 10). Результат gluLookAt() должен иметь начало координат в центре поля обзора. Начальный шаг поворота не имеет никакого значения, но более поздний шаг перевода перемещает начало координат от центра!

Можете ли вы объяснить мое заблуждение gluLookAt()?

ответ

0

Пожалуйста, объясните мое неправильное понимание gluLookAt().

Ваша ошибка заключается в том, чтобы думать об этом как о последовательности шагов. Это не так, как это работает. gluLookAt вычисляет матрицу преобразования, которая непосредственно отображает координаты по желанию. Нет промежуточного шага вращения.

1

Документация, с которой вы связаны, в действительности неверна.

Если мы посмотрим на another documentation, мы видим, что матрица вида строятся из матрицы вращения и матрицы перевода следующим образом:

V = R * T 

Чтобы преобразовать вершину v, вычислит

v' = V * v = R * T * v = R * (T * v) 

Итак, сначала мы применяем перевод, а затем - поворот. И поскольку есть перевод, часть вращения влияет также на происхождение. Вот почему можно сопоставить начало координат с центром экрана.

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

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