Как правило, мир представляет собой карту множества треугольников, а карта представляет собой список этих треугольников и местоположение в мире каждой вершины. Процесс их рисования:
- Установите положение «камеры» - если бы вы стояли в мире, это то место, где вы были бы в мировом положении
- Преобразуйте вершины треугольника в «пространство камеры»
- Преобразуйте треугольники из «пространства камеры» в «пространство экрана» - именно здесь происходит соответствующий эффект (отдаленные вещи меньше). Треугольники становятся 2D в этой точке.
- Нарисуйте 2D-треугольник на скрытом экране.
- Когда все треугольники нарисованы, покажите экран игроку.
Последний шаг обычно привязан к частоте кадров монитора, поэтому процесс показа скрытого экрана выполняется во время интервала v-blank - концепция, полученная из мониторов с электронно-лучевой трубкой, которая позволяла катодному пучку перемещаться снизу справа вверх слева, это требовало быстрого, но не мгновенного изменения напряжения на отклоняющих катушках в задней части лучевой трубки.
Это действительно простой метод. Для достижения высокой производительности вам необходимо добавить такие вещи, как удаление скрытой поверхности, окклюзия, определение видимого множества и так далее. Есть много алгоритмов, участвующих в решении, что рисовать.
Кроме того, я сказал, что мир состоит из треугольников, но он не может быть сохранен на диске таким образом. Часто треугольники, которые рисуются на экране, определяются во время выполнения из примитивов более высокого порядка, таких как карты высот, сплайны, тессалация, геометрические примитивы (например, сфера, прямоугольник и т. Д.) И так далее.
В выделенном оборудовании нет необходимости - многие ранние 3D-игры делали все это программно (даже на 8-битных процессорах без FPU). Это просто делает это быстрее и проще.
Такой простой вопрос. Нет простого ответа.