在渲染中使用三角形条带和三角形扇形有什么好处?

Yip*_*Yay 3 3d geometry rendering

我目前正在开发自己的3D引擎,它在几何渲染方面的能力非常有限,我想扩展它.我感兴趣的是如何在存储几何对象和绘制它们方面做到这一点.

目前,我的抽象仅支持将几何体渲染为三角形的通用列表(D3DPT_TRIANGLELIST在Direct3D术语中).还有其他几种表示对象的方法 - 例如三角形条带(D3DPT_TRIANGLESTRIP)或三角形扇形(D3DPT_TRIANGLEFAN).

我的问题是 - 它们是否在现代3D引擎中绘制几何图形时实际使用?

他们的使用如何受益并且他们以某种方式适合游戏创建管道? (我的意思是,艺术家可以开发他们的模型,以便他们利用这些strips/ fans技术吗?)

Str*_*ger 6

还有其他几种表示对象的方法 - 例如三角形带 (D3DPT_TRIANGLESTRIP) 或三角形扇形 (D3DPT_TRIANGLEFAN)。

我的问题是 - 在现代 3D 引擎中绘制几何图形时是否实际使用了它们?

TriangleStrip经常用于地形渲染或其他类型的网格与重新启动带索引(0xFFFF 或 0xFFFFFFFF)或退化带的结合。它们提供了每个索引存储的三角形的最佳比率。如果您拥有良好的顶点缓存优化网格,它们将完全统治世界。

TriangleFan存在于 D3D9 中,但已从 D3D10 和 D3D11 中删除。我的建议是,避免使用它们。它们不再有用的原因是,就属性插值而言(例如纹理坐标或法线),它们做得很糟糕,因为您可以用它们制作非常薄且拉长的三角形。

你可以说你也可以用条带或三角形列表来做到这一点,当然是的,但实际上做粉丝的能力会导致不友好的(人工制品方面的)网格。通过从 D3D 中删除它,内容创建工具可能会输出曲面细分,从而避免出现具有锐角的长三角形。

长而细的三角形也很糟糕(性能方面),因为它在光栅化过程中生成次优的四边形碎片(请参阅关于三角测量的优秀腐殖质帖子)。

当然,如果您正在编写高性能/高质量渲染引擎,则此建议适用,如果您正在编写业余爱好代码,您可能不太关心这一点。


Mar*_*tos 5

三角形条带非常常见,因为它们可以比三角形列表更有效地表示曲面.此外,您可以将视觉上分开的三角形条带拼接在一起,以便将整个不相交的几何体渲染为单个条带.您可以通过复制第一个条带的最后一个顶点和第二个条带的第一个顶点来完成此操作,从而创建两个退化三角形,这些三角形桥接间隙但不渲染.

球迷并不常见.它们可以派上用于绘制凸多边形,但即使是那些通常也可以通过条带有效地完成.