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

时间:2018-01-19 18:06:52

标签: voxel voxels

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

我遍历整个10 * 10 * 10块并检查每个体素是否存在等于Air的邻居。然后我分别渲染每个可见的面孔。所以我大多检查每个体素6次。我为所有大块做这件事。

有更好的方法可以继续,还是算法可以减少迭代次数?

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

首先,它的工作注意到您只需要计算要渲染一次的面,因为只有在您移除或添加体素时才会更改,然后您只需要立即重新计算体素周围的体素你做了改变。只需使用一个标记来标记渲染并缓存,直到发生变化。如果你还没有这样做,这将比你计算每一帧都有很大的性能提升。

我还建议调查这个非常快速的光线投射算法:

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

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