如何以有效的方式渲染体素

How to render voxel in an efficient way

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

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

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

基本不知道用3D Array好还是Octree好...

谢谢。

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

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

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

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

您可以使用它进行快速碰撞测试,也可以用于剔除测试。您可以在网格节点投射以查看面部的任何部分是否可见。