如何高效渲染体素

问题描述 投票:0回答:2

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

我迭代整个 10*10*10 块并检查每个体素是否有等于

Air
的邻居。然后我分别渲染每个可见的面。所以我主要检查每个体素 6 次。我对所有块都这样做。

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

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

谢谢。

voxel voxels
2个回答
2
投票

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

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

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

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

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


0
投票

@null 的答案有一个过时的链接,看来他一直在引用这个:

https://github.com/HKUST-Aerial-Robotics/FIESTA/blob/master/src/raycast.cpp

(取自 DOI)

附注抱歉,由于业力无法发布答案

© www.soinside.com 2019 - 2024. All rights reserved.