/*========================================================================= Program: Visualization Toolkit Module: TestGPURayCastGradientOpacityLight.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // Tests gradient opacity TF support when combined with vtkLightKit. #include "vtkCamera.h" #include "vtkColorTransferFunction.h" #include "vtkGPUVolumeRayCastMapper.h" #include "vtkInteractorStyleTrackballCamera.h" #include "vtkLightKit.h" #include "vtkMetaImageReader.h" #include "vtkNew.h" #include "vtkPiecewiseFunction.h" #include "vtkRegressionTestImage.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkTestUtilities.h" #include "vtkVolume.h" #include "vtkVolumeProperty.h" int TestGPURayCastGradientOpacityLight(int argc, char* argv[]) { cout << "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)" << endl; vtkNew renWin; renWin->SetSize(400, 401); renWin->SetMultiSamples(0); vtkNew ren; renWin->AddRenderer(ren); ren->SetBackground(0.1, 0.4, 0.2); // Setup lights vtkNew lightKit; lightKit->AddLightsToRenderer(ren); vtkNew iren; iren->SetRenderWindow(renWin); vtkNew style; iren->SetInteractorStyle(style); // Load data char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/HeadMRVolume.mhd"); vtkNew reader; reader->SetFileName(fname); reader->Update(); delete[] fname; vtkNew mapper; mapper->SetInputConnection(reader->GetOutputPort()); // Prepare TFs vtkNew ctf; ctf->AddHSVPoint(1.0, 0.095, 0.33, 0.82); ctf->AddHSVPoint(53.3, 0.04, 0.7, 0.63); ctf->AddHSVPoint(256, 0.095, 0.33, 0.82); vtkNew pwf; pwf->AddPoint(0.0, 0.0); pwf->AddPoint(4.48, 0.0); pwf->AddPoint(43.116, 1.0); pwf->AddPoint(641.0, 1.0); vtkNew gf; gf->AddPoint(10, 0.0); gf->AddPoint(70, 1.0); vtkNew volumeProperty; volumeProperty->SetScalarOpacity(pwf); volumeProperty->SetGradientOpacity(gf); volumeProperty->SetColor(ctf); volumeProperty->ShadeOn(); vtkNew volume; volume->SetMapper(mapper); volume->SetProperty(volumeProperty); ren->AddVolume(volume); volume->RotateX(-30); ren->ResetCamera(); ren->GetActiveCamera()->Zoom(1.5); renWin->Render(); int retVal = vtkTesting::Test(argc, argv, renWin, 90); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !((retVal == vtkTesting::PASSED) || (retVal == vtkTesting::DO_INTERACTOR)); }