#include "vtkActor.h" #include "vtkCamera.h" #include "vtkDiscretizableColorTransferFunction.h" #include "vtkElevationFilter.h" #include "vtkFloatArray.h" #include "vtkJPEGReader.h" #include "vtkNew.h" #include "vtkOpenGLRenderWindow.h" #include "vtkPointData.h" #include "vtkPolyDataMapper.h" #include "vtkProperty.h" #include "vtkRegressionTestImage.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkTestUtilities.h" #include "vtkTexture.h" #include "vtkTexturedSphereSource.h" //------------------------------------------------------------------------------ int TestMultiTexturingInterpolateScalars(int argc, char* argv[]) { vtkNew renderer; renderer->SetBackground(0.5, 0.5, 0.5); vtkNew renderWindow; renderWindow->SetSize(300, 300); renderWindow->AddRenderer(renderer); vtkNew iren; iren->SetRenderWindow(renderWindow); vtkNew sphere; sphere->SetThetaResolution(64); sphere->SetPhiResolution(32); vtkNew elevationFilter; elevationFilter->SetLowPoint(0, 0, -0.5); elevationFilter->SetHighPoint(0, 0, 0.5); elevationFilter->SetInputConnection(sphere->GetOutputPort()); elevationFilter->Update(); vtkPolyData* pd = vtkPolyData::SafeDownCast(elevationFilter->GetOutput()); vtkFloatArray* tcoord = vtkFloatArray::SafeDownCast(pd->GetPointData()->GetTCoords()); tcoord->SetName("TexCoords"); // Give texture coordinate a custom name for multitexturing // Use Paraview's Rainbow Desaturated colormap preset vtkNew ctf; ctf->AddRGBPoint(0.11, 0.278431, 0.278431, 0.858824); ctf->AddRGBPoint(0.22, 0, 0, 0.360784); ctf->AddRGBPoint(0.33, 0, 1, 1); ctf->AddRGBPoint(0.44, 0, 0.501961, 0); ctf->AddRGBPoint(0.55, 1, 1, 0); ctf->AddRGBPoint(0.66, 1, 0.380392, 0); ctf->AddRGBPoint(0.77, 0.419608, 0, 0); ctf->AddRGBPoint(0.88, 0.878431, 0.301961, 0.301961); ctf->DiscretizeOn(); ctf->SetNumberOfValues(8); vtkNew mapper; mapper->SetInputData(pd); mapper->SetLookupTable(ctf); mapper->SetColorModeToMapScalars(); mapper->InterpolateScalarsBeforeMappingOn(); vtkNew actor; renderer->AddActor(actor); actor->SetMapper(mapper); const char* file = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/clouds.jpeg"); vtkNew reader; reader->SetFileName(file); delete[] file; vtkNew tex; tex->InterpolateOn(); tex->SetBlendingMode(vtkTexture::VTK_TEXTURE_BLENDING_MODE_MODULATE); tex->SetInputConnection(reader->GetOutputPort()); actor->GetProperty()->SetTexture("skyclouds", tex); mapper->MapDataArrayToMultiTextureAttribute( "skyclouds", tcoord->GetName(), vtkDataObject::FIELD_ASSOCIATION_POINTS); renderWindow->SetMultiSamples(0); renderer->ResetCamera(); renderer->GetActiveCamera()->Elevation(80); renderer->GetActiveCamera()->OrthogonalizeViewUp(); renderer->GetActiveCamera()->Zoom(1.5); renderer->ResetCameraClippingRange(); renderWindow->Render(); int retVal = vtkRegressionTestImage(renderWindow); if (retVal == vtkRegressionTester::DO_INTERACTOR) { iren->Start(); } return !retVal; }