【发布时间】:2011-08-19 00:14:34
【问题描述】:
我正在用 C# 和 XNA 制作游戏,我试图想出一种方法来渲染大量地形,而无需使用大量内存或通过硬编码到 XNA 中的多边形限制。
到目前为止,我的解决方案是创建一个巨大的高度图,并在游戏开始时的初始化阶段将该高度图加载到内存中。然后,地形仅在离相机最近的地方生成。这是通过投影一个三角形来实现的,该三角形的顶点是角色,另外两个端点延伸到角色的查看区域的侧面。然后,高度图上该三角形内的所有像素都被渲染并绘制到游戏中,因此只渲染所看到的。
问题是,我已经成功找到(我想,在获得地形渲染之前无法测试)三角形的三个顶点。现在我需要找到该三角形内每个像素的坐标列表 - 仅限整数,因为我只需要一个像素列表来渲染。
我知道这听起来有点令人困惑,所以这里是它的要点:
我有一个图像,我将一个三角形投影到该图像上。关于那个三角形,我唯一知道的是三个顶点。我需要该三角形内的像素列表。
我已经在谷歌上搜索了大约 20 分钟,我认为我还是继续在此处发布一些内容,因为我尝试做的事情并不那么常见。如果我找到答案,我一定会在这里发布。
但在那之前,谁能告诉我如何做到这一点?
编辑:请给出一个公式。如果你能提供一个公式或算法,以及一个解释,那就完美了。
编辑:我已经发布了一个新问题,因为我已经放弃了这种渲染大地形的方法。问题是here。
【问题讨论】:
-
我当然不想阻止你尝试和享受乐趣,但是计算一个点(或其中的集合)何时位于相机截锥体中的数学可能会更快/更容易(尤其是因为现有的基础设施可以提供帮助)。如果您真的对大型地形的高性能渲染感兴趣,您可能需要花一些时间研究实例化和广告牌等主题。
-
@lzcd 是的,我现在对任何事情都持开放态度。我会看看并研究实例化和广告牌,看看我是否有机会让它们发挥作用。
-
因为播放器可能会快速转动,所以您必须在每一帧发送视锥体中的所有高度数据——这会占用相当多的带宽。我想你最好将地形分成块,将离玩家最近的块加载到 GPU 上,然后随着玩家的移动在后台流式传输新的块。你的高度图有多大?您希望玩家(360° 视角)一次能看到多少?
-
@Andrew 透视矩阵是 45 度。至于距离,用户应该能够在高度图上查看 512 像素以外的距离,这意味着在游戏中按 5 倍放大约 2500 像素。
-
恐怕我不明白你的高度图有多大,或者可见区域有多大。你能用绝对数量的多边形来描述它吗?