通常你会将你的地形分成几个小块,随着玩家的移动,你会流式传输这些块。在我的地形引擎中,我从未将索引缓冲区放在缓冲区对象中,因为 LOD 机制会不断更改绘制哪些顶点,以及绘制的顺序以改善早期 Z。256×256 是一个合理的补丁大小,特别是如果您使用类似四叉树的结构。
所以你可以做的是加载 9 个地形补丁,每个补丁的大小以某种方式选择,可见范围在中心补丁周围的边界附近结束。
| |
---+---+---
| C |
---+---+---
| |
当玩家在 C 补丁中四处移动时,可见范围确保他无法看到加载区域之外。一旦玩家移动到另一个补丁,从另一侧环绕补丁,即
A | |
---+---+---
B | X-> C
---+---+---
C | |
将图块 A、B、C 重新映射到
| | A'
---+---+---
->C | B'
---+---+---
| | C'
其中 A', B', C' 回收了 A, B, C 的内存但是用新的内容填充它。由于播放器从远端移动到新的 C 补丁中,即只能看到新补丁的较近部分,您可以将 A'、B'、C' 的内容加载几帧。
回答你的两个问题:
上传几何图形实际上是一个相当快的过程,所以这不是显示停止器。您不会看到闪烁,因为数据上传发生在渲染帧之间,并且只有在数据更新后,绘图命令才会开始。
您上传内容的方式对渲染性能没有影响。但是,它会影响加载地图本身所需的时间。如果您希望玩家能够在没有烦人的加载阶段的情况下穿越大世界,您将不得不按需上传较小的补丁。