我现在正尝试使用C++、OpenGL和GLSL实现光线投射体积渲染(用于GPU加速)。为了获得更好的质量和性能,我想用八叉树来组织三维医学体数据,这样我就可以很容易地使用一些算法,如空间跳跃和自适应采样。
但是如何有效地构建八叉树呢?如何参观八叉树?当光线在体积数据中传播时,如何确定采样点属于八叉树的哪个单元或叶?
这里有一篇关于GPU八叉树的优秀文章(这里也有可用的源代码)。然而,它是基于Cg的,但这可以被认为是一个更大的优势。
鉴于您正在使用数据密度更大的医学数据,您可能还对Cyril Crassin的博士论文感兴趣,该论文使用流GPU稀疏八叉树来组织密集体素数据。在这里,八叉树是在GPU上构建的,使用3D体积纹理用于数据存储(叶节点)和砖池用于分配内部节点,从下到上构建,然后mip-map'ed用于光线投射。
如果你愿意稍微弯曲一下,有一个关于使用CUDA的稀疏体素八叉树的大项目,它将为稀疏八叉树和光线投射提供有价值的见解。