/*========================================================================= Program: Visualization Toolkit Module: TestGPURayCastJitteringCustom.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 stochastic jittering by rendering a volume exhibiting aliasing due * to a big sampling distance (low sampling frequency), a.k.a. wood-grain * artifacts. The expected output is 'filtered' due to the noise introduced * by a customized noise generator. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static const char* TestGPURayCastJitteringCustomLog = "# StreamVersion 1\n" "EnterEvent 298 27 0 0 0 0 0\n" "MouseWheelForwardEvent 200 142 0 0 0 0 0\n" "LeaveEvent 311 71 0 0 0 0 0\n"; int TestGPURayCastJitteringCustom(int argc, char* argv[]) { cout << "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)" << endl; char* volumeFile = vtkTestUtilities::ExpandDataFileName( argc, argv, "Data/ironProt.vtk"); vtkNew reader; reader->SetFileName(volumeFile); delete[] volumeFile; vtkNew mapper; mapper->SetInputConnection(reader->GetOutputPort()); mapper->SetAutoAdjustSampleDistances(0); mapper->SetSampleDistance(2.0); mapper->UseJitteringOn(); vtkNew color; color->AddRGBPoint(0.0, 0.0, 0.0, 0.0); color->AddRGBPoint(64.0, 1.0, 0.0, 0.0); color->AddRGBPoint(128.0, 0.0, 0.0, 1.0); color->AddRGBPoint(192.0, 0.0, 1.0, 0.0); color->AddRGBPoint(255.0, 0.0, 0.2, 0.0); vtkNew opacity; opacity->AddPoint(0.0, 0.0); opacity->AddPoint(255.0, 1.0); vtkNew property; property->SetColor(color); property->SetScalarOpacity(opacity); property->SetInterpolationTypeToLinear(); property->ShadeOff(); vtkNew volume; volume->SetMapper(mapper); volume->SetProperty(property); vtkNew renWin; renWin->SetSize(400, 400); renWin->SetMultiSamples(0); vtkNew iren; iren->SetRenderWindow(renWin); vtkNew style; iren->SetInteractorStyle(style); vtkNew ren; renWin->AddRenderer(ren); ren->AddVolume(volume); ren->ResetCamera(); ren->GetActiveCamera()->SetPosition(79.1817, 14.6622, 62.9264); ren->GetActiveCamera()->SetFocalPoint(32.0598, 26.5308, 28.0257); renWin->Render(); iren->Initialize(); // Customize the noise function and texture size vtkOpenGLGPUVolumeRayCastMapper* glMapper = vtkOpenGLGPUVolumeRayCastMapper::SafeDownCast(mapper); int texSize[2] = {600, 600}; glMapper->SetNoiseTextureSize(texSize); vtkPerlinNoise* generator = vtkPerlinNoise::New(); generator->SetFrequency(1024.0, 1024.0, 1.0); generator->SetAmplitude(0.5); glMapper->SetNoiseGenerator(generator); generator->Delete(); renWin->Render(); int rv = vtkTesting::InteractorEventLoop(argc, argv, iren, TestGPURayCastJitteringCustomLog); return rv; }