You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
5.9 KiB
182 lines
5.9 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: AmbientSpheres.cxx,v $
|
|
|
|
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 examples demonstrates the effect of specular lighting.
|
|
//
|
|
#include "vtkSphereSource.h"
|
|
#include "vtkPolyDataMapper.h"
|
|
#include "vtkActor.h"
|
|
#include "vtkRenderer.h"
|
|
#include "vtkRenderWindow.h"
|
|
#include "vtkRenderWindowInteractor.h"
|
|
#include "vtkProperty.h"
|
|
#include "vtkCamera.h"
|
|
#include "vtkLight.h"
|
|
|
|
int main()
|
|
{
|
|
// The following lines create a sphere represented by polygons.
|
|
//
|
|
vtkSphereSource *sphere = vtkSphereSource::New();
|
|
sphere->SetThetaResolution(100);
|
|
sphere->SetPhiResolution(50);
|
|
|
|
// The mapper is responsible for pushing the geometry into the graphics
|
|
// library. It may also do color mapping, if scalars or other attributes
|
|
// are defined.
|
|
//
|
|
vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
|
|
sphereMapper->SetInputConnection(sphere->GetOutputPort());
|
|
|
|
// The actor is a grouping mechanism: besides the geometry (mapper), it
|
|
// also has a property, transformation matrix, and/or texture map.
|
|
// In this example we create eight different spheres (two rows of four
|
|
// spheres) and set the specular lighting coefficients. A little ambient
|
|
// is turned on so the sphere is not completely black on the back side.
|
|
//
|
|
vtkActor *sphere1 = vtkActor::New();
|
|
sphere1->SetMapper(sphereMapper);
|
|
sphere1->GetProperty()->SetColor(1,0,0);
|
|
sphere1->GetProperty()->SetAmbient(0.125);
|
|
sphere1->GetProperty()->SetDiffuse(0.0);
|
|
sphere1->GetProperty()->SetSpecular(0.0);
|
|
|
|
vtkActor *sphere2 = vtkActor::New();
|
|
sphere2->SetMapper(sphereMapper);
|
|
sphere2->GetProperty()->SetColor(1,0,0);
|
|
sphere2->GetProperty()->SetAmbient(0.25);
|
|
sphere2->GetProperty()->SetDiffuse(0.0);
|
|
sphere2->GetProperty()->SetSpecular(0.0);
|
|
sphere2->AddPosition(1.25,0,0);
|
|
|
|
vtkActor *sphere3 = vtkActor::New();
|
|
sphere3->SetMapper(sphereMapper);
|
|
sphere3->GetProperty()->SetColor(1,0,0);
|
|
sphere3->GetProperty()->SetAmbient(0.375);
|
|
sphere3->GetProperty()->SetDiffuse(0.0);
|
|
sphere3->GetProperty()->SetSpecular(0.0);
|
|
sphere3->AddPosition(2.5,0,0);
|
|
|
|
vtkActor *sphere4 = vtkActor::New();
|
|
sphere4->SetMapper(sphereMapper);
|
|
sphere4->GetProperty()->SetColor(1,0,0);
|
|
sphere4->GetProperty()->SetAmbient(0.5);
|
|
sphere4->GetProperty()->SetDiffuse(0.0);
|
|
sphere4->GetProperty()->SetSpecular(0.0);
|
|
sphere4->AddPosition(3.75,0,0);
|
|
|
|
vtkActor *sphere5 = vtkActor::New();
|
|
sphere5->SetMapper(sphereMapper);
|
|
sphere5->GetProperty()->SetColor(1,0,0);
|
|
sphere5->GetProperty()->SetAmbient(0.625);
|
|
sphere5->GetProperty()->SetDiffuse(0.0);
|
|
sphere5->GetProperty()->SetSpecular(0.0);
|
|
sphere5->AddPosition(0.0,1.25,0);
|
|
|
|
vtkActor *sphere6 = vtkActor::New();
|
|
sphere6->SetMapper(sphereMapper);
|
|
sphere6->GetProperty()->SetColor(1,0,0);
|
|
sphere6->GetProperty()->SetAmbient(0.75);
|
|
sphere6->GetProperty()->SetDiffuse(0.0);
|
|
sphere6->GetProperty()->SetSpecular(0.0);
|
|
sphere6->AddPosition(1.25,1.25,0);
|
|
|
|
vtkActor *sphere7 = vtkActor::New();
|
|
sphere7->SetMapper(sphereMapper);
|
|
sphere7->GetProperty()->SetColor(1,0,0);
|
|
sphere7->GetProperty()->SetAmbient(0.875);
|
|
sphere7->GetProperty()->SetDiffuse(0.0);
|
|
sphere7->GetProperty()->SetSpecular(0.0);
|
|
sphere7->AddPosition(2.5,1.25,0);
|
|
|
|
vtkActor *sphere8 = vtkActor::New();
|
|
sphere8->SetMapper(sphereMapper);
|
|
sphere8->GetProperty()->SetColor(1,0,0);
|
|
sphere8->GetProperty()->SetAmbient(1.0);
|
|
sphere8->GetProperty()->SetDiffuse(0.0);
|
|
sphere8->GetProperty()->SetSpecular(0.0);
|
|
sphere8->AddPosition(3.75,1.25,0);
|
|
|
|
// Create the graphics structure. The renderer renders into the
|
|
// render window. The render window interactor captures mouse events
|
|
// and will perform appropriate camera or actor manipulation
|
|
// depending on the nature of the events.
|
|
//
|
|
vtkRenderer *ren1 = vtkRenderer::New();
|
|
vtkRenderWindow *renWin = vtkRenderWindow::New();
|
|
renWin->AddRenderer(ren1);
|
|
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
|
|
iren->SetRenderWindow(renWin);
|
|
|
|
// Add the actors to the renderer, set the background and size.
|
|
//
|
|
ren1->AddActor(sphere1);
|
|
ren1->AddActor(sphere2);
|
|
ren1->AddActor(sphere3);
|
|
ren1->AddActor(sphere4);
|
|
ren1->AddActor(sphere5);
|
|
ren1->AddActor(sphere6);
|
|
ren1->AddActor(sphere7);
|
|
ren1->AddActor(sphere8);
|
|
ren1->SetBackground(0.1, 0.2, 0.4);
|
|
renWin->SetSize(400, 200);
|
|
|
|
// Set up the lighting.
|
|
//
|
|
vtkLight *light = vtkLight::New();
|
|
light->SetFocalPoint(1.875,0.6125,0);
|
|
light->SetPosition(0.875,1.6125,1);
|
|
ren1->AddLight(light);
|
|
|
|
// We want to eliminate perspective effects on the apparent lighting.
|
|
// Parallel camera projection will be used. To zoom in parallel projection
|
|
// mode, the ParallelScale is set.
|
|
//
|
|
ren1->GetActiveCamera()->SetFocalPoint(0,0,0);
|
|
ren1->GetActiveCamera()->SetPosition(0,0,1);
|
|
ren1->GetActiveCamera()->SetViewUp(0,1,0);
|
|
ren1->GetActiveCamera()->ParallelProjectionOn();
|
|
ren1->ResetCamera();
|
|
ren1->GetActiveCamera()->SetParallelScale(1.5);
|
|
|
|
// This starts the event loop and invokes an initial render.
|
|
//
|
|
iren->Initialize();
|
|
iren->Start();
|
|
|
|
// Exiting from here, we have to delete all the instances that
|
|
// have been created.
|
|
//
|
|
sphere->Delete();
|
|
sphereMapper->Delete();
|
|
sphere1->Delete();
|
|
sphere2->Delete();
|
|
sphere3->Delete();
|
|
sphere4->Delete();
|
|
sphere5->Delete();
|
|
sphere6->Delete();
|
|
sphere7->Delete();
|
|
sphere8->Delete();
|
|
ren1->Delete();
|
|
renWin->Delete();
|
|
iren->Delete();
|
|
light->Delete();
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|