c++ - 顶点缓冲区对象中的颜色 - DirectX 与 OpenGL

标签 c++ opengl directx vbo

我正在开发一个小型游戏引擎。它的特点之一是它应该支持 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/

相关文章:

opengl - 注入(inject)帧缓冲区

c++ - 线顶点太粗(不管宽度是多少)

c++ - Box2D 和过剩。帧率问题

c++ - 这方程如何简化为

c++ - FFMPEG 帧到 DirectX 表面

c++ - “稳定”的多维缩放算法

c++ - 使用 va_list 和 printf 传递参数时的精度损失

c++ - 使用 strtok 拆分字符串(嵌套)

java - 在 JNA 中分配 WinDef.RECT 结构

c++ - Directx 11 Bitblt 替代方案