Use octree to organize 3D volume data in GPU

I am now trying to implement Ray Casting volume rendering using C ++, OpenGL and GLSL (for GPU acceleration). To get the best quality and performance, I want to use octree to organize 3D volumetric data, so I can easily use some algorithms such as Space Leaping and Adaptive Sampling.

But how do you efficiently create an octet? How to visit the octet? When the ray moves through the volume data, how can I determine which cell or sheet of the octet belongs to the origin?

+1


source to share


1 answer


There is a great article on octree GPU available here (there is also a source here ). However, it is based on Cg, but it might be more useful.

After seeing how you use medical data with denser data, you might also be interested in Kirill Krassin Ph.DD Thesis , which uses a sparse octet streaming GPU to organize dense voxel data. Here the octet is built on the GPU using a 3D volume texture to store data (leaf nodes) and a brick pool to accommodate internal nodes, built from bottom to top and then mip-map'ed for ray casting.



If you're ready to flex a little, there is a large project of sparse voxel octree's using CUDA that will provide valuable insight into sparse octree and rays in them.

+8


source







All Articles