камера
В 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 естьпросто числа / векторы (атрибуты вершин), которые каким-то образом переводятся в двухмерные координаты области просмотра, которые рисуются в качестве точек для закрашенных между ними линий или треугольников.