Почему ?
Потому что камера представляет собой проекционный вид.
Но в случае 3D-камеры (виртуальная камера) камера перемещается вместо мира. Я сделал подробное объяснение позже этого ответа.
Понимание математически
Проекционный вид перемещается в пространстве и меняет свою ориентацию. Первое, на что нужно обратить внимание, это то, что желаемая проекция на экране не меняется в зависимости от направления просмотра.
По этой причине мы трансформируем другие вещи, чтобы получить желаемую проекцию.
Понимание от http://opengl.org
Чтобы создать видимость перемещения камеры, ваше приложение OpenGL должно переместить сцену с обратным преобразованием камеры. Что касается OpenGL, там нет камеры. Точнее говоря, камера всегда расположена в координате пространства глаза (0, 0, 0)
Понимание от http://open.gl
Также хочу поделиться следующими строками из части просмотра матрицы http://open.gl/transformations
Чтобы симулировать трансформацию камеры, вам на самом деле нужно трансформировать мир с помощью инверсии этого преобразования. Пример: если вы хотите переместить камеру вверх, вы должны переместить мир вниз.
Понимание с точки зрения
В реальном мире мы видим вещи так, как это называется «перспектива».
Перспектива относится к концепции, что объекты, которые находятся дальше, кажутся меньше, чем те, которые ближе к вам. Перспектива также означает, что если вы сидите посреди прямой дороги, вы фактически видите границы дороги в виде двух сходящихся линий.
Это перспектива. Перспектива имеет решающее значение в 3D-проектах. Без перспективы трехмерный мир не выглядит реальным.
Хотя это может показаться естественным и очевидным, важно учитывать, что при создании 3D-рендеринга на компьютере вы пытаетесь симулировать 3D-мир на экране компьютера, который представляет собой 2D-поверхность.
Представьте, что за экраном компьютера находится настоящая своего рода 3D-сцена, и вы смотрите ее через «стекло» экрана вашего компьютера. Используя перспективу, ваша цель состоит в том, чтобы создать код, который визуализирует то, что «проецируется» на это «стекло» экрана, как если бы за экраном был настоящий трехмерный мир. Единственное предостережение в том, что этот трехмерный мир нереален ... это всего лишь математическое моделирование трехмерного мира.
Таким образом, при использовании 3D-рендеринга для симуляции сцены в 3D и последующего проецирования 3D-сцены на 2D-поверхность экрана этот процесс называется перспективной проекцией.
Начните с интуитивного представления, чего вы хотите достичь. Если объект находится ближе к зрителю, объект должен казаться больше. Если объект находится дальше, он должен казаться меньше. Кроме того, если объект уходит от зрителя по прямой линии, вы хотите, чтобы он сходился к центру экрана, поскольку он перемещается дальше на расстояние.
Перевод перспективы в математику
Просматривая иллюстрацию на следующем рисунке, представьте, что объект расположен в вашей 3D-сцене. В трехмерном мире положение объекта можно описать как xW, yW, zW, ссылаясь на трехмерную систему координат с началом координат в точке глаза. Вот где объект фактически расположен, в 3D-сцене за экраном.
Когда зритель наблюдает за этим объектом на экране, трехмерный объект «проецируется» в двухмерную позицию, описанную как xP и yP, которая ссылается на двухмерную систему координат экрана (плоскость проекции).
Чтобы поместить эти значения в математическую формулу, я буду использовать трехмерную систему координат для мировых координат, где ось x направлена вправо, y указывает вверх, а положительные точки z находятся внутри экрана. 3D-источник относится к местоположению глаза зрителя. Итак, стекло экрана находится на плоскости, перпендикулярной (под прямым углом) к оси z, при некотором z, который я назову zProj.
Вы можете рассчитать прогнозируемые позиции xP и yP, разделив мировые позиции xW и yW на zW, как показано ниже:
xP = K1 * xW / zW yP
= K2 * yW / zW
K1 и K2 - это константы, которые определяются геометрическими факторами, такими как соотношение сторон вашей проекционной плоскости (область просмотра) и «поле зрения» вашего глаза, которое учитывает степень широкоугольного обзора.
Вы можете увидеть, как это преобразование имитирует перспективу. Точки рядом с краями экрана сдвигаются к центру с увеличением расстояния от глаза (zW). В то же время точки, расположенные ближе к центру (0,0), гораздо меньше подвержены влиянию расстояния от глаза и остаются близко к центру.
Это деление на z является известным «перспективным делением».
Теперь предположим, что объект в трехмерной сцене определяется как серия вершин. Таким образом, применяя этот вид преобразования ко всем вершинам геометрии, вы эффективно гарантируете, что объект будет сжиматься, когда он находится дальше от точки зрения.
Другие важные случаи
- В случае 3D-камеры (виртуальная камера) камера перемещается вместо мира.
Чтобы лучше понять 3D-камеры, представьте, что вы снимаете фильм. Вы должны создать сцену, которую вы хотите снять, и вам нужна камера. Чтобы получить отснятый материал, вы будете перемещаться по сцене с помощью камеры, снимая объекты на сцене под разными углами и точками зрения.
Тот же процесс съемки происходит с 3D-камерой. Вам нужна «виртуальная» камера, которая может перемещаться по «виртуальной» сцене, которую вы создали.
Два популярных стиля съемки включают в себя наблюдение за миром глазами персонажа (также известный как камера от первого лица) или наведение камеры на персонажа и удержание их в поле зрения (известный как камера от третьего лица).
Это основная предпосылка 3D-камеры: виртуальная камера, которую вы можете использовать для перемещения по 3D-сцене и рендеринга отснятого материала с определенной точки зрения.
Понимание пространства мира и вид пространства
Чтобы кодировать такое поведение, вы будете визуализировать содержимое трехмерного мира с точки зрения камеры, а не только с точки зрения мировой системы координат или с какой-либо другой фиксированной точки зрения.
Вообще говоря, 3D-сцена содержит набор 3D-моделей. Модели определяются как набор вершин и треугольников, привязанных к их собственной системе координат. Пространство, в котором определяются модели, называется модельным (или локальным) пространством.
После помещения объектов модели в трехмерную сцену вы преобразуете вершины этих моделей, используя матрицу "преобразования мира". Каждый объект имеет свою собственную мировую матрицу, которая определяет, где находится объект в мире и как он ориентирован.
Эта новая система ссылок называется «мировым пространством» (или глобальным пространством). Простым способом управления ею является привязка матрицы преобразования мира к каждому объекту.
Чтобы реализовать поведение 3D-камеры, вам нужно выполнить дополнительные шаги. Вы будете ссылаться на мир - не на происхождение мира, а на систему отсчета самой 3D-камеры.
Хорошая стратегия заключается в том, чтобы рассматривать камеру как трехмерный объект в трехмерном мире. Как и любой другой 3D-объект, вы используете матрицу «преобразования мира», чтобы поместить камеру в желаемое положение и ориентацию в 3D-мире. Эта матрица преобразования мира камеры преобразует объект камеры из исходного, смотрящего вперед вращения (вдоль оси z), в реальное положение мира (xc, yc, zc) и вращение мира.
На следующем рисунке показаны взаимосвязи между системой координат World (x, y, z) и системой координат View (camera) (x ', y', z ').