我创建了一个顶点缓冲对象,该对象仅包含三角形的顶点,以便使用GL_TRIANGLES选项进行绘制。我的VBO没有颜色信息,因为我每帧更改一次颜色。
现在,在每次迭代中设置默认的顶点颜色后,我试图在循环中绘制单个三角形:
glColor4f(red, green, blue, 1);
但是我不确定如何执行实际绘图。
如果要从VBO中挑选一个或两个三角形以使用特定颜色绘制它们,是否必须使用
glDrawArrays
?或者必须使用glDrawElements
?有没有更有效的方法来设置VBO中每个三角形的颜色然后绘制它?还是在每个帧的循环中调用
glColor44
和glDrawArrays
很好?
最佳答案
首先,我宁愿忽略略高的存储成本,只在VBO中存储每个顶点的颜色,因此只为三角形的每个顶点复制三角形的颜色(不能设置每个三角形的颜色)。这比循环绘制单个三角形更有效率。请记住,VBO的优势不仅在于其可能的GPU存储,还在于您不需要为每个三角形甚至顶点都需要驱动程序调用的事实。因此,只需将每个三角形的颜色复制为每个顶点的颜色,并通过一次调用glDrawArrays
即可绘制所有内容(如果您仍然需要复制几乎每个顶点,那么glDrawElements
不会给您带来很多好处,这会使索引变得无用)。
也就是说,您当然可以使用glDrawArrays
绘制单个三角形,这就是first
和count
参数的作用。因此,如果您有一个包含3个三角形的9个顶点的VBO,只需调用
glDrawArrays(GL_TRIANGLES, 3, 3);
仅绘制第二个三角形。这么简单同样,您可以使用
count
的offset
和glDrawElements
参数来选择要绘制的索引数组的特定部分。
关于iphone - 如何从“顶点缓冲对象”绘制单个三角形并设置其颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8342301/