/*========================================================================= Program: Visualization Toolkit Module: TestPBREdgeTint.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 PBR Edge Tint feature // It renders spheres with different edge colors using a skybox as image based lighting #include "vtkActor.h" #include "vtkActorCollection.h" #include "vtkGenericOpenGLRenderWindow.h" #include "vtkHDRReader.h" #include "vtkImageData.h" #include "vtkImageFlip.h" #include "vtkInteractorStyleTrackballCamera.h" #include "vtkNew.h" #include "vtkOpenGLPolyDataMapper.h" #include "vtkOpenGLRenderer.h" #include "vtkOpenGLSkybox.h" #include "vtkOpenGLTexture.h" #include "vtkPBRIrradianceTexture.h" #include "vtkPBRLUTTexture.h" #include "vtkPBRPrefilterTexture.h" #include "vtkProperty.h" #include "vtkRegressionTestImage.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRendererCollection.h" #include "vtkSphereSource.h" #include "vtkTestUtilities.h" #include "vtkTexture.h" //------------------------------------------------------------------------------ int TestPBREdgeTint(int argc, char* argv[]) { vtkNew renderer; vtkNew renWin; renWin->SetSize(600, 600); renWin->AddRenderer(renderer); vtkNew iren; iren->SetRenderWindow(renWin); vtkNew skybox; vtkSmartPointer irradiance = renderer->GetEnvMapIrradiance(); irradiance->SetIrradianceStep(0.3); vtkSmartPointer prefilter = renderer->GetEnvMapPrefiltered(); vtkNew reader; char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/spiaggia_di_mondello_1k.hdr"); reader->SetFileName(fname); delete[] fname; vtkNew texture; texture->SetColorModeToDirectScalars(); texture->MipmapOn(); texture->InterpolateOn(); texture->SetInputConnection(reader->GetOutputPort()); // HDRI OpenGL renderer->UseImageBasedLightingOn(); renderer->SetEnvironmentTexture(texture); // Skybox OpenGL skybox->SetFloorRight(0.0, 0.0, 1.0); skybox->SetProjection(vtkSkybox::Sphere); skybox->SetTexture(texture); renderer->AddActor(skybox); vtkNew sphere; sphere->SetThetaResolution(75); sphere->SetPhiResolution(75); vtkNew pdSphere; pdSphere->SetInputConnection(sphere->GetOutputPort()); for (int i = 0; i < 6; i++) { vtkNew actorSphere; actorSphere->SetPosition(i, 0.0, 0.0); actorSphere->SetMapper(pdSphere); actorSphere->GetProperty()->SetInterpolationToPBR(); actorSphere->GetProperty()->SetMetallic(1.0); actorSphere->GetProperty()->SetEdgeTint(0.0, 0.0, 0.0); actorSphere->GetProperty()->SetRoughness(i / 5.0); renderer->AddActor(actorSphere); } for (int i = 0; i < 6; i++) { vtkNew actorSphere; actorSphere->SetPosition(i, 1.0, 0.0); actorSphere->SetMapper(pdSphere); actorSphere->GetProperty()->SetInterpolationToPBR(); actorSphere->GetProperty()->SetMetallic(1.0); actorSphere->GetProperty()->SetColor(0.0, 0.0, 0.0); actorSphere->GetProperty()->SetEdgeTint(1.0, 1.0, 1.0); actorSphere->GetProperty()->SetRoughness(i / 5.0); renderer->AddActor(actorSphere); } for (int i = 0; i < 6; i++) { vtkNew actorSphere; actorSphere->SetPosition(i, 2.0, 0.0); actorSphere->SetMapper(pdSphere); actorSphere->GetProperty()->SetInterpolationToPBR(); actorSphere->GetProperty()->SetMetallic(1.0); actorSphere->GetProperty()->SetColor(0.0, 0.0, 1.0); actorSphere->GetProperty()->SetEdgeTint(1.0, 0.0, 0.0); actorSphere->GetProperty()->SetRoughness(i / 5.0); renderer->AddActor(actorSphere); } for (int i = 0; i < 6; i++) { vtkNew actorSphere; actorSphere->SetPosition(i, 3.0, 0.0); actorSphere->SetMapper(pdSphere); actorSphere->GetProperty()->SetInterpolationToPBR(); actorSphere->GetProperty()->SetMetallic(1.0); actorSphere->GetProperty()->SetColor(1.0, 0.0, 0.0); actorSphere->GetProperty()->SetEdgeTint(0.0, 0.0, 1.0); actorSphere->GetProperty()->SetRoughness(i / 5.0); renderer->AddActor(actorSphere); } for (int i = 0; i < 6; i++) { vtkNew actorSphere; actorSphere->SetPosition(i, 4.0, 0.0); actorSphere->SetMapper(pdSphere); actorSphere->GetProperty()->SetInterpolationToPBR(); actorSphere->GetProperty()->SetMetallic(1.0); actorSphere->GetProperty()->SetColor(0.0, 0.0, 0.0); actorSphere->GetProperty()->SetEdgeTint(1.0, 1.0, 0.0); actorSphere->GetProperty()->SetRoughness(i / 5.0); renderer->AddActor(actorSphere); } renWin->Render(); int retVal = vtkRegressionTestImage(renWin); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !retVal; }