[vtkusers] Is there any wrong in my code?
hujian198681
hujian198681 at 126.com
Sat Feb 19 03:43:15 EST 2011
dear all:
I want to parallel volume rendering in my computer, but I can not make it
parallel, here is my code. Is there any wrong?
#include "vtkCompositeRenderManager.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"
#include "vtkMPIController.h"
#include "vtkDataSetMapper.h"
#include "vtkActor.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkCamera.h"
#include <vtkHAVSVolumeMapper.h>
#include <vtkDataSetTriangleFilter.h>
#include <vtkPiecewiseFunction.h>
#include <vtkColorTransferFunction.h>
#include <vtkVolumeProperty.h>
#include <vtkVolume.h>
#include <vtkPolyDataMapper.h>
#include <vtkStdString.h>
#include <vtkXMLUnstructuredGridReader.h>
#include <vtkStructuredGridOutlineFilter.h>
#include <vtkStreamLine.h>
#include <vtkProperty.h>
#include "vtkPointData.h"
#include <vtkPointSource.h>
#include <vtkTubeFilter.h>
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkIceTRenderManager.h"
#include "vtkMPIController.h"
#include "vtkDataSetMapper.h"
#include "vtkContourFilter.h"
#include "vtkActor.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkSmartPointer.h"
#include "vtkDistributedDataFilter.h"
#include "vtkDataSetAttributes.h"
#include "vtkProjectedTetrahedraMapper.h"
#include "vtkUnstructuredGrid.h"
#include "vtkUnstructuredGridVolumeRayCastMapper.h"
#include "vtkIceTRenderer.h"
#include "vtkParallelRenderManager.h"
#include "vtkOrderedCompositeDistributor.h"
#include "vtkPKdTree.h"
#include "vtkFixedPointVolumeRayCastMapper.h"
#include <iostream>
using namespace std;
struct args_struct
{
int argc;
char** argv;
};
void process(vtkMultiProcessController* controller, void* arg)
{
int myId = controller->GetLocalProcessId();
args_struct * args = reinterpret_cast<args_struct *>(arg);
vtkIceTRenderManager *manager = vtkIceTRenderManager::New();
//vtkCompositeRenderManager *manager = vtkCompositeRenderManager::New();
//vtkRenderer *ren = manager->MakeRenderer();
vtkIceTRenderer *ren =vtkIceTRenderer::New();
vtkRenderWindow* renWin = manager->MakeRenderWindow();
renWin->AddRenderer(ren);
renWin->SetSize(400, 300);
if(myId == 0)
renWin->SetPosition(400, 500);
manager->SetRenderWindow(renWin);
manager->SetController(controller);
vtkRenderWindowInteractor* iren =
vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
std::string dataRoot = "E:\\vtkdata-5.4.2\\VTKData";
std::string filename = dataRoot + "/Data/hj_vector_xyz2.vtu";
vtkXMLUnstructuredGridReader *reader = vtkXMLUnstructuredGridReader::New();
reader->SetFileName(filename.c_str());
/////////////////////////////////////////////////////////////////////////////////////体绘制
vtkDistributedDataFilter * piece = vtkDistributedDataFilter::New();
piece->SetInputConnection(reader->GetOutputPort());
piece->SetController(controller);
vtkDataSetTriangleFilter *trifilter = vtkDataSetTriangleFilter::New();
trifilter->SetInputConnection(piece->GetOutputPort());
vtkPiecewiseFunction *opacityTransferFunction =
vtkPiecewiseFunction::New();
opacityTransferFunction->AddPoint(-3.0, 0.02);
opacityTransferFunction->AddPoint(0.0, 0.04);
opacityTransferFunction->AddPoint(2.0, 0.06);
vtkColorTransferFunction *colorTransferFunction =
vtkColorTransferFunction::New();
colorTransferFunction->AddRGBPoint(-3, 1, 1.0, 0.0);
colorTransferFunction->AddRGBPoint(-1, 1, 1, 0);
colorTransferFunction->AddRGBPoint(0, 1, 1, 0);
colorTransferFunction->AddRGBPoint(1.0, 1, 0.0, 0.0);
colorTransferFunction->AddRGBPoint(1.5, 1, 1.0, 0);
vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New();
volumeProperty->SetColor(colorTransferFunction);
volumeProperty->SetScalarOpacity(opacityTransferFunction);
vtkHAVSVolumeMapper *volumeMapper = vtkHAVSVolumeMapper::New();
volumeMapper->SetInputConnection(trifilter->GetOutputPort());
volumeMapper->SetGPUDataStructures(true);
volumeMapper->SetKBufferSizeTo2();
vtkVolume *volume = vtkVolume::New();
volume->SetMapper(volumeMapper);
volume->SetProperty(volumeProperty);
ren->AddActor(volume);
if(myId==0)
{
renWin->Render();
ren->ResetCamera();
manager->StartInteractor();
manager->StopServices();
}
else
{
manager->StartServices();
}
iren->Delete();
renWin->Delete();
manager->Delete();
}
int main( int argc, char* argv[] )
{
vtkMPIController* controller = vtkMPIController::New();
controller->Initialize(&argc, &argv);
vtkMultiProcessController::SetGlobalController(controller);
args_struct args;
args.argc = argc;
args.argv = argv;
controller->SetSingleMethod(process,&args);
controller->SingleMethodExecute();
controller->Finalize();
controller->Delete();
return 0;
}
--
View this message in context: http://vtk.1045678.n5.nabble.com/Is-there-any-wrong-in-my-code-tp3392201p3392201.html
Sent from the VTK - Users mailing list archive at Nabble.com.
More information about the vtkusers
mailing list