Well, isn't the original data 8 bit unsigned ? That's usually the case.
If so, you can load it as an 8 bit indexed 3D texture
(GL_COLOR_INDEX8_EXT) which fits into the video card memory (320*200*500
is ~64Mb), and then apply the RGBA transfer function using glColorTableEXT.
Also, there are different techniques for volume rendering. Mostly, you
have two techniques if you want hardware acceleration :
- draw the data using three sets of parallel slices
- draw the data using screen-parallel slices that intersect a 3d texture
As for source code, see for example this project :