Why there is a visual dislocation when I show two volume models in a window.


2

These two models have only displacement in the XY direction. But after rotating the view angle, it looks overlapping. How to make it right ?

What below is the codes. I’m a beginner. Thanks for help.

// Create a vtkImageData object, then copy it and reset its origin.

img_copied->DeepCopy(img);
img_copied->SetOrigin(nDimX, nDimY, 0);

vtkNew<vtkGPUVolumeRayCastMapper> volumeMapper1, volumeMapper2;
volumeMapper1->SetInputData((vtkImageData *)img);
volumeMapper1->SetBlendModeToComposite();
volumeMapper2->SetInputData((vtkImageData*)img_copied);
volumeMapper2->SetBlendModeToComposite();

// vtkVolumeProperty
vtkNew<vtkVolumeProperty> volumeProperty;
volumeProperty->SetInterpolationTypeToLinear();
volumeProperty->SetAmbient(0.4);
volumeProperty->SetDiffuse(0.6);
volumeProperty->SetSpecular(0.2);

// vtkPiecewiseFunction
vtkNew<vtkPiecewiseFunction> compositeOpacity;
compositeOpacity->AddPoint(1, 0.00);
compositeOpacity->AddPoint(2, 1.00);

volumeProperty->SetScalarOpacity(compositeOpacity);

vtkNew<vtkVolume> volume1, volume2;
volume1->SetMapper(volumeMapper1);
volume1->SetProperty(volumeProperty);
volume2->SetMapper(volumeMapper2);
volume2->SetProperty(volumeProperty);

double viewPort[4] = { 0.0, 0.0, 1.0, 1.0 };

vtkNew<vtkRenderer> renderer;
renderer->SetBackground(1.0, 1.0, 1.0);
renderer->SetViewport(viewPort);
renderer->AddVolume(volume1);
renderer->AddVolume(volume2);

vtkNew<vtkRenderWindow> renWin;
renWin->AddRenderer(renderer);
renWin->SetSize(2160, 1440);
renWin->SetWindowName("VolumeMapper");

vtkNew<vtkRenderWindowInteractor> iren;
iren->SetRenderWindow(renWin);
renWin->Render();
iren->Start();

Who can give me some advice to solve this problem ?