Я работаю над небольшим игровым движком. Одна из его особенностей заключается в том, что он должен поддерживать DirectX и OpenGL рендеринг.
Я использую Vertex Buffer Objects, и у меня есть структура, чтобы определить формат моих вершин. Проблема в том, что я хотел бы иметь возможность использовать одну и ту же структуру для DirectX и OpenGL, чтобы я мог переключаться с моего компонента визуализации DirectX на OpenGL без изменения вершин моих объектов.
Возможно ли это?
В настоящее время я использую следующую структуру для DirectX:
struct Vertex{
float position[3]; // x, y, z
float normal[3]; // nx, ny, nz
DWORD colour; // The vertex color
float texture[2]; // u, v
};
вместе с:
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1 )
как гибкий формат вершин.
Мое понимание OpenGL подсказывает мне, что когда я хочу нарисовать свой объект, я могу сказать цвет с помощью этой команды:
glColorPointer(4, GL_FLOAT, sizeof(Vertex), BUFFER_OFFSET24);
в процедуре рисования, предполагая, что цвет имеет 4 компонента. И действительно, это работает. Однако я не верю, что могу сказать OpenGL использовать целое число без знака для этой задачи, поэтому я использую:
struct Vertex{
float position[3]; // x, y, z
float normal[3]; // nx, ny, nz
float colour[4]; // r, g, b, a
float texture[2]; // u, v
};
эта структура для моего кода OpenGL.