3d平铺的地形

时间:2012-01-21 15:33:41

标签: c# xna terrain

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

1 个答案:

答案 0 :(得分:3)

完全取决于您的地形复杂程度和大小。通常,您将拥有具有多个四边形/平铺的地形图块(例如,图块可以包含4096个三角形),然后移动顶点以获得所需的地形。尽管如此,每个图块都是一个索引图元,但是单个图形调用将产生大量三角形和更大部分的地形。进一步考虑这个想法,你可以使距离更大的瓷砖更大,这样你就不会得到太多的细节(寻找基于四树/剪贴图的地形方法;你会得到这样的东西:http://twitpic.com/89y5kn。)

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

对于小型游戏,您可能只想生成几个高分辨率的图块(65k三角形左右),然后对它们进行截锥。这样可以轻松地为您提供大型地形,并且仍然可以管理;但这绝对不能很好地扩展:)取决于你的需求。

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