现在,我使用3D数组在不同的块中表示我的体素。我想渲染播放器可见的体素,但我这样做的方式完全没有效率:
我迭代了整个10*10*10块,并检查每个体素是否有等于Air的邻居。然后我分别渲染每个可以看到的面。所以我主要检查每个体素6次。我对所有的块都这样做。
有没有更好的方法或者减少迭代的算法?
我基本上不知道是使用3D Array还是使用八叉树更好。
谢谢。
发布于 2018-04-24 04:45:14
我最近一直在思考这个问题,既然没有人回答你,我想我应该提一下我遇到的一些想法。
首先,它注意到你只需要计算渲染一次哪些面,因为只有当你移除或添加体素时才会发生变化,然后你只需要在做出更改的地方周围立即重新计算体素。只需使用一个标志来标记渲染并缓存它,直到发生变化。如果你还没有这样做,这会给你计算每一帧的性能带来很大的提升。
我还建议研究一下这个极快的光线投射算法:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.42.3443&rep=rep1&type=pdf
您可以使用它来进行快速冲突测试,也可以用于剔除测试。可以在栅格节点上投射,以查看面的任何部分是否可见。
https://stackoverflow.com/questions/48347082
复制相似问题