SpotLights
VTKExamples/Cxx/Lighting/SpotLights
Description¶
This example places two vtkLight's with PositionalOn().
Cite
This example was inspired by Oliver Natt's question (and python script) on the VTK Users mailing list.
Code¶
SpotLights.cxx
#include <vtkSmartPointer.h> #include <vtkActor.h> #include <vtkCamera.h> #include <vtkLight.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkPlaneSource.h> #include <vtkPolyDataMapper.h> #include <vtkNamedColors.h> int main (int, char *[]) { // create a rendering window and renderer vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->SetSize(640, 480); renderWindow->AddRenderer(renderer); // create a renderwindowinteractor vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New(); iren->SetRenderWindow(renderWindow); // create a plane and add it to the renderer vtkSmartPointer<vtkPlaneSource> source = vtkSmartPointer<vtkPlaneSource>::New(); source->SetOrigin(-5.0, 0.0, 5.0); source->SetPoint1(5.0, 0.0, 5.0); source->SetPoint2(-5.0, 0.0, -5.0); source->SetResolution(100, 100); vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(source->GetOutputPort()); vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New(); vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); renderer->AddActor(actor); // set camera view renderer->ResetCamera(); renderer->GetActiveCamera()->Azimuth(40.0); renderer->GetActiveCamera()->Elevation(30.0); // create a green light vtkSmartPointer<vtkLight> greenLight = vtkSmartPointer<vtkLight>::New(); greenLight->PositionalOn(); greenLight->SetPosition(-4.0, 4.0, -1.0); greenLight->SetColor(colors->GetColor3d("Lawn_green").GetData()); greenLight->SetIntensity(0.5); // create a pink light vtkSmartPointer<vtkLight> pinkLight = vtkSmartPointer<vtkLight>::New(); pinkLight->PositionalOn(); pinkLight->SetPosition(4.0, 5.0, 1.0); pinkLight->SetColor(colors->GetColor3d("DeepPink").GetData()); pinkLight->SetIntensity(0.6); // add lights to the renderer renderer->AddLight(pinkLight); renderer->AddLight(greenLight); // define a background for better visibility renderer->SetBackground(colors->GetColor3d("RoyalBlue").GetData()); renderer->SetBackground2(colors->GetColor3d("SkyBlue").GetData()); renderer->GradientBackgroundOn(); // enable interactor iren->Initialize(); renderWindow->Render(); iren->Start(); return EXIT_SUCCESS; }
CMakeLists.txt¶
cmake_minimum_required(VERSION 2.8) PROJECT(SpotLights) find_package(VTK REQUIRED) include(${VTK_USE_FILE}) add_executable(SpotLights MACOSX_BUNDLE SpotLights.cxx ) target_link_libraries(SpotLights ${VTK_LIBRARIES})
Download and Build SpotLights¶
Click here to download SpotLights and its CMakeLists.txt file. Once the tarball SpotLights.tar has been downloaded and extracted,
cd SpotLights/build
If VTK is installed:
cmake ..
If VTK is not installed but compiled on your system, you will need to specify the path to your VTK build:
cmake -DVTK_DIR:PATH=/home/me/vtk_build ..
Build the project:
make
and run it:
./SpotLights
WINDOWS USERS
Be sure to add the VTK bin directory to your path. This will resolve the VTK dll's at run time.