0

现在,我使用 3D 数组来表示不同块中的体素。我想渲染玩家可以看到的体素,但我这样做的方式完全没有效率:

我遍历整个 10*10*10 块并检查每个体素是否存在等于Air. 然后我分别渲染每个可见的面。所以我主要检查每个体素 6 次。我对所有块都这样做。

有没有更好的方法或算法来减少迭代?

我基本上不知道使用 3D Array 还是 Octree 是否更好......

感谢。

4

1 回答 1

1

我最近一直在思考这个问题,由于没有人回答你,我想我会提到一些我遇到的想法。

首先,需要注意的是,您只需要计算要渲染一次的面,因为只有在删除或添加体素时才会发生变化,然后您只需要立即在进行更改的位置周围重新计算体素。只需使用一个标志来标记渲染和缓存,直到发生变化。如果您还没有这样做,这将大大提高您计算每一帧的性能。

我还建议研究这个极快的光线投射算法:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.42.3443&rep=rep1&type=pdf

您可以将其用于快速碰撞测试,也可以用于剔除测试。您可以在网格节点处投射以查看是否可以看到脸部的任何部分。

于 2018-04-23T20:45:14.080 回答