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



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

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

glColor4f(red, green, blue, 1);

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

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

是否有一种更有效的方法来设置VBO中每个三角形的颜色,然后绘制它?或者在每一帧循环中调用glColor44glDrawArrays是否合适?

首先,我建议忽略稍微高一些的内存开销,只是在VBO中为每个顶点存储一个颜色,因此只是为每个三角形的顶点复制三角形的颜色(您不能设置每个三角形的颜色)。这可能比在循环中绘制单个三角形更有效。请记住,vbo的优势不仅在于它们可能的GPU存储,而且还在于您不需要为每个三角形甚至顶点调用驱动程序。因此,只需将每个三角形的颜色复制到每个顶点的颜色,并通过调用glDrawArrays绘制所有内容(如果您需要复制几乎每个顶点,glDrawElements不会为您带来太多好处,这使得索引毫无用处)。

说,你当然可以用glDrawArrays来画单独的三角形,这就是firstcount参数的作用。如果你有一个包含3个三角形的9个顶点的VBO,只需调用

glDrawArrays(GL_TRIANGLES, 3, 3);

只画第二个三角形。那么容易。同样,您可以使用glDrawElementscountoffset参数来选择索引数组的特定部分进行绘制。

最新更新