/*========================================================================= Program: Visualization Toolkit Module: TestPanoramicProjectionPass.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. =========================================================================*/ // This test covers the tone mapping post-processing render pass. // It renders an opaque actor with a lot of lights. #include "vtkRegressionTestImage.h" #include "vtkTestUtilities.h" #include "vtkActor.h" #include "vtkCamera.h" #include "vtkCameraPass.h" #include "vtkCullerCollection.h" #include "vtkLight.h" #include "vtkLightsPass.h" #include "vtkOpaquePass.h" #include "vtkOpenGLRenderer.h" #include "vtkPanoramicProjectionPass.h" #include "vtkPolyDataMapper.h" #include "vtkProperty.h" #include "vtkRenderPassCollection.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkSequencePass.h" #include "vtkSphereSource.h" int TestPanoramicProjectionPass(int argc, char* argv[]) { vtkNew renWin; renWin->SetSize(400, 400); vtkNew iren; iren->SetRenderWindow(renWin); vtkNew sphere; sphere->SetRadius(1.0); vtkNew renderer; renderer->GetCullers()->RemoveAllItems(); renderer->SetBackground(1.0, 1.0, 1.0); renderer->AutomaticLightCreationOff(); vtkNew light; light->SetPosition(0.0, 10.0, 0.0); light->SetFocalPoint(0.0, 0.0, 0.0); light->SetLightTypeToSceneLight(); renderer->AddLight(light); // custom passes vtkNew cameraP; vtkNew seq; vtkNew opaque; vtkNew lights; vtkNew passes; passes->AddItem(lights); passes->AddItem(opaque); seq->SetPasses(passes); cameraP->SetDelegatePass(seq); vtkNew projectionP; projectionP->SetProjectionTypeToAzimuthal(); projectionP->SetAngle(360.0); projectionP->SetDelegatePass(cameraP); vtkOpenGLRenderer::SafeDownCast(renderer)->SetPass(projectionP); renWin->AddRenderer(renderer); vtkNew mapper; mapper->SetInputConnection(sphere->GetOutputPort()); for (int i = 0; i < 4; i++) { double f = (i & 1) ? -2.0 : 2.0; double x = (i & 2) ? 1.0 : 0.0; double c[3] = { static_cast((i + 1) & 1), static_cast(((i + 1) >> 1) & 1), static_cast(((i + 1) >> 2) & 1) }; vtkNew actor; actor->SetMapper(mapper); actor->SetPosition(f * x, 0.0, f * (1.0 - x)); actor->GetProperty()->SetColor(c); renderer->AddActor(actor); } vtkNew camera; camera->SetPosition(0.0, 0.0, 0.0); camera->SetFocalPoint(0.0, 0.0, 1.0); camera->SetViewUp(0.0, 1.0, 0.0); renderer->SetActiveCamera(camera); renWin->Render(); int retVal = vtkRegressionTestImage(renWin); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !retVal; }