现在,我使用3D数组来表示不同块中的体素。我想渲染玩家可以看到的体素,但我这样做的方式完全没有效率:
我遍历整个10 * 10 * 10块并检查每个体素是否存在等于Air
的邻居。然后我分别渲染每个可见的面孔。所以我大多检查每个体素6次。我为所有大块做这件事。
有更好的方法可以继续,还是算法可以减少迭代次数?
我基本上不知道使用3D Array或Octree是否更好......
感谢。
答案 0 :(得分:1)
我最近一直在思考这个问题,既然没有人回答你,我想我会提到我遇到过的一些想法。
首先,它的工作注意到您只需要计算要渲染一次的面,因为只有在您移除或添加体素时才会更改,然后您只需要立即重新计算体素周围的体素你做了改变。只需使用一个标记来标记渲染并缓存,直到发生变化。如果你还没有这样做,这将比你计算每一帧都有很大的性能提升。
我还建议调查这个非常快速的光线投射算法:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.42.3443&rep=rep1&type=pdf
您可以将其用于快速碰撞测试,也可用于剔除测试。您可以在网格节点处投射以查看面部的任何部分是否可见。