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

3d 在渲染中使用三角形条带和三角形扇有什么好处?,3d,geometry,rendering,3d,Geometry,Rendering,我目前正在开发自己的3d引擎,它在几何体渲染方面的能力非常有限,我想扩展它。我感兴趣的是如何存储几何对象并绘制它们 目前,我的抽象只支持将几何体渲染为三角形的通用列表(D3DPT_TRIANGLELIST,在Direct3D术语中)。还有两种表示对象的其他方式,例如三角形条带(D3DPT_TRIANGLESTRIP)或三角形扇(D3DPT_TRIANGLEFAN) 我的问题是——在现代3D引擎中绘制几何图形时,它们真的被使用了吗 它们的使用如何受益?它们是否以某种方式适合游戏制作流程? (我的意

我目前正在开发自己的3d引擎,它在几何体渲染方面的能力非常有限,我想扩展它。我感兴趣的是如何存储几何对象并绘制它们

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

我的问题是——在现代3D引擎中绘制几何图形时,它们真的被使用了吗

它们的使用如何受益?它们是否以某种方式适合游戏制作流程?
(我的意思是,艺术家能否开发他们的模型,以便他们利用这些
条带
/
风扇
技术?

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


粉丝并不常见。它们可以方便地绘制凸面多边形,但即使是那些凸面多边形,通常也可以使用条带进行同样有效的绘制。

好处在于它们减少了必须传输到渲染引擎的数据量。要发送列表中的
N
三角形,需要指定
3*N
点;如果它们可以表示为条形或扇形,则只需指定
N+2
点即可

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

我的问题是——他们真的是吗 在现代图形中绘制几何图形时使用 3d引擎

TriangalStrip
经常用于地形渲染或其他类型的网格,这些网格具有重新启动条带索引(0xFFFF或0xFFFFFF)或退化条带的合并。它们提供了每个索引存储中三角形的最佳比率。如果你有很好的顶点缓存优化网格,它们将完全统治世界

三角帆
出现在D3D9中,但已从D3D10和D3D11中删除。我的建议是,避免使用它们。它们不再好的原因是,就属性插值而言(如texcoord或法线),它们的工作非常糟糕,因为可以使用它们生成非常薄和细长的三角形

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

长三角形和细三角形也不好(性能方面),因为它在光栅化过程中生成次优的四边形碎片(请参见“优秀”)


当然,如果您正在编写一个高性能/高质量的渲染引擎,如果您正在编写一个爱好代码,您可能不想太在意它。

现在图形API公开了一些特殊的索引值,以避免您使用这些技巧,请参阅我的答案。