Как 3D-движки 3D-среды отображают 2D-экран?

Для 2D спрайт-игр я могу понять, что спрайты перемещаются по оси X и Y. Однако, для 3D-игр, как игровые движки вычисляют, как визуализировать 3D-среду на плоском 2D-мониторе компьютера?

9 голосов | спросил Kim Jong Woo 21 MaramMon, 21 Mar 2011 07:25:54 +03002011-03-21T07:25:54+03:0007 2011, 07:25:54

4 ответа


9

3D-спрайты получают новую ось Z, которая хранит глубину, размер и размеры масштабирования в плоскости X /Y. Спрайт, который находится дальше, имеет большее значение Z. Теперь разделите размер спрайта и движения оси X /Y на ось Z. Как отмечали другие, это трехмерная перспективная проекция . Вот лучшая иллюстрация, которую я могу найти:

введите описание изображения здесь>> </p>

<p> Это имеет смысл концептуально, потому что вещи, которые находятся дальше, выглядят меньше. Их видимые движения также выглядят меньше. </p>

<p> Кроме того, близкие объекты должны быть нарисованы поверх далеких объектов. Опять же, это имеет смысл концептуально, потому что близкие объекты закрывают вид объектов позади них. </p>

<p> Эти методы могут быть реализованы на уровне спрайтов. Однако для наиболее реалистичной проекции каждый спрайт имеет трехмерную модель и визуализируется на уровне пикселей. </p></body></html>

ответил Leftium 12 Maypm11 2011, 21:51:14
17

Это похоже на то, как вы можете захватывать 2D-изображения нашего мира на камеру. 3D-среда описывается в терминах координат X, Y и Z, но в конечном итоге вам необходимо сопоставить это с 2D-экраном только с осью X и Y. Это делается проекцией , где каждая точка 3D проецируется на плоскость 2D-изображения.

Проще говоря, вы можете представить проекционные линии, идущие от виртуальной камеры в трехмерном пространстве до каждой трехмерной точки, проходя через плоскость обзора. Точка, в которой проекционная линия пересекает двумерную плоскость, представляет собой проекцию трехмерной точки. В орфографической проекции эти проекционные линии все параллельны; расстояние между объектом и камерой не влияет на проецируемую форму. Этот тип проекции нереалистичен, но полезен в некоторых случаях, таких как рисование 2D-графики с использованием 3D-движка (например, HUD). Другой тип проекции - перспективная проекция, где эти линии сходятся, делая более удаленные объекты меньше и дают более реалистичные результаты. На этой странице есть цифры , которые могут помочь вам визуализировать этот процесс.

Проецирование является одним из нескольких объектов преобразования, проходящих в графическом конвейере и обычно выполняется с использованием a матрица проекции . Обратите внимание: хотя проекция подразумевает отказ от Z-координаты, в действительности преобразованное значение Z все еще используется для измерения глубины экрана, чтобы мы могли определить, какие объекты видны и какие из них закрыты другими объектами. Это называется z-buffering .

ответил Firas Assaad 21 MaramMon, 21 Mar 2011 08:21:26 +03002011-03-21T08:21:26+03:0008 2011, 08:21:26
5

Это все о проекте , геометрической операции, которая позволяет вам определить пространство из другого пространства (в основном, в вашем случае вы описываете 2D-изображение из 3D-среды).

Проще говоря, это то, как 3D-рендеринг-генераторы генерируют изображение (учитывая 3D-сцену и проекцию):

Для каждого пикселя результирующего изображения

  • Вычислить направление поиска (в соответствии с проекцией), это в основном трехмерный вектор
  • Найдите ближайший объект в вашей сцене, который «виден» в этом направлении (просто угадайте, какие объекты пересекаются с вектором, и сохраните ближайший)
  • Вычислите цвет этого объекта, у вас есть цвет пикселя!

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

ответил Takhiarel 12 Maypm11 2011, 14:11:40
2

Матрица . Вернее, много математической матрицы.

Это страшный материал для непосвященных. Как правило, три матрицы 4x4 участвуют в превращении пучка трехмерных координат в пространстве в 2D-координаты на экране (включая глубину в экране как Z).

3D-матрицы представляют собой набор из 16 значений с плавающей запятой, расположенных в сетке 4x4. Алгоритмы используются для генерации требуемых значений, а затем с использованием умножения матричных векторов эти числа преобразуют трехмерный вектор (X, Y, Z).

[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]

Это матрица identity . По существу ничего не делает для координат вектора.


Model

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


Вид

Вторая матрица - это матрица view . Это заставляет мир координировать и преобразовывать их так, чтобы они находились в контексте представления. Концепция камеры обычно используется для генерации этой матрицы.

Камера обычно содержит вектор позиция , вектор направление или целевой и вверх . Этот вектор вверх описывает «вращение» камеры.

введите описание изображения здесь

Эти векторы используются для создания так называемого вида .

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

Камера, которая составляет 10 единиц вдоль оси X, преобразует мировые координаты в 10 единиц в другом направлении.


Проекция

Последний кусок головоломки - это матрица проекция . В виде камеры, подобной перспективной проекции, матрица преобразует координаты экрана почти , чтобы создать иллюзию перспективы с полем зрения x градусов.

Если вы думаете по углам экрана (для игры 640x480), это то, как проекция «выравнивает» координаты вдоль оси Z в 2D-координатах экрана. Для орфографической проекции масштабирование не происходит по оси Z на экране. Для перспективы, чем дальше от объекта, тем меньше он становится по отношению к экстентам экрана.

введите описание изображения здесь

ответил Nick Bedford 13 Mayam11 2011, 08:42:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132