<div dir="ltr">Hi,<br> <br>these are Mauro Russo e Francesco Piccolo, students of Computer Science Engineering at Federico II University in Naples.<br> <br>Actually we are working toward the B.S. in Information Technology Engineering. Our thesis aim is to develop an application able to render, in real-time and with high-definition too, a medical dataset by using volumetric ray casting techniques.<br>
We found your work on the NAMIC site and we realize it is a great solution to parallelize the render algorithm on GPU and CPU by using CUDA.<br> <br>We have closely followed your work <br><a 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>
that has allowed us to integrate new VTK classes (VolumeRenderingCuda) with some class for CUDA support (CudaSupport).<br> <br>We have found several difficulties:<br> <br>1- first of all how to match your pipeline with the traditional volume rendering pipeline. Your pipeline taken as a reference is on NA-MIC's site, link (<a href="http://www.slicer.org/slicerWiki/index.php/Slicer3:Volume_Rendering_With_Cuda">http://www.slicer.org/slicerWiki/index.php/Slicer3:Volume_Rendering_With_Cuda</a>); our pipeline is attached with this mail (see FIG1.pdf).<br>
The first problem is how to use vtkCudaImageData class after making the filtering. The output is:<br>"ERROR: In ..\..\Filtering\vtkDemandDrivenPipeline.cxx, line 795<br>vtkStreamingDemandDrivenPipeline (02EEE500): Input for connection index 0 on input port index 0 for algorithm vtkVolumeCudaMapper(02EE4C60) is of type vtkCudaImageData, but a vtkImageData is required."<br>
In short we cannot give as parameter an object of vtkCudaImageData type to vtkVolumeCudaMapper's function SetInput(). Instead this function take as parameter an object of vtkImageData (this is an execution time error, it isn't a compiler's error; this means the call is syntactically correct because vtkCudaImageData inherits from vtkImageData).<br>
The code that we use is:<br> <br>vtkImageData *imageData = vtkImageData::New();<br> imageData = shiftScale->GetOutput();<br> <br>vtkCudaImageDataFilter* filter = vtkCudaImageDataFilter::New();<br> filter->SetInput(imageData);<br>
filter->Update();<br> <br> vtkCudaImageData *cudaImageData = vtkCudaImageData::New();<br> cudaImageData = filter->GetOutput();<br> <br>volumeCudaMapper->SetInput(cudaImageData);<br> <br>2- We use vtkVolumeRayCastMapper class in our pipeline; this class doesn't match exactly with any classes of your project. You use vtkVolumeCudaMapper as mapper class where is defined Render() function (implementation of the same function declared in vtkVolumeMapper abstract class). Inside Render() we find the call to CUDA function, CUDArenderAlgo_doRender().<br>
Our question is: how shall we use this class and its function Render()? Can you send us an example of use?<br>It seems that for this class is not required to set an appropriate composite function. So how to model the transfer function?<br>
<br>3- Finally, we noted you use vtkSlicerRenderView to display the render, a specific class for SLICER3 integration. Can we use another classes to display the render? (vtkRenderer and vtkRendererWindow).<br> <br>Our configuration is:<br>
Operating System: WindowsXP<br> Development environment: Visual Studio 2005<br>Graphics card NVIDIA GeForce 8800 GT<br> <br>Thank you for all your answers and congratulations for the work you are doing.<br>
<br>Best regards,<br>Mauro Russo <a href="mailto:mauro.russo@virgilio.it">mauro.russo@virgilio.it</a><br>Francesco Piccolo <a href="mailto:piccolo.francesco@gmail.com">piccolo.francesco@gmail.com</a></div>