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

标签 iphone ios opengl opengl-es vbo

我创建了一个顶点缓冲对象,该对象仅包含三角形的顶点,以便使用GL_TRIANGLES选项进行绘制。我的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);

仅绘制第二个三角形。这么简单同样,您可以使用countoffsetglDrawElements参数来选择要绘制的索引数组的特定部分。

关于iphone - 如何从“顶点缓冲对象”绘制单个三角形并设置其颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8342301/

相关文章:

iphone - 阅读有关导航动画的崩溃报告

c++ - OpenGL imgui slider 范围

c++ - OpenGL 版本和编程

iphone - 如何在 ipad 编码中将 splitview 添加到我的基于 View 的应用程序

objective-c - 使用 UIPinchGestureRecognizer 改变圆的大小

ios - 如何使用 XCode 6 在 iOS 7 的 UItableviewCell 中制作 UIlabel 的动态高度

ios - 出现键盘时调整 IOS WKWebView 的大小

OpenGL 透明度无法正常工作

java - 使用 javapns 作为推送通知提供者/服务器

ios - 如何在不打开短信弹出窗口的情况下以编程方式在后台发送短信?