2

我正在关注适用于 iPhone 的 Ray Wenderlich OpenGL ES 2 教程。

我对他的用法感到困惑,glVertexAttribPointer并希望有人能解释他为什么像他那样设置参数。专门用于sizeof()for 中的最终参数glVertexAttribPointer。与sizeof数据偏移有何关系?

这是顶点结构:

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

以及 Vertex 和 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

谢谢!!

4

1 回答 1

3

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

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

“位置”在结构体的开头,所以没有偏移量到结构体中(因此,第6个参数是0,但是如果你看颜色属性,步幅是一样的,但是偏移量是3浮动 - 即:在位置数据之后)。

于 2013-05-25T15:59:34.957 回答