繁体   English   中英

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

[英]OpenGL: Are degenerate triangles in a Triangle Strip acceptable outside of OpenGL-ES?

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

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

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

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

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

除了上面的答案(除非你根据真实三角形与退化的比例做一些疯狂的事情,否则它根本不应该受到伤害),同时请注意更新版本的OpenGL和OpenGL ES(3.x或更高版本) )API支持将断点插入索引列表而不需要实际的简并三角形的方法,这称为原始重启。

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

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

它不会导致伪影。 至于“降低性能”......相对于什么? 相对于没有索引的随机分类的三角形? 是的,它会比那更快。

但是还有很多其他事情可以做。 例如,原始重启,这消除了对退化三角形的需要。 然后使用有序的三角形列表来提高缓存一致性。 三角形条纹会比那更快吗?

它取决于您渲染的内容,顶点着色器的价格以及其他各种因素。

但最终,如果您关心特定平台上的最高性能,那么您应该为每个平台进行分析,并根据您正在运行的平台选择顶点数据。 如果性能是真的对你那么重要,那么你将不得不提出一些努力。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM