我现在正在尝试使用 C++、OpenGL 和 GLSL(用于 GPU 加速)实现光线转换体积渲染。为了获得更好的质量和性能,我想使用八叉树来组织 3D 医疗体数据,因此我可以轻松地使用一些算法,例如空间跳跃和自适应采样。
但是如何有效地构建八叉树呢?如何参观八叉树?当光线在体数据中传播时,如何确定采样点属于八叉树的哪个单元格或叶子?
最佳答案
有一篇关于 GPU 八叉树可用 here 的优秀文章(也有可用的源 here )。然而,它基于 Cg,但这可以被视为更多的优势。
当您使用医疗数据时,数据更密集,您可能也对 Cyril Crassin's Ph. D Thesis 感兴趣,它使用流式 GPU 稀疏八叉树来组织密集的体素数据。这里八叉树是在 GPU 上构建的,使用 3D 体积纹理进行数据存储(叶节点)和一个砖池用于分配内部节点,自底向上构建,然后进行 mip 映射以进行光线转换。
如果您愿意稍微弯曲一下,在 sparse voxel octree's 上有一个使用 CUDA 的大项目,它将提供对稀疏八叉树和光线转换的宝贵见解。