2010-09-09 122 views
3

我目前正在开发自己的3D引擎,它在几何渲染方面的能力非常有限,我想扩展它。我感兴趣的是如何在存储几何对象和绘制它们的过程中完成它。在渲染中使用三角形条和三角形扇有什么好处?

现在我的抽象仅支持(在Direct3D方面D3DPT_TRIANGLELIST)呈现几何形状为三角形的泛型列表。还有其他两种表示物体的方式 - 例如三角形条纹(D3DPT_TRIANGLESTRIP)或三角形扇形(D3DPT_TRIANGLEFAN)。

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

他们的使用如何受益,并且他们在某种程度上适合游戏创作渠道? (我的意思一样,可以让他们利用这些strips/fans技术发展的艺术家他们的模型?)

回答

4

有表示所述对象的 其他一些方法 - 诸如 三角形带(D3DPT_TRIANGLESTRIP) 或三角形扇(D3DPT_TRIANGLEFAN )。

我的问题是 - 他们实际上是 在现代 3d引擎中绘制几何时使用?

TriangleStrip经常用于地形绘制或其他与重启带索引(0xFFFF或0xFFFFFFFF的)或变性条一起选择类型网格的。它们提供了每个索引存储三角形的最佳比例。如果你有良好的顶点缓存优化网格,他们将完全统治世界。

TriangleFan存在于D3D9但从D3D10和D3D11已被删除。我的建议,避免使用它们。他们不再好的原因是因为就属性插值而言(比如texcoord或法线),他们做了一件糟糕的工作,因为你可以用它们做非常细长的三角形。

你可以说你可以做到这一点有条或三角形名单,是的,当然,但实际上做球迷的能力导致不友善(人工制品明智)啮合。通过从D3D中删除它,内容创建工具可能会输出tesselation,避免具有锐角的长三角形。

长和细的三角形也是不好的(性能方面),因为它在光栅化过程中会产生次最佳的四分片段(请参见出色的Humus post on triangulation)。

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

5

三角条是非常普遍的,因为他们可以更有效地代表表面而不是三角名单。此外,您可以缝合视觉上分离的三角形条纹,以便可以将整个不相交的几何形状呈现为单个条纹。您可以通过复制第一个条的最后一个顶点和第二个条的第一个顶点来完成此操作,从而创建两个简化三角形,这些三角形桥接间隙但不渲染。

风扇并不常见。他们可以派上用场来绘制凸多边形,但即使是那些通常也可以像条带一样高效地完成。

+0

此外,现在图形API暴露特殊的indice值,避免你做这样的技巧,请参阅我的答案。 – Stringer 2010-09-09 15:33:59

2

好处是它们减少了必须传输到渲染引擎的数据量。发送N列表中的三角形需要指定3*N分;如果它们可以被表示为条或风机,那么只需要指定N+2