какая программа отвечает за проекцию в компьютерной графике

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

Делает ли это directx/opengl? Они действительно делают это для игрового/графического дизайнера, или вам нужно реализовать проекцию из 3D в 2D с помощью opengl/directx? Вот тут я в замешательстве.


person Dan Webster    schedule 08.02.2013    source источник
comment
Этот вопрос слишком открыт, чтобы на него можно было ответить здесь. Для начала вы можете взглянуть на ссылку в ответе на этот вопрос.   -  person Ken White    schedule 08.02.2013
comment
Это называется проекционная матрица, хотя это приведет вас только к нормализованным координатам устройства, OpenGL/ DirectX справится с остальным.   -  person Robert Rouhani    schedule 08.02.2013


Ответы (1)


Ну, это зависит от того, о какой компьютерной графике мы говорим. Например, изображения, которые вы обычно видите в визуальных эффектах (например, ILM, Digital Domain, Weta Digital) и компьютерных анимационных фильмах (например, Pixar, Dreamworks Animation, Disney Animation, Blu Sky), создаются в автономном режиме с помощью специального программного обеспечения для визуализации. Такие автономные визуализаторы могут быть реализованы несколькими способами. Могут быть растеризаторы (мало чем отличающиеся от OpenGL или DirectX 3D) или трассировщики лучей (совершенно разные) и даже гибриды.

OpenGL и DirectX 3D — это API, предназначенные для создания изображений в реальном времени с помощью растеризации, и я собираюсь объяснить их. Первое, что вы должны понять, это то, что с точки зрения OpenGL и DirectX 3D нет ни 3D-моделей, ни камеры, ни сцены. Для них есть только фреймбуфер (двухмерный холст), в который они растрируют (= рисуют) просто точки, линии или треугольники. При растеризации таких примитивов на процесс могут влиять всевозможные входные данные, например изображения (текстуры) или параметры, управляющие процессом имитации освещения.

В современных системах этот процесс состоит из 4 частей.

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

  2. (необязательно) Мозаичное затенение применяется к примитивам, определенным позициями, сгенерированными на предыдущем шаге. Тесселяцию можно рассматривать как своего рода управляемое программой уточнение, позволяющее сделать объекты более плавными или с большей детализацией.

  3. (необязательно) Затенение геометрии может превратить сгенерированные до сих пор примитивы в новые примитивы. Это полезно, например, для создания прядей смоделированных волос.

  4. Фрагментарное затенение вычисляет окончательный цвет для каждого фрагмента, покрываемого растеризованным примитивом. На пиксель приходится как минимум один фрагмент, но со сглаживанием их может быть гораздо больше.

И при чем тут OpenGL и DirectX 3D? Что ж, до OpenGL-2 и DirectX-8 описанные выше шаги были жестко закодированы в них, так что с практической точки зрения они это делали. Сегодня современные OpenGL и DirectX 3D больше похожи на универсальный графический инструментарий, который опытный программист может использовать для реализации своих собственных конвейеров генерации графики. Шаги с 1 по 4 выполняются с помощью так называемых шейдерных программ, которые должны быть написаны программистом, использующим OpenGL или DirectX 3D, чтобы все это работало.

person datenwolf    schedule 08.02.2013