glRotate в OpenGL вращает камеру или вращает мировую ось или вращает объект модели? - PullRequest
5 голосов
/ 20 марта 2012

Я хочу знать, вращает ли glRotate камеру, мировую ось или объект. Объясните, чем они отличаются на примерах.

Ответы [ 2 ]

9 голосов
/ 20 марта 2012

камера

В OpenGL нет камеры.

ось мира

В мире нетOpenGL.

или объект.

В OpenGL нет объектов.

Смущен?


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

Самым первым этапом этого процесса является получение позиций вершин в области просмотра.,В конвейере с фиксированной функцией (т. Е. Без шейдеров), чтобы получить их, каждую позицию вершины, если сначала умножить на так называемую матрицу «вида модели», промежуточный результат используют для расчета освещения, а затем умножают на матрицу «проекции».После этого применяются отсечение, а затем нормализация в координаты области просмотра.

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

Вторая «проекция» работает вместе с процессом нормализации, чтобы вести себя как своего рода «линза», так сказать.При этом вы устанавливаете поле зрения (и несколько других параметров, таких как смещение, которые вам нужны для определенных приложений - не беспокойтесь об этом).

Интересная вещь о матрицах состоит в том, что онинекоммутативные, т.е. для двух заданных матриц N, M

M * N =/= N * M ; for most M, N

В конечном итоге это означает, что вы можете составить серию преобразований A, B, C, D ... в одну составную матрицу преобразований Tумножая примитивные преобразования друг на друга в правильном порядке.

Функции манипулирования матрицей OpenGL (они устарели, кстати), делают это.У вас есть матрица, выбранная для манипуляции (режим матрицы), например, вид модели M. Тогда glRotate эффективно делает это:

M *= R(angle,axis)

, т.е. активная матрица умножается на матрицу вращения, построенную из заданных параметров.Аналогичны для масштабирования и перевода.

Если кажется, что это ведет себя как камера или расположение объекта полностью зависит от того, как и в каком порядке эти манипуляции сочетаются.

Но для OpenGL естьпросто числа / векторы (атрибуты вершин), которые каким-то образом переводятся в двухмерные координаты области просмотра, которые рисуются в качестве точек для закрашенных между ними линий или треугольников.

1 голос
/ 20 марта 2012

glRotate работает на текущей матрице.Таким образом, это зависит от того, является ли матрица камерой первой или мировой трансформацией.Чтобы узнать больше о текущей матрице, взгляните на glMatrixMode () .Найти пример - это просто поискать в Google: Я нашел этот , который, по моему мнению, должен помочь вам выяснить, что происходит.

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