3

我正在尝试使用 XNA 创建 3D 平铺地形。我查看了有关如何操作的教程
(Riemers 和Allens)。Allens 教程有一个我想要达到的确切结果,
但是我不确定性能 - 似乎他正在使用单个四边形来绘制
所有地形并使用像素着色器对其进行处理,这意味着 - 整个地形将在
每一帧中处理。
目前我正在为每个图块(示例)绘制一个四边形 - 它只允许绘制
可见图块,但这也意味着需要在每
帧中处理更多的顶点,并且调用了很多“DrawIndexedPrimitives”。
我做得对还是艾伦的方式更快?有没有办法更好地制作平铺地形?
谢谢。

4

1 回答 1

3

完全取决于您的地形复杂性和大小。通常,您将拥有具有多个四边形/瓦片的地形瓦片(例如,瓦片可能由 4096 个三角形组成),然后置换顶点以获得您想要的地形。尽管如此,每个图块都将是一个索引图元,但一次绘制调用将产生大量三角形和更大的地形部分。进一步考虑这个想法,您可以使远处的图块更大,这样您就不会获得太多细节(寻找基于四叉树/剪辑图的地形方法;您会得到类似这样的东西:http: //twitpic.com /89y5kn。)

或者,如果您可以在顶点着色器中进行置换,则可以使用实例化来进一步减少绘制调用的数量。对于每个实例,您将 UV 坐标传递到您的高场和世界空间位置,然后再次渲染高分辨率图块,但现在您可能会以单个绘制调用结束整个地形。

对于一个小型游戏,您可能只想生成几个高分辨率图块(大约 65k 三角形),然后对它们进行截头剔除。这很容易为您提供广阔的地形,并且仍然易于管理;但这绝对不能很好地扩展:) 取决于您的需求。

对于纹理图块,您还可以使用低分辨率索引纹理并按像素查找图集,或者仅将索引存储在顶点缓冲区中并对其进行插值(这很常见:每个顶点存储 4 个权重并使用它可以查看四种不同的纹理。)

于 2012-01-21T15:56:26.130 回答