/*========================================================================= Program: Visualization Toolkit Module: TestOSPRayRenderMesh.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 verifies that we can render at resolutions larger than the window // by rendering and stitching multiple tiles. #include "vtkTestUtilities.h" #include "vtkActor.h" #include "vtkCamera.h" #include "vtkImageActor.h" #include "vtkImageData.h" #include "vtkImageMapper3D.h" #include "vtkJPEGReader.h" #include "vtkLight.h" #include "vtkOSPRayPass.h" #include "vtkOSPRayRendererNode.h" #include "vtkOpenGLRenderer.h" #include "vtkPLYReader.h" #include "vtkPNGWriter.h" #include "vtkPolyDataMapper.h" #include "vtkPolyDataNormals.h" #include "vtkProperty.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkSmartPointer.h" #include "vtkTexture.h" #include "vtkWindowToImageFilter.h" #include "vtkOSPRayTestInteractor.h" int TestOSPRayTiling(int argc, char* argv[]) { vtkSmartPointer iren = vtkSmartPointer::New(); vtkSmartPointer renWin = vtkSmartPointer::New(); iren->SetRenderWindow(renWin); vtkSmartPointer renderer = vtkSmartPointer::New(); renWin->AddRenderer(renderer); vtkOSPRayRendererNode::SetSamplesPerPixel(16, renderer); vtkOSPRayRendererNode::SetBackgroundMode(vtkOSPRayRendererNode::Environment, renderer); vtkSmartPointer l = vtkSmartPointer::New(); l->SetLightTypeToHeadlight(); l->SetIntensity(0.1); renderer->AddLight(l); // todo: as soon as we get materials, make the bunny reflective // to really show off const char* fileName = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/bunny.ply"); vtkSmartPointer polysource = vtkSmartPointer::New(); polysource->SetFileName(fileName); vtkSmartPointer normals = vtkSmartPointer::New(); normals->SetInputConnection(polysource->GetOutputPort()); vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(normals->GetOutputPort()); vtkSmartPointer actor = vtkSmartPointer::New(); renderer->AddActor(actor); actor->SetMapper(mapper); renWin->SetSize(400, 400); vtkSmartPointer ospray = vtkSmartPointer::New(); renderer->SetPass(ospray); vtkOSPRayRendererNode::SetRendererType("pathtracer", renderer); for (int i = 0; i < argc; ++i) { if (!strcmp(argv[i], "--OptiX")) { vtkOSPRayRendererNode::SetRendererType("optix pathtracer", renderer); break; } } vtkSmartPointer textr = vtkSmartPointer::New(); vtkSmartPointer imgReader = vtkSmartPointer::New(); vtkSmartPointer image = vtkSmartPointer::New(); char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/wintersun.jpg"); imgReader->SetFileName(fname); delete[] fname; imgReader->Update(); textr->SetInputConnection(imgReader->GetOutputPort(0)); renderer->UseImageBasedLightingOn(); renderer->SetEnvironmentTexture(textr); double up[3] = { 0.0, 1.0, 0.0 }; double east[3] = { -1.0, 0.0, 0.0 }; vtkOSPRayRendererNode::SetNorthPole(up, renderer); vtkOSPRayRendererNode::SetEastPole(east, renderer); renWin->Render(); vtkSmartPointer w2i = vtkSmartPointer::New(); w2i->SetInput(renWin); w2i->SetScale(4, 4); w2i->Update(); // vtkSmartPointer writer = vtkSmartPointer::New(); // writer->SetFileName("screenshot.png"); // writer->SetInputConnection(w2i->GetOutputPort()); // writer->Write(); // Show stitched image in separate window vtkNew imageActor; imageActor->GetMapper()->SetInputData(w2i->GetOutput()); vtkNew ren2; ren2->AddActor(imageActor); // Background color white to distinguish image boundary ren2->SetEnvironmentalBG(1, 1, 1); vtkNew renderWindow; renderWindow->AddRenderer(ren2); renderWindow->Render(); vtkSmartPointer style = vtkSmartPointer::New(); style->SetPipelineControlPoints(renderer, ospray, nullptr); iren->SetInteractorStyle(style); style->SetCurrentRenderer(renderer); iren->Start(); return 0; }