[vtkusers] Cuda based volume rendering integration into VTK and Slicer3
bensch at bwh.harvard.edu
Tue Dec 18 10:11:23 EST 2007
I am working on the integration of a Cuda based volume rendering
technique into VTK and as being new to VTK, I am overwhelmed by the huge
amount of possibilities the API supports.
Currently the code that is independent of VTK is pretty slim and you can
take a look at it here:
I also tried to integrate the code into VTK and Slicer3. You may find
that code in my Slicer3 branche here:
Here is the headers for the Cuda rendering algorithm out of
CUDA_renderAlgo.h that I want to integrate into a VTK wrapper class:
// initialize the size
void CUDArenderAlgo_init(int sizeX, int sizeY, int sizeZ, int dsizeX,
// Load the data to the Cuda Device
void CUDArenderAlgo_loadData(unsigned char* sourceData, int sizeX, int
sizeY, int sizeZ);
// Renders the Image and produces a 2D array of the output
void CUDArenderAlgo_doRender(float* rotationMatrix, float* color, float*
minmax, float* lightVec, int sizeX, int sizeY, int sizeZ, int dsizeX,
int dsizeY, float dispX, float dispY, float dispZ, float voxelSizeX,
float voxelSizeY, float voxelSizeZ, int minThreshold, int maxThreshold,
// retrieves the rendered result in RAW data as Unsigned chars
void CUDArenderAlgo_getResult(unsigned char** resultImagePointer, int
dsizeX, int dsizeY);
// frees all memory
(from now on I will refer to the function names leaving the
'CUDArenderAlgo' away for instance _init)
As I understand it from a VTK point of view, I need the following:
1. An imageDataReader to read Volume data as any kind of Volume Data
2. A Filter converting from the reader output to a cuda-able DataSet
3. A new vtkDataSet call it vtkCudaDataSet, where I will put my Volume
Data used by the _init(), _loadData() and _delete() functions
4. A new vtkVolumeMapper that renders the scene using the lighting
model, a prepared Z buffer, a camera position and the before mentioned
DataSet to produce a image using the _doRender() function and the
_getResult() function to acquire the produced data.
* A vtkTexture and a Plane to render the result to
5. An actor that places the volume into the scene
5. Chain this pipeline together and attach it to a rendering window.
Now, it would be very helpful for me, to know what classes I have derive
from to get the above described behaviour.
Also these points are not really clear to me:
1. How do I get the camera position of a rendering window?
2. How do I get the Lightning Information for the scene?
3. How do I display the texture planar to the viewing direction at the
correct place in space?
4. Is there a simple way to test everything I am doing using VTK and one
I understand that these are a lot of questions, but any help is appreciated.
Surgical Planing Laboratory <http://www.spl.harvard.edu/>,
Brigham and Women's Hospital
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the vtkusers