我创建了一个顶点缓冲区对象,仅包含三角形的顶点,用于使用GL_TRIANGLES选项进行绘制。我的VBO没有颜色信息,因为我每帧都会改变颜色。
现在,我想在每次迭代中设置默认的顶点颜色后,在循环中绘制单个三角形:
glColor4f(red, green, blue, 1);
但我不确定如何进行实际绘图。
如果我想从VBO中选择一个或两个三角形以使用特定颜色绘制它们,我必须使用glDrawArrays
吗?或者我必须使用glDrawElements
吗?
是否有更有效的方法为VBO中的每个三角形设置颜色然后绘制它?或者可以在每个帧的循环中调用glColor44
和glDrawArrays
吗?
答案 0 :(得分:3)
首先,我宁愿建议忽略略高的内存成本,只需在VBO中存储每个顶点的颜色,因此只需复制每个三角形顶点的三角形颜色(不能设置每个三角形的颜色) )。这很可能比在循环中绘制单个三角形更有效。请记住,VBO的优势不仅在于它们可能的GPU存储,还在于您不需要对每个三角形甚至顶点进行驱动程序调用。因此,只需将每个三角形颜色复制到每个顶点颜色,并通过一次调用glDrawArrays
来绘制所有内容(如果您需要复制几乎每个顶点,glDrawElements
将不会为您带来太多收益,这使得指数无用)。
说,您当然可以使用glDrawArrays
绘制单个三角形,这就是first
和count
参数的用途。因此,如果您有一个包含3个三角形的9个顶点的VBO,请调用
glDrawArrays(GL_TRIANGLES, 3, 3);
仅绘制第二个三角形。那很容易。同样,您可以使用count
的{{1}}和offset
参数来选择要绘制的索引数组的特定部分。