OpenGL:OpenGL-ES之外的Triangle Strip中的退化三角形是可以接受的吗?

Ann*_*inn 2 c++ opengl opengl-es

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

但是,本指南非常适用于移动平台,我想知道这种技术是否适用于现代桌面硬件.具体来说,它会受伤吗?它会导致图形伪像还是降低性能(相反将条带分成单独的原型?)

如果它没有造成任何伪影并至少执行,我的目的是仅仅因为它使组织顶点在我想要绘制的某个网格中更容易.

Col*_*mbo 5

退化三角形在所有平台上都能很好地工作.我知道一个旧的固定功能控制台挣扎着堕落的三角形,但任何模糊的现代都会很好.减少绘制调用的数量总是很好,我当然会使用退化而不是多次调用glDrawArrays.

但是,通常表现更好的替代方案是三角形列表的索引绘制.使用三角形列表,您可以灵活地重新排序三角形,以最大限度地利用变换后缓存.变换后缓存是通过顶点着色器的最后几个顶点的硬件缓存,如果您重新发出相同的顶点并且跳过该顶点的整个顶点着色器,则GPU可以发现.


sol*_*xel 5

除了上述答案(不,它根本不应该受到伤害,除非您在真实三角形与退化的比率方面做了一些疯狂的事情),还要注意较新版本的 OpenGL 和 OpenGL ES(3.x 或更高版本) ) API 支持在不需要实际退化三角形的情况下将中断插入索引列表的方法,这称为原始重新启动。

https://www.khronos.org/opengles/sdk/docs/man3/html/glEnable.xhtml

启用后,您可以为索引类型编码“MAX_INT”,并在检测到时强制 GPU 从下一个索引值重新开始构建新的三条带。