我正在尝试在OpenGL中使用单个结构和单个VBO为我的对象添加颜色。为此,我创建了一个Vertex
结构,如下所示:
typedef struct {
float x;
float y;
float z;
float r;
float g;
float b;
float a;
} Vertex;
我已经知道我正确设置了所有坐标和颜色以获得我想要的东西,因为我运行了一个测试迭代我存储在列表中的每个对象并绘制点并使用{设置颜色{1}}和glVertex3f
(这比我正在寻找的要慢得多)。但是当我尝试使用VBO绘制它时,我只会得到一大堆彩色三角形到处都是。
绘制VBO的渲染循环部分如下所示:
glColor4f
我做错了什么?
答案 0 :(得分:4)
glVertexPointer(3, GL_FLOAT, 0, NULL);
^
Vertex
数组中的位置值没有紧密排列,因此您无法0
使用stride
。使用sizeof( Vertex )
。
glColorPointer(4, GL_FLOAT, offsetof(Vertex, r), NULL);
^^^^^^^^^^^^^^^^^^^
我......不确定你要去的地方。也许您认为glVertexPointer()
/glColorPointer()
的第3个参数是pointer
而不是stride
?将您的offsetof()
移至最终参数pointer
。
所有在一起:
glVertexPointer(3, GL_FLOAT, sizeof( Vertex ), offsetof(Vertex, x) );
glColorPointer(4, GL_FLOAT, sizeof( Vertex ), offsetof(Vertex, r) );
您可能需要将pointer
参数值转换为void*
,具体取决于您的实施方式offsetof()
。