我正在创建一个XNA游戏,该游戏需要巨大的玩家空间。当前,我正在使用的测试高度图是4096x4096,并保存为4位BMP。
我要尝试的是获取巨大的高度图文件,然后在游戏中进行渲染。我遇到的问题是,将整个地形立即加载到内存中效率很低,因为它将占用大部分可用内存。
我遇到的另一个问题是,由于XNA中设置了硬限制,因此无法在一个图元中全部渲染地形。
话虽如此,我遇到了许多解决方案,下面列出了所有这些解决方案:
- 基于当前用户的位置进行渲染-基本上不管用户在世界上的方向如何,都围绕用户绘制一个正方形。这也不是我想要的,因为您仍在渲染用户看不到的空间。
- 根据用户的方向和位置进行渲染-我找到了一个公式来检索一个三角形,该三角形应该具有应该绘制的高度图像素,但是事实证明这非常困难。
- 将地形分为多个块并渲染最接近用户的块-效率仍然不高,因为您仍在渲染人们看不到的块。而且它很费力,因为那时我必须将高度图分成几部分,而可伸缩性成为一个大问题。
在尝试了这些解决方案之后,我对如何做的想法一无所知。在人们告诉我执行这些复杂算法的地方,我已经收到了一些答案,但是我什至不知道该如何执行这些算法。
因此,基本上,我要求一种简单,直接的方法来以最高效率在XNA中渲染巨大的地形。
总的来说,我对游戏开发比较陌生,但是如果它看起来很有希望,我愿意研究。
更新1:研究了geoclipmapping方法后,我开始使用它进行编码。我完成了所有的数学运算,然后游戏开始运行。但是,它效率极低-对我而言,这可能是不好的编码。它以2FPS的速度运行,并使用了我CPU的整个核心。我将尝试改进代码,但我想需要更多帮助,因此这里是 Terrain manager类的代码的Pastebin。如果可以提高效率,我将在稍后发布更多结果。