【发布时间】:2015-09-15 04:13:35
【问题描述】:
我想模拟一堆球的运动。这些球使用 GL_TRIANGLE_FAN 渲染为 12 个顶点。在我的设计中,每个球对象都维护着一个由自己的顶点属性组成的数组。然而,每次我调用glDrawElements,它只会绘制一个Vertex Buffer Object。 1000 个球需要 1000 个平局。它效率不高。如果我画点而不是三角扇,我可以画如下:
class Ball
{
public:
GLfloat x, y;
// ...
}
Ball balls[] = {Ball(100, 100), Ball(80, 120), ...};
void display()
{
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, sizeof(Ball), 0); // stride
glDrawArrays(GL_POINTS, 0, vertex_num);
//...
}
使用stride 参数,我可以从balls 数组中“选择”x、y 并跳过其他成员。我想知道当每个对象都维护一个顶点属性数组时,我怎么能做同样的事情?或者我应该提取所有顶点属性并将它们组合成一个 VBO?但是需要额外的代码来维护,增加了耦合度。
【问题讨论】: