2012-01-21 130 views
2

我想用XNA在3D中创建平铺地形。我检查了教程如何做
它(Riemers和Allens)。 Allens教程有我想要达到的确切结果,但是我不确定性能 - 看起来他使用单个四边形绘制了所有地形的
并使用像素着色器进行处理,这意味着 - 整个地形将分别处理
帧。
目前我正在为每个图块绘制四边形(Example) - 它只允许绘制
可见图块,但这也意味着需要在每个
框架中处理更多的verticies,并调用大量“DrawIndexedPrimitives” 。
我是对的还是Allens的方式更快?有没有办法更好地平铺地形?
谢谢。3d平铺地形

回答

3

完全取决于您的地形复杂性和大小。通常情况下,您将拥有具有多个四边形/拼贴的地形拼贴(例如,一个拼贴可以包含4096个三角形),然后替换顶点以获取所需的地形。尽管如此,每个图块都将是一个索引图元,但是单个绘图调用将导致大量三角形和大部分地形。进一步考虑这个想法,你可以使距离更远的瓦片,因此你不会得到太多的细节(寻找基于四叉树/基于clipmap的地形方法;你会得到这样的:http://twitpic.com/89y5kn)。或者,如果您可以在顶点着色器中取代,则可以使用实例化来进一步减少绘制调用的数量。根据实例,将UV坐标传递到您的高地和世界空间位置,然后再次渲染高分辨率图块,但是现在您可以结束整个地形的一次绘制调用。

对于一个小游戏,您可能只想生成几个高分辨率的贴图(65k个三角形左右),然后截取它们。这给你一个容易的大地形,仍然可以管理;但这绝对不能太好:)取决于你的需求。

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