java - GL_QUADS 和 GL_TRIANGLE STRIP 之间是否存在明显的性能差异?

标签 java opengl rendering lwjgl vbo

所以我正在寻找对我的程序的优化,并且我想知道使用QUADS是否是最有效的方法。我正在使用映射交错VBO对于QUADS顶点和TEXTURE坐标。

所以我想知道使用以下之一代替 QUADS 进行渲染时是否有明显的性能提升:

注意:这需要包括我正在使用纹理的事实!

  • TRIANGLE_STRIPS
  • 三角形
  • QUAD_STRIPS

哪个最快?

注2:我环顾四周,找不到明确的答案。

最佳答案

  • GL_QUAD_STRIP 已弃用,并且在当前版本的 OpenGL 中不受支持,因此不再适用。另外,无论如何它也不太快 - 请参阅 this post详细解释为什么不再支持它(出于兼容性目的而保存)。

  • GL_TRIANGLES 通常是一个不错的选择。它会比使用过时的功能更快。原则上它也更快——无论如何,四边形被分解成三角形,所以你可以通过在 CPU 端执行一次,然后保存它必须做的 GPU 工作来节省大量不必要的工作。三角形是指定形状的标准且完美的方式。

  • GL_TRIANGLE_STRIPGL_TRIANGLES 更快,因为在指定第一个三角形后,需要一个点(而不是三个)来指定每个三角形。使用之前三角形的前两个顶点。你得到了连接的三角形,但你也使用了更少的内存。因为你需要阅读的内容更少,所以你可以更快地处理。 因为最后两个顶点只是在最后一个三角形中指定的,所以它们比可能来自谁知道在哪里的其他两个顶点更容易在内存中获取。使用退化三角形带也有一些技巧,可以实现三角形之间的无缝跳转。

如果您想要三者中的最佳性能,GL_TRIANGLE_STRIP 是最佳选择。不幸的是,除非您的数据已经指定用于三角形带,否则您必须自己对顶点进行排序并记住将退化三角形放在哪里。一个好的起点是高度图(即地形)。然而,首先优化代码的其他部分(例如确定是否绘制对象)可能会更好地利用您的时间。我可能是错的,我认为纹理的使用不应该影响您选择的顶点规范。

编辑:以下是如何使用 GL_TRIANGLE_STRIP 渲染正方形的示例

顶点:(0,0) (0,1) (1,0) (1,1)

三角形 1:(0,0) (0,1) (1,0) (1,1)

三角形 2:(0,0) (0,1) (1,0) (1,1)

关于java - GL_QUADS 和 GL_TRIANGLE STRIP 之间是否存在明显的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882474/

相关文章:

java - OpenGL(Java) 中禁用元素数组缓冲区对象时出现错误,无法使用偏移量

cocoa - CAOpenGLLayer 显示远程上下文

php - 在 Symfony2 中自定义选择/实体字段的呈现

java - 如何使渲染循环以一致的速率运行?

java - 在javascript中集体遍历元素?

java - 如何从资源中引用xml文件? eclipse

Java native 进程库

java - 是否有用于在 java 中制作可配置工具栏的小部件

c++ - 如何使用 glTranslatef 缩小对象?

css - HTML 根据部署机器以不同方式引用我的 CSS