This Java applet loads a stack of images, 144 images of a CT hog heart (heart001.jpeg to heart004.jpeg). The jpegs are gray scale and fairly well compressed, the total size isn't too bad.
I then load a palette consisting of RGB and alpha values, mapping the gray scale through the palette. So why not just load RGB files directly? Well aside from compression issues if I use a palette now, we can easily change alpha or the rgb values on the fly and render those changes. The renderer simply traverses the volume from back to front alpha blending each voxel. There is no transformation involved, the stack is simply projected directly to the screen.
The Aglorithm is:
For each Z slice
For each Y scanline
For each X Voxel
Blend(X,Y,Voxel)
End X
End Y
End Z
While the data is loading you'll see each image sequentially in the right side of the applet. Then once everything is loaded, we'll render the image.
Why is it so slow? Well that's because we are using Java! in C++ using an ActiveX control we can render the same data set at about 8.7 million voxels per second on a PPro 200, this applet on the same machine, renders this at about 1 million voxels per second.