<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; "><div><div><div>I am assuming that you have already got your volume rendering working in serial.</div><div><br></div><div>At first glance, I can see that the IceT parallel render manager is in the wrong compositing mode. &nbsp;By default, the manager uses a z buffer comparison as its composite operation. &nbsp;That works great for opaque surfaces, but does not work at all for transparent objects (as is the case for volume rendering). &nbsp;In fact, I believe most of the volume rendering algorithms write nothing in the z buffer, so IceT will assume that nothing is rendered and throw away all your rendered pixels.</div><div><br></div><div>You need to tell the parallel render manager to do alpha blending. &nbsp;Because alpha blending is order dependent, you also have to tell the parallel render manager the spatial decomposition of your data. &nbsp;You do that by creating a vtkPKdTree to the parallel render manager (if I remember right).</div><div><br></div><div>-Ken</div><div>
<font size="2"><font face="Consolas,Courier New,Courier"><span style="font-size:10pt"><br>
&nbsp;&nbsp;&nbsp;**** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kenneth Moreland<br>
&nbsp;&nbsp;&nbsp;&nbsp;*** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sandia National Laboratories<br>
*********** &nbsp;<br>
*** *** *** &nbsp;email: <font color="#0000FF"><u><a href="kmorel@sandia.gov">kmorel@sandia.gov</a><br>
</u></font>** &nbsp;*** &nbsp;** &nbsp;phone: (505) 844-8919<br>
&nbsp;&nbsp;&nbsp;&nbsp;*** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;web: &nbsp;&nbsp;<font color="#0000FF"><u><a href="http://www.cs.unm.edu/~kmorel">http://www.cs.unm.edu/~kmorel</a></u></font><br>
</span></font></font>


