【发布时间】:2011-08-28 20:15:35
【问题描述】:
是否可以在不同的顶点缓冲区中存储不同的顶点属性?
到目前为止我看到的所有例子都是这样的
float data[] =
{
//position
v1x, v1y, v1z,
v2x, v2y, v2z,
...
vnx, vny, vnz,
//color
c1r, c1g, c1b,
c2r, c2g, c2b,
...
cnr, cng, cnb,
};
GLuint buffname;
glGenBuffers(1, &buffname);
glBindBuffer(GL_ARRAY_BUFFER, buffname);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
并且绘图是这样完成的:
glBindBuffer(GL_ARRAY_BUFFER, buffname);
glEnableVertexAttrib(position_location);
glEnableVertexAttrib(color_location);
glVertexAttribPointer(position_location, 3, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(color_location, 3, GL_FLOAT, GL_FALSE, 0, (void*)(3*n));
glDrawArrays(GL_TRIANGLES, 0, n/3);
glDisableVertexAttrib(position_location);
glDisableVertexAttrib(color_location);
glBindBuffer(GL_ARRAY_BUFFER, 0);
不可以在不同的VBO中存储位置数据和颜色数据吗?问题是我不明白这将如何解决,因为您不能一次绑定两个缓冲区,对吗?
如果有一个简单但效率低下的解决方案,我会更喜欢它而不是更复杂但有效的解决方案,因为我处于初级学习状态,我不想让事情变得太复杂。
另外,如果我要问的是可能的,这是一个好主意吗?
澄清一下:我确实了解如何在不同的 VBO 中存储不同的属性。我不明白我以后会怎么画它们。
【问题讨论】: