Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.
 
 
 
 
 
 

237 lines
8.8 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkLight.h,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.
=========================================================================*/
// .NAME vtkLight - a virtual light for 3D rendering
// .SECTION Description
// vtkLight is a virtual light for 3D rendering. It provides methods to locate
// and point the light, turn it on and off, and set its brightness and color.
// In addition to the basic infinite distance point light source attributes,
// you also can specify the light attenuation values and cone angle.
// These attributes are only used if the light is a positional light.
// The default is a directional light (e.g. infinite point light source).
//
// Lights have a type that describes how the light should move with respect
// to the camera. A Headlight is always located at the current camera position
// and shines on the camera's focal point. A CameraLight also moves with
// the camera, but may not be coincident to it. CameraLights are defined
// in a normalized coordinate space where the camera is located at (0, 0, 1),
// the camera is looking at (0, 0, 0), and up is (0, 1, 0). Finally, a
// SceneLight is part of the scene itself and does not move with the camera.
// (Renderers are responsible for moving the light based on its type.)
//
// Lights have a transformation matrix that describes the space in which
// they are positioned. A light's world space position and focal point
// are defined by their local position and focal point, transformed by
// their transformation matrix (if it exists).
#ifndef __vtkLight_h
#define __vtkLight_h
#include "vtkObject.h"
/* need for virtual function */
class vtkRenderer;
class vtkMatrix4x4;
#define VTK_LIGHT_TYPE_HEADLIGHT 1
#define VTK_LIGHT_TYPE_CAMERA_LIGHT 2
#define VTK_LIGHT_TYPE_SCENE_LIGHT 3
class VTK_RENDERING_EXPORT vtkLight : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkLight,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Create a light with the focal point at the origin and its position
// set to (0,0,1). The light is a SceneLight, its color is white,
// intensity=1, and the light is turned on.
static vtkLight *New();
// Description:
// Abstract interface to renderer. Each concrete subclass of vtkLight
// will load its data into the graphics system in response to this method
// invocation. The actual loading is performed by a vtkLightDevice
// subclass, which will get created automatically.
virtual void Render(vtkRenderer *, int) {};
// Description:
// Set/Get the color of the light. It is possible to set the ambient,
// diffuse and specular colors separately. The SetColor() method sets
// the diffuse and specular colors to the same color (this is a feature
// to preserve backward compatbility.)
vtkSetVector3Macro(AmbientColor,double);
vtkGetVectorMacro(AmbientColor,double,3);
vtkSetVector3Macro(DiffuseColor,double);
vtkGetVectorMacro(DiffuseColor,double,3);
vtkSetVector3Macro(SpecularColor,double);
vtkGetVectorMacro(SpecularColor,double,3);
void SetColor(double, double, double);
void SetColor(double a[3]) { this->SetColor(a[0], a[1], a[2]); }
void GetColor(double rgb[3]);
double *GetColor();
// Description:
// Set/Get the position of the light.
// Note: The position of the light is defined in the coordinate
// space indicated by its transformation matrix (if it exists).
// Thus, to get the light's world space position, use
// vtkGetTransformedPosition() instead of vtkGetPosition().
vtkSetVector3Macro(Position,double);
vtkGetVectorMacro(Position,double,3);
void SetPosition(float *a) {this->SetPosition(a[0],a[1],a[2]);};
// Description:
// Set/Get the point at which the light is shining.
// Note: The focal point of the light is defined in the coordinate
// space indicated by its transformation matrix (if it exists).
// Thus, to get the light's world space focal point, use
// vtkGetTransformedFocalPoint() instead of vtkGetFocalPoint().
vtkSetVector3Macro(FocalPoint,double);
vtkGetVectorMacro(FocalPoint,double,3);
void SetFocalPoint(float *a) {this->SetFocalPoint(a[0],a[1],a[2]);};
// Description:
// Set/Get the brightness of the light (from one to zero).
vtkSetMacro(Intensity,double);
vtkGetMacro(Intensity,double);
// Description:
// Turn the light on or off.
vtkSetMacro(Switch,int);
vtkGetMacro(Switch,int);
vtkBooleanMacro(Switch,int);
// Description:
// Turn positional lighting on or off.
vtkSetMacro(Positional,int);
vtkGetMacro(Positional,int);
vtkBooleanMacro(Positional,int);
// Description:
// Set/Get the exponent of the cosine used in positional lighting.
vtkSetMacro(Exponent,double);
vtkGetMacro(Exponent,double);
// Description:
// Set/Get the lighting cone angle of a positional light in degrees.
// A value of 180 indicates that you want no spot lighting effects
// just a positional light.
vtkSetMacro(ConeAngle,double);
vtkGetMacro(ConeAngle,double);
// Description:
// Set/Get the quadratic attenuation constants. They are specified as
// constant, linear, and quadratic, in that order.
vtkSetVector3Macro(AttenuationValues,double);
vtkGetVectorMacro(AttenuationValues,double,3);
// Description:
// Set/Get the light's transformation matrix. If a matrix is set for
// a light, the light's parameters (position and focal point) are
// transformed by the matrix before being rendered.
virtual void SetTransformMatrix(vtkMatrix4x4*);
vtkGetObjectMacro(TransformMatrix,vtkMatrix4x4);
// Description:
// Get the position of the light, modified by the transformation matrix
// (if it exists).
void GetTransformedPosition(double &a0, double &a1, double &a2);
void GetTransformedPosition(double a[3]);
double *GetTransformedPosition();
// Description:
// Get the focal point of the light, modified by the transformation matrix
// (if it exists).
void GetTransformedFocalPoint(double &a0, double &a1, double &a2);
void GetTransformedFocalPoint(double a[3]);
double *GetTransformedFocalPoint();
// Description:
// Set the position and focal point of a light based on elevation and
// azimuth. The light is moved so it is shining from the given angle.
// Angles are given in degrees. If the light is a
// positional light, it is made directional instead.
void SetDirectionAngle(double elevation, double azimuth);
void SetDirectionAngle(double ang[2]) {
this->SetDirectionAngle(ang[0], ang[1]); };
// Description:
// Perform deep copy of this light.
void DeepCopy(vtkLight *light);
// Description:
// Set/Get the type of the light.
// A SceneLight is a light located in the world coordinate space. A light
// is initially created as a scene light.
//
// A Headlight is always located at the camera and is pointed at the
// camera's focal point. The renderer is free to modify the position and
// focal point of the camera at any time.
//
// A CameraLight is also attached to the camera, but is not necessarily
// located at the camera's position. CameraLights are defined in a
// coordinate space where the camera is located at (0, 0, 1), looking
// towards (0, 0, 0) at a distance of 1, with up being (0, 1, 0).
//
// Note: Use SetLightTypeToSceneLight, rather than SetLightType(3), since
// the former clears the light's transform matrix.
vtkSetMacro(LightType, int);
vtkGetMacro(LightType, int);
void SetLightTypeToHeadlight()
{this->SetLightType(VTK_LIGHT_TYPE_HEADLIGHT);}
void SetLightTypeToSceneLight()
{
this->SetTransformMatrix(NULL);
this->SetLightType(VTK_LIGHT_TYPE_SCENE_LIGHT);
}
void SetLightTypeToCameraLight()
{this->SetLightType(VTK_LIGHT_TYPE_CAMERA_LIGHT);}
// Description:
// Query the type of the light.
int LightTypeIsHeadlight();
int LightTypeIsSceneLight();
int LightTypeIsCameraLight();
void ReadSelf(istream& is);
void WriteSelf(ostream& os);
protected:
vtkLight();
~vtkLight();
double FocalPoint[3];
double Position[3];
double Intensity;
double AmbientColor[3];
double DiffuseColor[3];
double SpecularColor[3];
int Switch;
int Positional;
double Exponent;
double ConeAngle;
double AttenuationValues[3];
vtkMatrix4x4 *TransformMatrix;
double TransformedFocalPointReturn[3];
double TransformedPositionReturn[3];
int LightType;
private:
vtkLight(const vtkLight&); // Not implemented.
void operator=(const vtkLight&); // Not implemented.
};
#endif