<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Greetings,<br>
<br>
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.<br>
Currently the code that is independent of VTK is pretty slim and you
can take a look at it here:<br>
&nbsp;&nbsp;&nbsp; <a class="moz-txt-link-freetext" href="http://svn.orxonox.net/subprojects/volrenSample/">http://svn.orxonox.net/subprojects/volrenSample/</a><br>
I also tried to integrate the code into VTK and Slicer3. You may find
that code in my Slicer3 branche here:<br>
&nbsp;&nbsp;&nbsp;
<a class="moz-txt-link-freetext" href="http://www.na-mic.org/svn/Slicer3/branches/cuda/Modules/VolumeRenderingCuda">http://www.na-mic.org/svn/Slicer3/branches/cuda/Modules/VolumeRenderingCuda</a><br>
<br>
Here is the headers for the Cuda rendering algorithm out of
CUDA_renderAlgo.h that I want to integrate into a VTK wrapper class:<br>
// initialize the size<br>
void CUDArenderAlgo_init(int sizeX, int sizeY, int sizeZ, int dsizeX,
int dsizeY);<br>
// Load the data to the Cuda Device<br>
void CUDArenderAlgo_loadData(unsigned char* sourceData, int sizeX, int
sizeY, int sizeZ);<br>
// Renders the Image and produces a 2D array of the output<br>
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, int sliceDistance);<br>
// retrieves the rendered result in RAW data as Unsigned chars<br>
void CUDArenderAlgo_getResult(unsigned char** resultImagePointer, int
dsizeX, int dsizeY);<br>
// frees all memory<br>
void CUDArenderAlgo_delete();<br>
(from now on I will refer to the function names leaving the
'CUDArenderAlgo' away for instance _init)<br>
<br>
As I understand it from a VTK point of view, I need the following:<br>
1. An imageDataReader to read Volume data as any kind of Volume Data<br>
2. A Filter converting from the reader output to a cuda-able DataSet<br>
3. A new vtkDataSet call it vtkCudaDataSet, where I will put my Volume
Data used by the _init(), _loadData() and _delete() functions<br>
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.<br>
&nbsp;&nbsp;&nbsp; * A vtkTexture and a Plane to render the result to<br>
5. An actor that places the volume into the scene<br>
5. Chain this pipeline together and attach it to a rendering window.<br>
<br>
Now, it would be very helpful for me, to know what classes I have
derive from to get the above described behaviour.<br>
Also these points are not really clear to me:<br>
1. How do I get the camera position of a rendering window?<br>
2. How do I get the Lightning Information for the scene?<br>
3. How do I display the texture planar to the viewing direction at the
correct place in space?<br>
4. Is there a simple way to test everything I am doing using VTK and
one render window?<br>
<br>
I understand that these are a lot of questions, but any help is
appreciated.<br>
<br>
Best Regards,<br>
&nbsp;Benjamin Grauer,<br>
&nbsp; Surgical Planing Laboratory<a href="http://www.spl.harvard.edu/"
 class="external text" title="http://www.spl.harvard.edu/"
 rel="nofollow"></a>, <br>
&nbsp; Brigham and Women's Hospital<br>
</body>
</html>