XNA/DirectX:您应该始终使用索引吗?

XNA/DirectX:您应该始终使用索引吗?,directx,xna,vertex-buffer,Directx,Xna,Vertex Buffer,我正在为植被制作广告牌,广告牌当然是由两个三角形组成的一个四边形。顶点数据存储在一个顶点缓冲区中,但我是否应该考虑索引?我知道,在使用索引时,就发送到图形卡的顶点而言,在地形等方面的节省是巨大的,但在广告牌上使用索引意味着我将每个四边形有4个顶点,而不是6个,因为每个四边形都完全独立于其他四边形 使用索引是否可能因为存在额外的间接性而降低性能?或者这一点都不重要吗 我问这个问题是因为使用索引会使事情稍微复杂化,我很想知道我是否在做额外的工作,这只会让事情变得更慢(无论是理论上还是实际上都是显而易

我正在为植被制作广告牌,广告牌当然是由两个三角形组成的一个四边形。顶点数据存储在一个顶点缓冲区中,但我是否应该考虑索引?我知道,在使用索引时,就发送到图形卡的顶点而言,在地形等方面的节省是巨大的,但在广告牌上使用索引意味着我将每个四边形有4个顶点,而不是6个,因为每个四边形都完全独立于其他四边形

使用索引是否可能因为存在额外的间接性而降低性能?或者这一点都不重要吗

我问这个问题是因为使用索引会使事情稍微复杂化,我很想知道我是否在做额外的工作,这只会让事情变得更慢(无论是理论上还是实际上都是显而易见的)


这是使用XNA,但应适用于DirectX

当涉及到非常原始的gemotery时,使用索引可能没有任何意义,在这种情况下,我甚至不关心性能,即使是普通的硬件也会每秒渲染数百万个三角形


现在,从技术上讲,您不知道硬件将如何在内部处理数据,它可能会将它们转换为索引,因为这是最流行的几何体表示形式。

使用索引不仅可以通过向卡发送较少的数据来节省带宽,而且还可以减少顶点着色器必须完成的工作量。如果有索引用作关键点,则可以缓存顶点着色器的结果


如果你渲染了很多这样的广告牌植被,并且没有改变你的索引缓冲区,我想你应该会看到一个小小的收获。

不仅如此,你过去(可能仍然必须)必须使用索引缓冲区来启用转换后缓存,这是一件好事(tm),我被你的评论弄糊涂了。当我写“如果有索引用作键,顶点着色器的结果可以缓存”时,我假设我指的是变换后缓存。