SpecularSpheres
VTKExamples/Python/Rendering/SpecularSpheres
Description¶
Note
The original source code for this example is here.
Info
See Figure 3-10 in Chapter 3 the VTK Textbook.
Info
Similar examples setting the ambient and diffuse properties are: See AmbientSpheres.cxx, AmbientSpheres.py, AmbientSpheres.java and DiffuseSpheres.cxx, DiffuseSpheres.py.
Question
If you have a simple question about this example contact us at VTKExamplesProject If your question is more complex and may require extended discussion, please use the VTK Discourse Forum
Code¶
SpecularSpheres.py
# !/usr/bin/env python import vtk def main(): colors = vtk.vtkNamedColors() # Set the background color. colors.SetColor("bkg", [26, 51, 102, 255]) # The following lines create a sphere represented by polygons. # sphere = vtk.vtkSphereSource() 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. # sphereMapper = vtk.vtkPolyDataMapper() 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. # numberOfSpheres = 8 spheres = list() ambient = 0.3 diffuse = 0.5 specular = 1.0 spBase = 5.0 spScale = 1.0 position = [0, 0, 0] for i in range(0, numberOfSpheres): specularPower = spBase * spScale spheres.append(vtk.vtkActor()) spheres[i].SetMapper(sphereMapper) spheres[i].GetProperty().SetColor(colors.GetColor3d("Red")) spheres[i].GetProperty().SetAmbient(ambient) spheres[i].GetProperty().SetDiffuse(diffuse) spheres[i].GetProperty().SetSpecular(specular) spheres[i].GetProperty().SetSpecularPower(specularPower) spheres[i].GetProperty().SetSpecularColor(colors.GetColor3d("White")) spheres[i].AddPosition(position) spScale = spScale * 2.0 position[0] += 1.25 if i == 3: specular = 0.5 spScale = 1.0 position[0] = 0 position[1] = 1.25 # 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. # ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Add the actors to the renderer, set the background and size. # for i in range(0, numberOfSpheres): ren.AddActor(spheres[i]) ren.SetBackground(colors.GetColor3d("bkg")) renWin.SetSize(640, 480) renWin.SetWindowName("Specular Spheres") # Set up the lighting. # light = vtk.vtkLight() light.SetFocalPoint(1.875, 0.6125, 0) light.SetPosition(0.875, 1.6125, 1) ren.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. # ren.GetActiveCamera().SetFocalPoint(0, 0, 0) ren.GetActiveCamera().SetPosition(0, 0, 1) ren.GetActiveCamera().SetViewUp(0, 1, 0) ren.GetActiveCamera().ParallelProjectionOn() ren.ResetCamera() ren.GetActiveCamera().SetParallelScale(2.0) # This starts the event loop and invokes an initial render. # iren.Initialize() renWin.Render() iren.Start() if __name__ == "__main__": main()