c++ - OpenGL:三角形带中的退化三角形在 OpenGL-ES 之外是否可以接受?

标签 c++ opengl opengl-es

在本 OpenGL ES 教程中,解释了优化模型的技术,其中之一是使用三角形带定义网格,使用“退化”三角形结束一个带并开始另一个带而不结束图元。 http://www.learnopengles.com/tag/degenerate-triangles/

但是,本指南非常针对移动平台,我想知道这项技术是否适用于现代桌面硬件。具体来说,它会伤害吗?它会导致图形伪影或降低性能(反对将 strip 分割成单独的基元吗?)

如果它不会导致伪影并且至少表现良好,我打算使用它只是因为它使我想绘制的某个网格中的顶点组织起来更容易。

最佳答案

退化三角形在所有平台上都运行良好。我知道一个旧的固定功能控制台在退化的三角形中苦苦挣扎,但任何模糊现代的东西都可以。减少绘制调用的次数总是好的,我当然会使用退化而不是多次调用 glDrawArrays。

然而,通常表现更好的替代方案是三角形列表的索引绘制。使用三角形列表,您可以非常灵活地重新排列三角形,以最大限度地利用转换后缓存。转换后缓存是通过顶点着色器的最后几个顶点的硬件缓存,GPU 可以发现您是否重新发布了相同的顶点并跳过该顶点的整个顶点着色器。

关于c++ - OpenGL:三角形带中的退化三角形在 OpenGL-ES 之外是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37145968/

相关文章:

android - Android 上符合 OpenGL-ES 2.0 要求的最小纹理尺寸?

C++ 多个运算符 : assign A or B not equal to C

c++ - Opencv tic tac toe XO检测

c - OpenGL:按下显示窗口时形状改变位置

debugging - OpenGL 抑制基于 MFC 对话框的应用程序中的异常

xcode - MacOS Mojave Xcode 10 + OpenGL 在初始化窗口后未绘制

opengl-es - android OpenGLES 1.x CameraPreview 到 Surfacetexture

Android Matrix.multiplyMV 没有通过翻译改变我的结果

c++ - 为什么我不能打印工资?

c++ - 如何像下面的例子一样使用 byte