</div></div></div><div><br></div><span id="OLK_SRC_BODY_SECTION"><div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt"><span style="font-weight:bold">From: </span> ºú½¡ &lt;<a href="mailto:hujian198681@gmail.com">hujian198681@gmail.com</a>&gt;<br><span style="font-weight:bold">Date: </span> Sat, 19 Feb 2011 01:47:33 -0700<br><span style="font-weight:bold">To: </span> "<a href="mailto:paraview@paraview.org">paraview@paraview.org</a>" &lt;<a href="mailto:paraview@paraview.org">paraview@paraview.org</a>&gt;<br><span style="font-weight:bold">Subject: </span> [Paraview] is there any wrong?<br></div><div><br></div><p>dear all: <br>&nbsp; &nbsp;I want to parallel volume rendering in my computer, but I can not make it parallel, here is my code. Is there any wrong? <br>#include "vtkCompositeRenderManager.h" <br>#include "vtkRenderWindow.h" <br>
#include "vtkRenderWindowInteractor.h" <br>#include "vtkProperty.h" <br>#include "vtkMPIController.h" <br>#include "vtkDataSetMapper.h" <br>#include "vtkActor.h" <br>#include "vtkRenderWindow.h" <br>
#include "vtkRenderer.h" <br>#include "vtkCamera.h" <br>#include &lt;vtkHAVSVolumeMapper.h&gt; <br>#include &lt;vtkDataSetTriangleFilter.h&gt; <br>#include &lt;vtkPiecewiseFunction.h&gt; <br>#include &lt;vtkColorTransferFunction.h&gt; <br>
#include &lt;vtkVolumeProperty.h&gt; <br>#include &lt;vtkVolume.h&gt; <br>#include &lt;vtkPolyDataMapper.h&gt; <br>#include &lt;vtkStdString.h&gt; <br>#include &lt;vtkXMLUnstructuredGridReader.h&gt; <br>#include &lt;vtkStructuredGridOutlineFilter.h&gt; <br>
#include &lt;vtkStreamLine.h&gt; <br>#include &lt;vtkProperty.h&gt; <br>#include "vtkPointData.h" <br>#include &lt;vtkPointSource.h&gt; <br>#include &lt;vtkTubeFilter.h&gt; <br>#include "vtkPolyDataMapper.h" <br>
#include "vtkRenderWindow.h" <br>#include "vtkRenderWindowInteractor.h" <br>#include "vtkIceTRenderManager.h" <br>#include "vtkMPIController.h" <br>#include "vtkDataSetMapper.h" <br>
#include "vtkContourFilter.h" <br>#include "vtkActor.h" <br>#include "vtkRenderWindow.h" <br>#include "vtkRenderer.h" <br>#include "vtkActor.h" <br>#include "vtkPolyDataMapper.h" <br>
#include "vtkSmartPointer.h" <br>#include "vtkDistributedDataFilter.h" <br>#include "vtkDataSetAttributes.h" <br>#include "vtkProjectedTetrahedraMapper.h" <br>#include "vtkUnstructuredGrid.h" <br>
#include "vtkUnstructuredGridVolumeRayCastMapper.h" <br>#include "vtkIceTRenderer.h" <br>#include "vtkParallelRenderManager.h" <br>#include "vtkOrderedCompositeDistributor.h" <br>#include "vtkPKdTree.h" <br>
#include "vtkFixedPointVolumeRayCastMapper.h" <br>#include &lt;iostream&gt; <br>using namespace std; <br>struct args_struct <br>{ <br>&nbsp; &nbsp; &nbsp; &nbsp; int argc; <br>&nbsp; &nbsp; &nbsp; &nbsp; char** argv; <br>}; <br><br>void process(vtkMultiProcessController* controller, void* arg) <br>
{ <br>&nbsp; &nbsp; &nbsp; &nbsp; int myId = controller-&gt;GetLocalProcessId(); <br>&nbsp; &nbsp; &nbsp; &nbsp; args_struct * args = reinterpret_cast&lt;args_struct *&gt;(arg); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkIceTRenderManager *manager = vtkIceTRenderManager::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; //vtkCompositeRenderManager *manager = vtkCompositeRenderManager::New(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; //vtkRenderer *ren = manager-&gt;MakeRenderer(); <br>&nbsp; &nbsp; &nbsp; &nbsp; vtkIceTRenderer *ren =vtkIceTRenderer::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; vtkRenderWindow* renWin = manager-&gt;MakeRenderWindow(); <br>&nbsp; &nbsp; &nbsp; &nbsp; renWin-&gt;AddRenderer(ren); <br>
&nbsp; &nbsp; &nbsp; &nbsp; renWin-&gt;SetSize(400, 300); <br><br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; if(myId == 0) <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; renWin-&gt;SetPosition(400, 500); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; manager-&gt;SetRenderWindow(renWin); <br>&nbsp; &nbsp; &nbsp; &nbsp; manager-&gt;SetController(controller); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkRenderWindowInteractor* iren = <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vtkRenderWindowInteractor::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; iren-&gt;SetRenderWindow(renWin); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; std::string dataRoot = "E:\\vtkdata-5.4.2\\VTKData"; <br><br>&nbsp; &nbsp; &nbsp; &nbsp; std::string filename = dataRoot + "/Data/hj_vector_xyz2.vtu"; <br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkXMLUnstructuredGridReader *reader = vtkXMLUnstructuredGridReader::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; reader-&gt;SetFileName(filename.c_str()); <br><br>/////////////////////////////////////////////////////////////////////////////////////Ìå»æÖÆ <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkDistributedDataFilter * piece = vtkDistributedDataFilter::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; piece-&gt;SetInputConnection(reader-&gt;GetOutputPort()); <br>
&nbsp; &nbsp; &nbsp; &nbsp; piece-&gt;SetController(controller); <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkDataSetTriangleFilter *trifilter = vtkDataSetTriangleFilter::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; trifilter-&gt;SetInputConnection(piece-&gt;GetOutputPort()); <br><br><br>
&nbsp; &nbsp; &nbsp; &nbsp; vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; opacityTransferFunction-&gt;AddPoint(-3.0, &nbsp;0.02); <br>&nbsp; &nbsp; &nbsp; &nbsp; opacityTransferFunction-&gt;AddPoint(0.0, 0.04); <br>&nbsp; &nbsp; &nbsp; &nbsp; opacityTransferFunction-&gt;AddPoint(2.0, 0.06); <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkColorTransferFunction *colorTransferFunction = vtkColorTransferFunction::New(); <br>&nbsp; &nbsp; &nbsp; &nbsp; colorTransferFunction-&gt;AddRGBPoint(-3, &nbsp;1, 1.0, 0.0); <br>&nbsp; &nbsp; &nbsp; &nbsp; colorTransferFunction-&gt;AddRGBPoint(-1, 1, 1, 0); <br>
&nbsp; &nbsp; &nbsp; &nbsp; colorTransferFunction-&gt;AddRGBPoint(0, 1, 1, 0); <br>&nbsp; &nbsp; &nbsp; &nbsp; colorTransferFunction-&gt;AddRGBPoint(1.0, 1, 0.0, 0.0); <br>&nbsp; &nbsp; &nbsp; &nbsp; colorTransferFunction-&gt;AddRGBPoint(1.5, 1, 1.0, 0); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; volumeProperty-&gt;SetColor(colorTransferFunction); <br>&nbsp; &nbsp; &nbsp; &nbsp; volumeProperty-&gt;SetScalarOpacity(opacityTransferFunction); <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkHAVSVolumeMapper *volumeMapper = vtkHAVSVolumeMapper::New(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; volumeMapper-&gt;SetInputConnection(trifilter-&gt;GetOutputPort()); <br>&nbsp; &nbsp; &nbsp; &nbsp; volumeMapper-&gt;SetGPUDataStructures(true); <br>&nbsp; &nbsp; &nbsp; &nbsp; volumeMapper-&gt;SetKBufferSizeTo2(); <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkVolume *volume = vtkVolume::New(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; volume-&gt;SetMapper(volumeMapper); <br>&nbsp; &nbsp; &nbsp; &nbsp; volume-&gt;SetProperty(volumeProperty); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; ren-&gt;AddActor(volume); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; if(myId==0) <br>&nbsp; &nbsp; &nbsp; &nbsp; { <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; renWin-&gt;Render(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ren-&gt;ResetCamera(); <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; manager-&gt;StartInteractor(); <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; manager-&gt;StopServices(); <br>&nbsp; &nbsp; &nbsp; &nbsp; } <br>&nbsp; &nbsp; &nbsp; &nbsp; else <br>&nbsp; &nbsp; &nbsp; &nbsp; { <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; manager-&gt;StartServices(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; } <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; iren-&gt;Delete(); <br>&nbsp; &nbsp; &nbsp; &nbsp; renWin-&gt;Delete(); <br>&nbsp; &nbsp; &nbsp; &nbsp; manager-&gt;Delete(); <br>} <br><br>int main( int argc, char* argv[] ) <br>{ <br><br>&nbsp; &nbsp; &nbsp; &nbsp; vtkMPIController* controller = vtkMPIController::New(); <br>
&nbsp; &nbsp; &nbsp; &nbsp; controller-&gt;Initialize(&amp;argc, &amp;argv); <br>&nbsp; &nbsp; &nbsp; &nbsp; vtkMultiProcessController::SetGlobalController(controller); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; args_struct args; <br>&nbsp; &nbsp; &nbsp; &nbsp; args.argc = argc; <br>&nbsp; &nbsp; &nbsp; &nbsp; args.argv = argv; <br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; controller-&gt;SetSingleMethod(process,&amp;args); <br>&nbsp; &nbsp; &nbsp; &nbsp; controller-&gt;SingleMethodExecute(); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; controller-&gt;Finalize(); <br>&nbsp; &nbsp; &nbsp; &nbsp; controller-&gt;Delete(); <br><br>&nbsp; &nbsp; &nbsp; &nbsp; return 0; <br>
} <br><br></p></span></body></html>