我正在开发一个小型游戏引擎。它的特点之一是它应该支持 DirectX 和 OpenGL 渲染。
我正在使用顶点缓冲区对象,我有一个结构来定义我的顶点格式。问题是我希望能够对 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 代码的结构。
最佳答案
您需要做的是使用 ARB_vertex_array_bgra extension.它专为 D3D 互操作而设计。
因此您的 glColorPointer
调用将如下所示:
glColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, sizeof(Vertex), BUFFER_OFFSET12);
关于c++ - 顶点缓冲区对象中的颜色 - DirectX 与 OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280195/