Я могу понять, что для 2D-игр со спрайтами спрайты перемещаются по осям X и Y. Однако для 3D-игр как игровые движки рассчитывают, как визуализировать 3D-среду на плоском 2D-мониторе компьютера?
Math.PI
много чего.
Я могу понять, что для 2D-игр со спрайтами спрайты перемещаются по осям X и Y. Однако для 3D-игр как игровые движки рассчитывают, как визуализировать 3D-среду на плоском 2D-мониторе компьютера?
Math.PI
много чего.
Ответы:
Трехмерные спрайты получают новую ось Z, которая хранит глубину, размер масштабирования и движения в плоскости X / Y. Спрайт, который находится дальше, имеет большее значение Z. Теперь разделите размер спрайта и движения оси X / Y на ось Z. Как уже отмечали другие, это трехмерная перспективная проекция . Вот лучшая иллюстрация, которую я смог найти:
Это имеет смысл концептуально, потому что вещи, которые находятся дальше, выглядят меньше. Их видимые движения также выглядят меньше.
Кроме того, близкие объекты должны быть нарисованы поверх удаленных объектов. Опять же, это имеет смысл концептуально, потому что близкие объекты перекрывают вид объектов позади них.
Эти методы могут быть реализованы на уровне спрайтов. Однако для наиболее реалистичной проекции каждый спрайт имеет 3D-модель и отображается на уровне пикселей.
Это похоже на то, как вы можете снимать 2D изображения нашего мира на камеру. 3D-среда описывается в терминах координат X, Y и Z, но в конечном итоге вам необходимо отобразить это на 2D-экран только с осями X и Y. Это делается с помощью проекции , где каждая 3D-точка проецируется на плоскость 2D-вида.
Проще говоря, вы можете представить проекционные линии, идущие от виртуальной камеры в трехмерном пространстве к каждой трехмерной точке, проходя через плоскость обзора. Точка, в которой линия проекции пересекает 2D-плоскость, является проекцией 3D-точки. В ортографической проекции все эти проекционные линии параллельны; расстояние между объектом и камерой не имеет никакого значения для проецируемой формы. Этот тип проекции нереалистичен, но он полезен в некоторых случаях, например при рисовании 2D-графики с использованием 3D-движка (например, HUD). Другой тип проекции - это перспективная проекция, где эти линии сходятся, делая более удаленные объекты кажущимися меньшими и давая более реалистичные результаты. На этой странице есть некоторые цифры, которые могут помочь вам визуализировать процесс.
Проекция - это один из нескольких объектов преобразования, которые выполняются в графическом конвейере и обычно выполняются с использованием матрицы проекции . Обратите внимание, что хотя проекция подразумевает отбрасывание координаты Z, в действительности преобразованное значение Z по-прежнему используется как мера глубины экрана, чтобы мы могли определить, какие объекты видны, а какие закрыты другими объектами. Это известно как z-буферизация .
Это все о проекции , геометрической операции, которая позволяет вам определить пространство из другого пространства высшего измерения (в основном, в вашем случае, вы описываете 2D-изображение из 3D-среды).
Проще говоря, вот как движки 3D-рендеринга генерируют изображение (с учетом 3D-сцены и проекции):
Для каждого пикселя полученного изображения
Конечно, это простая модель, я не говорю о отражающих / преломляющих / полупрозрачных объектах спецэффектов, таких как дым ...
Матрица . Вернее, много математической математики.
Это страшная штука для непосвященных. Обычно для преобразования группы трехмерных координат в пространстве в двумерные координаты на экране используются три матрицы 4х4 (включая глубину экрана как Z).
3D матрицы представляют собой набор из 16 значений с плавающей запятой, расположенных в сетке 4x4. Алгоритмы используются для генерации требуемых значений, а затем с использованием умножения матрицы на вектор эти числа преобразуют трехмерный вектор (X, Y, Z).
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
Это единичная матрица. По сути, это никак не влияет на координаты вектора.
Первая - это мир или модель матрицы. Эта матрица берет вершины в отдельной модели (такой как ящик), смоделированной вокруг начала координат (0, 0, 0), и преобразует их в координаты мировых вершин. Это может включать масштабирование объекта, вращение его вокруг его источника и, наконец, перемещение его туда, где он находится на сцене.
Вторая матрица - это матрица вида . Это берет мировые координаты и преобразует их так, чтобы они находились в контексте представления. Концепция камеры обычно используется для генерации этой матрицы.
Камера обычно содержит вектор положения, вектор направления или цели и вектор повышения . Этот верхний вектор описывает «вращение» камеры.
Эти векторы используются для генерации так называемого взгляда на матрицу.
Это влияние похоже на мировую матрицу в том, что она по существу вращается и переводит мир вокруг камеры в «положение» камеры.
Камера, которая находится в 10 единицах вдоль оси X, будет переводить мировые координаты на 10 единиц в другом направлении.
Последний кусок головоломки - матрица проекции . В перспективной проекции, подобной камере, матрица преобразует почти экранные координаты, создавая иллюзию перспективы с полем обзора в x градусов.
Если вы думаете с точки зрения углов экрана (для игры 640x480), то именно так проекция «выравнивает» координаты вдоль оси Z в пределах 2D координат экрана. Для ортографической проекции масштабирование вдоль оси Z в экран не выполняется. Для перспективы, чем дальше объект, тем меньше он становится по отношению к экстентам экрана.