如何从顶点缓冲区对象中绘制一个三角形并设置其颜色?

时间:2011-12-01 13:42:51

标签: iphone ios opengl opengl-es vbo

我创建了一个顶点缓冲区对象,仅包含三角形的顶点,用于使用GL_TRIANGLES选项进行绘制。我的VBO没有颜色信息,因为我每帧都会改变颜色。

现在,我想在每次迭代中设置默认的顶点颜色后,在循环中绘制单个三角形:

glColor4f(red, green, blue, 1);

但我不确定如何进行实际绘图。

如果我想从VBO中选择一个或两个三角形以使用特定颜色绘制它们,我必须使用glDrawArrays吗?或者我必须使用glDrawElements吗?

是否有更有效的方法为VBO中的每个三角形设置颜色然后绘制它?或者可以在每个帧的循环中调用glColor44glDrawArrays吗?

1 个答案:

答案 0 :(得分:3)

首先,我宁愿建议忽略略高的内存成本,只需在VBO中存储每个顶点的颜色,因此只需复制每个三角形顶点的三角形颜色(不能设置每个三角形的颜色) )。这很可能比在循环中绘制单个三角形更有效。请记住,VBO的优势不仅在于它们可能的GPU存储,还在于您不需要对每个三角形甚至顶点进行驱动程序调用。因此,只需将每个三角形颜色复制到每个顶点颜色,并通过一次调用glDrawArrays来绘制所有内容(如果您需要复制几乎每个顶点,glDrawElements将不会为您带来太多收益,这使得指数无用)。

说,您当然可以使用glDrawArrays绘制单个三角形,这就是firstcount参数的用途。因此,如果您有一个包含3个三角形的9个顶点的VBO,请调用

glDrawArrays(GL_TRIANGLES, 3, 3);

仅绘制第二个三角形。那很容易。同样,您可以使用count的{​​{1}}和offset参数来选择要绘制的索引数组的特定部分。