glVertexAttribPointer解释

时间:2013-05-25 03:03:32

标签: opengl-es vertex-buffer

我正在关注Ray Wenderlich OpenGL ES 2 tutorial for the iPhone.

我很担心他对glVertexAttribPointer的使用,并希望有人可以解释为什么他像他一样设置参数。特别是sizeof()用于glVertexAttribPointer中的最终参数。 sizeof如何与数据偏移相关?

这是Vertex结构:

typedef struct{
float Position[3];
float Color[4];
}
Vertex;

Vertex and Indices数据代码:

const Vertex Vertices[] = {
{{1, -1, 0}, {1, 0, 0, 1}},
{{1, 1, 0}, {1, 0, 0, 1}},
{{-1, 1, 0}, {0, 1, 0, 1}},
{{-1, -1, 0}, {0, 1, 0, 1}},
{{1, -1, -1}, {1, 0, 0, 1}},
{{1, 1, -1}, {1, 0, 0, 1}},
{{-1, 1, -1}, {0, 1, 0, 1}},
{{-1, -1, -1}, {0, 1, 0, 1}}
};

const GLubyte Indices[] = {
 // Front
 0, 1, 2,
2, 3, 0,
// Back
4, 6, 5,
4, 7, 6,
// Left
2, 7, 3,
7, 6, 2,
// Right
0, 4, 1,
4, 1, 5,
// Top
6, 2, 1,
1, 6, 5,
// Bottom
0, 3, 7,
0, 7, 4
};

请解释为什么参数的设置特别是整个sizeof

谢谢!

1 个答案:

答案 0 :(得分:3)

他正在使用vbo。所以,基本上,传递顶点结构的大小会设置步幅。即:可以找到下一个顶点数据的位置。

想想VBO包含所有顶点结构的线性集合。第一个从0开始(在VBO内),下一个从sizeof(Vertex)开始,然后是sizeof(Vertex)* 2等。

“position”位于结构的开头,因此所需的结构没有偏移(因此,第6个参数为0,但是如果你看颜色属性,那么步幅是相同的,但是offset是3个浮点数 - 即:在位置数据之后)。