我正在关注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
。
谢谢!
答案 0 :(得分:3)
他正在使用vbo。所以,基本上,传递顶点结构的大小会设置步幅。即:可以找到下一个顶点数据的位置。
想想VBO包含所有顶点结构的线性集合。第一个从0开始(在VBO内),下一个从sizeof(Vertex)开始,然后是sizeof(Vertex)* 2等。
“position”位于结构的开头,因此所需的结构没有偏移(因此,第6个参数为0,但是如果你看颜色属性,那么步幅是相同的,但是offset是3个浮点数 - 即:在位置数据之后)。