Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
127 lines (104 sloc)
3.99 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*========================================================================= | |
Program: Visualization Toolkit | |
Module: TestGaussianBlurPass.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 gaussian blur post-processing render pass. | |
// It renders an actor with a translucent LUT and depth | |
// peeling using the multi renderpass classes. The mapper uses color | |
// interpolation (poor quality). | |
// | |
// The command line arguments are: | |
// -I => run in interactive mode; unless this is used, the program will | |
// not allow interaction and exit | |
#include "vtkRegressionTestImage.h" | |
#include "vtkTestUtilities.h" | |
#include "vtkActor.h" | |
#include "vtkCamera.h" | |
#include "vtkNew.h" | |
#include "vtkOpenGLRenderer.h" | |
#include "vtkPLYReader.h" | |
#include "vtkPolyDataMapper.h" | |
#include "vtkProperty.h" | |
#include "vtkRenderWindow.h" | |
#include "vtkRenderWindowInteractor.h" | |
#include "vtkRenderStepsPass.h" | |
#include "vtkSSAAPass.h" | |
#include "vtkCellArray.h" | |
#include "vtkTimerLog.h" | |
int TestSSAAPass(int argc, char* argv[]) | |
{ | |
vtkNew<vtkRenderWindowInteractor> iren; | |
vtkNew<vtkRenderWindow> renWin; | |
renWin->SetMultiSamples(0); | |
renWin->SetAlphaBitPlanes(1); | |
iren->SetRenderWindow(renWin); | |
vtkNew<vtkRenderer> renderer; | |
renWin->AddRenderer(renderer); | |
vtkNew<vtkActor> actor; | |
vtkNew<vtkPolyDataMapper> mapper; | |
renderer->AddActor(actor); | |
actor->SetMapper(mapper); | |
vtkOpenGLRenderer* glrenderer = vtkOpenGLRenderer::SafeDownCast(renderer); | |
// create the basic VTK render steps | |
vtkNew<vtkRenderStepsPass> basicPasses; | |
// finally blur the resulting image | |
// The blur delegates rendering the unblured image | |
// to the basicPasses | |
vtkNew<vtkSSAAPass> ssaa; | |
ssaa->SetDelegatePass(basicPasses); | |
// tell the renderer to use our render pass pipeline | |
glrenderer->SetPass(ssaa); | |
// glrenderer->SetPass(basicPasses); | |
renWin->SetSize(500, 500); | |
const char* fileName = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/dragon.ply"); | |
vtkNew<vtkPLYReader> reader; | |
reader->SetFileName(fileName); | |
reader->Update(); | |
delete[] fileName; | |
mapper->SetInputConnection(reader->GetOutputPort()); | |
actor->GetProperty()->SetAmbientColor(0.2, 0.2, 1.0); | |
actor->GetProperty()->SetDiffuseColor(1.0, 0.65, 0.7); | |
actor->GetProperty()->SetSpecularColor(1.0, 1.0, 1.0); | |
actor->GetProperty()->SetSpecular(0.5); | |
actor->GetProperty()->SetDiffuse(0.7); | |
actor->GetProperty()->SetAmbient(0.5); | |
actor->GetProperty()->SetSpecularPower(20.0); | |
actor->GetProperty()->SetOpacity(1.0); | |
vtkNew<vtkTimerLog> timer; | |
timer->StartTimer(); | |
renWin->Render(); | |
timer->StopTimer(); | |
double firstRender = timer->GetElapsedTime(); | |
cerr << "first render time: " << firstRender << endl; | |
timer->StartTimer(); | |
int numRenders = 4; | |
for (int i = 0; i < numRenders; ++i) | |
{ | |
renderer->GetActiveCamera()->Azimuth(80.0 / numRenders); | |
renderer->GetActiveCamera()->Elevation(88.0 / numRenders); | |
renWin->Render(); | |
} | |
timer->StopTimer(); | |
double elapsed = timer->GetElapsedTime(); | |
cerr << "interactive render time: " << elapsed / numRenders << endl; | |
unsigned int numTris = reader->GetOutput()->GetPolys()->GetNumberOfCells(); | |
cerr << "number of triangles: " << numTris << endl; | |
cerr << "triangles per second: " << numTris * (numRenders / elapsed) << endl; | |
renderer->GetActiveCamera()->SetPosition(0, 0, 1); | |
renderer->GetActiveCamera()->SetFocalPoint(0, 0, 0); | |
renderer->GetActiveCamera()->SetViewUp(0, 1, 0); | |
renderer->ResetCamera(); | |
renWin->Render(); | |
int retVal = vtkRegressionTestImage(renWin); | |
if (retVal == vtkRegressionTester::DO_INTERACTOR) | |
{ | |
iren->Start(); | |
} | |
return !retVal; | |
} |