From 36228cab218d017e455040216c99c7ed8946de8a Mon Sep 17 00:00:00 2001 From: Sankhesh Jhaveri <sankhesh.jhaveri@kitware.com> Date: Mon, 29 Feb 2016 00:42:43 -0500 Subject: [PATCH] Added test for four dependent comps with gradient opacity --- Rendering/Volume/Testing/Cxx/CMakeLists.txt | 1 + ...RayCastFourComponentsDependentGradient.cxx | 97 +++++++++++++++++++ ...astFourComponentsDependentGradient.png.md5 | 1 + 3 files changed, 99 insertions(+) create mode 100644 Rendering/Volume/Testing/Cxx/TestGPURayCastFourComponentsDependentGradient.cxx create mode 100644 Rendering/Volume/Testing/Data/Baseline/TestGPURayCastFourComponentsDependentGradient.png.md5 diff --git a/Rendering/Volume/Testing/Cxx/CMakeLists.txt b/Rendering/Volume/Testing/Cxx/CMakeLists.txt index 49e9b9206eb..0cf4c60cb5d 100644 --- a/Rendering/Volume/Testing/Cxx/CMakeLists.txt +++ b/Rendering/Volume/Testing/Cxx/CMakeLists.txt @@ -56,6 +56,7 @@ set (VolumeOpenGL2CxxTests TestGPURayCastCameraInsideSmallSpacing.cxx TestGPURayCastCellData.cxx TestGPURayCastClipping.cxx + TestGPURayCastFourComponentsDependentGradient.cxx TestGPURayCastGradientOpacity.cxx TestGPURayCastPositionalLights.cxx TestGPURayCastReleaseResources.cxx diff --git a/Rendering/Volume/Testing/Cxx/TestGPURayCastFourComponentsDependentGradient.cxx b/Rendering/Volume/Testing/Cxx/TestGPURayCastFourComponentsDependentGradient.cxx new file mode 100644 index 00000000000..26ab6ef862e --- /dev/null +++ b/Rendering/Volume/Testing/Cxx/TestGPURayCastFourComponentsDependentGradient.cxx @@ -0,0 +1,97 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: TestGPURayCastFourComponentsDependentGradient.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. + +=========================================================================*/ + +// Description +// This is a test for volume rendering using the GPU ray cast +// mapper of a dataset with four components treating them as +// dependent and applying a gradient opacity function + +#include "vtkCamera.h" +#include "vtkColorTransferFunction.h" +#include "vtkGPUVolumeRayCastMapper.h" +#include "vtkNew.h" +#include "vtkPiecewiseFunction.h" +#include "vtkRegressionTestImage.h" +#include "vtkRenderWindow.h" +#include "vtkRenderWindowInteractor.h" +#include "vtkRenderer.h" +#include "vtkTestUtilities.h" +#include "vtkTesting.h" +#include "vtkVolumeProperty.h" +#include "vtkXMLImageDataReader.h" + +int TestGPURayCastFourComponentsDependentGradient(int argc, char *argv[]) +{ + cout << "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)" << endl; + + char *cfname= + vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/vase_4comp.vti"); + + vtkNew<vtkXMLImageDataReader> reader; + reader->SetFileName(cfname); + delete [] cfname; + + vtkNew<vtkRenderWindow> renWin; + renWin->SetSize(301, 300); // Intentional NPOT size + renWin->SetMultiSamples(0); + + vtkNew<vtkRenderer> ren; + renWin->AddRenderer(ren.GetPointer()); + + vtkNew<vtkRenderWindowInteractor> iren; + iren->SetRenderWindow(renWin.GetPointer()); + + renWin->Render(); + + // Volume render the dataset + vtkNew<vtkGPUVolumeRayCastMapper> mapper; + mapper->AutoAdjustSampleDistancesOff(); + mapper->SetSampleDistance(0.5); + mapper->SetInputConnection(reader->GetOutputPort()); + + // Opacity transfer function + vtkNew<vtkPiecewiseFunction> pf; + pf->AddPoint(0, 0); + pf->AddPoint(255, 1); + + // Gradient opacity transfer function + vtkNew<vtkPiecewiseFunction> pf1; + pf1->AddPoint(30, 0); + pf1->AddPoint(255, 1); + + // Volume property with independent components OFF + vtkNew<vtkVolumeProperty> property; + property->IndependentComponentsOff(); + property->SetScalarOpacity(pf.GetPointer()); + property->SetGradientOpacity(pf1.GetPointer()); + + vtkNew<vtkVolume> volume; + volume->SetMapper(mapper.GetPointer()); + volume->SetProperty(property.GetPointer()); + ren->AddVolume(volume.GetPointer()); + + ren->ResetCamera(); + renWin->Render(); + + iren->Initialize(); + + int retVal = vtkRegressionTestImage( renWin.GetPointer() ); + if( retVal == vtkRegressionTester::DO_INTERACTOR) + { + iren->Start(); + } + + return !retVal; +} diff --git a/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastFourComponentsDependentGradient.png.md5 b/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastFourComponentsDependentGradient.png.md5 new file mode 100644 index 00000000000..813bcdd6feb --- /dev/null +++ b/Rendering/Volume/Testing/Data/Baseline/TestGPURayCastFourComponentsDependentGradient.png.md5 @@ -0,0 +1 @@ +4722cd9f7a6956e605532a2ac4183303 -- GitLab