Перенос простого отрисовщика OpenGL ES 2.0 в Direct3D 11
В этом упражнении по переносу мы начнем с основных принципов: добавление простого отрисовщика для спиннинга, вершин затеняемого куба из OpenGL ES 2.0 в Direct3D, таким образом, что он соответствует шаблону Приложения DirectX 11 (универсальная версия Windows) из Visual Studio 2015. Как мы рассмотрим этот процесс порта, вы узнаете следующее:
- Перенос простого набора буферов вершин в буферы ввода Direct3D
- Перенос униформ и атрибутов в буферы констант
- Настройка объектов шейдера Direct3D
- Как базовые семантики HLSL используются в разработке шейдеров Direct3D
- Как перенести очень простой GLSL в HLSL
Этот раздел начинается после создания нового проекта DirectX 11. Чтобы узнать, как создать проект DirectX 11, см. статью "Создание нового проекта DirectX 11" для универсальная платформа Windows (UWP).
Проект, созданный из любой из этих ссылок, содержит весь код для подготовленной инфраструктуры Direct3D , и вы можете немедленно начать процесс переноса отрисовщика из Open GL ES 2.0 в Direct3D 11.
В этом разделе рассматриваются два пути кода, которые выполняют одну и ту же базовую задачу графики: в окне отображается поворачивающийся затеняющий вершин куб. В обоих случаях код охватывает следующий процесс:
- Создание сетки куба из жестко закодированных данных. Эта сетка представлена в виде списка вершин, причем каждая вершина имеет позицию, обычный вектор и цветной вектор. Эта сетка помещается в буфер вершин для обработки конвейера заливки.
- Создание объектов шейдера для обработки сетки куба. Существует два шейдера: шейдер вершин, обрабатывающий вершины для растризации, и шейдер фрагмента (пикселя), который цветирует отдельные пиксели куба после растеризации. Эти пиксели записываются в целевой объект отрисовки для отображения.
- Формирование языка заливки, используемого для обработки вершин и пикселей в шейдерах вершин и фрагментов соответственно.
- Отображение отрисованного куба на экране.
После выполнения этого пошагового руководства необходимо ознакомиться со следующими основными различиями между Open GL ES 2.0 и Direct3D 11:
- Представление буферов вершин и данных вершин.
- Процесс создания и настройки шейдеров.
- Языки заливки и входные и выходные данные для объектов шейдера.
- Поведение рисования экрана.
В этом пошаговом руководстве мы рассмотрим простую и универсальную структуру отрисовщика OpenGL, которая определена следующим образом:
typedef struct
{
GLfloat pos[3];
GLfloat rgba[4];
} Vertex;
typedef struct
{
// Integer handle to the shader program object.
GLuint programObject;
// The vertex and index buffers
GLuint vertexBuffer;
GLuint indexBuffer;
// Handle to the location of model-view-projection matrix uniform
GLint mvpLoc;
// Vertex and index data
Vertex *vertices;
GLuint *vertexIndices;
int numIndices;
// Rotation angle used for animation
GLfloat angle;
GLfloat mvpMatrix[4][4]; // the model-view-projection matrix itself
} Renderer;
Эта структура имеет один экземпляр и содержит все необходимые компоненты для отрисовки очень простой сетки с затенением вершин.
Обратите внимание , что любой код OpenGL ES 2.0 в этом разделе основан на реализации API Windows, предоставленной группой Khronos, и использует синтаксис программирования Windows C.
Это важно знать
Технологии
- Microsoft Visual C++
- OpenGL ES 2.0
Необходимые компоненты
- Необязательно. Просмотрите код EGL порта в DXGI и Direct3D. Ознакомьтесь с этим разделом, чтобы лучше понять графический интерфейс, предоставляемый DirectX.
Стремянка
Раздел | Описание |
---|---|
При переносе простого отрисовщика из OpenGL ES 2.0 сначала необходимо настроить эквивалентные объекты вершин и шейдеров фрагментов в Direct3D 11 и убедиться, что основная программа может взаимодействовать с объектами шейдера после их компиляции. |
|
На этом шаге вы определите буферы вершин, которые будут содержать сетки и буферы индекса, которые позволяют шейдерам проходить вершины в указанном порядке. |
|
После перемещения по коду, который создает и настраивает буферы и объекты шейдеров, пора перенести код внутри этих шейдеров из OpenGL ES 2.0 в ЯЗЫК шейдеров GL (GLSL) на высокоуровневый язык шейдеров Direct3D 11 (HLSL). |
|
Наконец, мы переносим код, который рисует куб спиннинга на экран. |
Дополнительные ресурсы
- Подготовка среды разработки для разработки игр UWP DirectX
- Создание нового проекта DirectX 11 для UWP
- Сопоставление концепций и инфраструктуры OpenGL ES 2.0 с Direct3D 11