Volume Renderer using JAVA/JOGL

Hi,

I am trying to build a volume renderer for tetrahedral meshes. I have a simple implementation for volume grids which uses 3D textures. But I cannot use it for Tet meshes.
Does any one know if there is some source available that already does it? or atleast some method by which i can implement the same?

I tried to do it using geometry shaders, by slicing each tetrahedron in the shader, but i seem to be messing up with the ordering of the tets. Also, for models with large number of tets, I am not able to get interactive performance (I get very low fps).

any help would be appreciated. thanks.

OpenGL (and hence JOGL) are designed for surface rendering, not volume rendering. This lecture http://staff.psc.edu/smp/teaching/cs1566-fall2004/opengl-notes-5.pdf explains some of the issues. You can of course turn your volume data into surface data using an isosurface algorithm or similar, and then JOGL can be used in the normal way.

A stack of translucent 2D texture planes works pretty well for me. It’s also compatible with pretty much all OpenGL implementation. I get about 30 FPS for a cube of 192x192x192. It takes some time though to implement and make it render nicely from all directions…

Good luck ;D

Thanks for your replies. How do I get a set of 2d texture planes? The only way I can think of is to create slices from the Tet mesh based on the rotation angle, and when I tried a naive implementation, my performance was pathetic. Can you give me any link that gives an efficient algorithm which i can implement?

On another note, I notices that the the display() method of the GLEvenListener seems to be executing continuously (similar to a while() loop), and taking up a whole lot of cpu time. Correct me if Im wrong, but from what Ive figured out when working in c++, shouldnt the display() be called only when some change occurs similar to the one initialized in the glutDisplayFunc() ?

Thanks again for your help.

JOGL with AWT works quite like OpenGL with GLUT, display is called for each frame, not only when some changes occur. I know glutDisplayFunc and the other function of GLUT because one of the ancestor of my current FPS was written in C++ with OpenGL, GLU and GLUT. Do you use an animator? It would explain why all your CPU time is consumed in the display. Do you use V-Sync?

I do use an Animator. Shouldn’t I use it? If not, what am i supposed to use instead of it? Also, what is V-Sync? I don’t explictly set any properties, just use it as is.

thanks.

maybe you can try Active Rendering rather than passive