You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.0 KiB
C
113 lines
3.0 KiB
C
|
3 weeks ago
|
/*=========================================================================
|
||
|
|
|
||
|
|
Program: Visualization Toolkit
|
||
|
|
Module: vtkOpenGLLightMonitor
|
||
|
|
|
||
|
|
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.
|
||
|
|
|
||
|
|
=========================================================================*/
|
||
|
|
/**
|
||
|
|
* @class vtkOpenGLLightMonitor
|
||
|
|
* tracks state of OpenGL model-view and projection matrices.
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* vtkOpenGLLightMonitor -- A helper for painters that
|
||
|
|
* tracks state of OpenGL lights. A Painter could use this
|
||
|
|
* to skip expensive processing that is only needed when
|
||
|
|
* lights change.
|
||
|
|
*
|
||
|
|
* this is not intended to be shared. each object should use it's
|
||
|
|
* own instance of this class. it's intended to be called once per
|
||
|
|
* render.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef vtkOpenGLLightMonitor_h
|
||
|
|
#define vtkOpenGLLightMonitor_h
|
||
|
|
|
||
|
|
#include "vtkRenderingOpenGLModule.h" // for export macro
|
||
|
|
#include "vtkObject.h"
|
||
|
|
|
||
|
|
class VTKRENDERINGOPENGL_EXPORT vtkOpenGLLightMonitor : public vtkObject
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
static vtkOpenGLLightMonitor* New();
|
||
|
|
static vtkOpenGLLightMonitor *New(int lightId);
|
||
|
|
vtkTypeMacro(vtkOpenGLLightMonitor, vtkObject);
|
||
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the light id of the OpenGL light to track. The
|
||
|
|
* light id must be set prior to use. Default value 0.
|
||
|
|
*/
|
||
|
|
vtkSetMacro(LightId, int);
|
||
|
|
vtkGetMacro(LightId, int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetches the current GL state and updates the
|
||
|
|
* internal copies of the data. returns true if
|
||
|
|
* any of the tracked OpenGL lights have changed.
|
||
|
|
* Typically this is the only function a user needs
|
||
|
|
* to call.
|
||
|
|
*/
|
||
|
|
bool StateChanged();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Fetch and save OpenGL light state. Note,
|
||
|
|
* this is done automatically in SateChanged.
|
||
|
|
*/
|
||
|
|
void Update();
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Setters for internal state.
|
||
|
|
*/
|
||
|
|
void SetEnabled(int val);
|
||
|
|
void SetAmbient(float *val);
|
||
|
|
void SetDiffuse(float *val);
|
||
|
|
void SetSpecular(float *val);
|
||
|
|
void SetPosition(float *val);
|
||
|
|
void SetSpotDirection(float *val);
|
||
|
|
void SetSpotExponent(float val);
|
||
|
|
void SetSpotCutoff(float val);
|
||
|
|
void SetAttenuation(float *val);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
private:
|
||
|
|
vtkOpenGLLightMonitor(int lightId) : LightId(lightId), UpTime(0)
|
||
|
|
{ this->Initialize(); }
|
||
|
|
|
||
|
|
vtkOpenGLLightMonitor() : LightId(0), UpTime(0)
|
||
|
|
{ this->Initialize(); }
|
||
|
|
|
||
|
|
~vtkOpenGLLightMonitor(){}
|
||
|
|
|
||
|
|
void Initialize();
|
||
|
|
|
||
|
|
private:
|
||
|
|
int LightId;
|
||
|
|
int Enabled;
|
||
|
|
float Ambient[4];
|
||
|
|
float Diffuse[4];
|
||
|
|
float Specular[4];
|
||
|
|
float Position[4];
|
||
|
|
float SpotDirection[3];
|
||
|
|
float SpotExponent;
|
||
|
|
float SpotCutoff;
|
||
|
|
float Attenuation[3];
|
||
|
|
long long UpTime;
|
||
|
|
|
||
|
|
private:
|
||
|
|
vtkOpenGLLightMonitor(const vtkOpenGLLightMonitor &) VTK_DELETE_FUNCTION;
|
||
|
|
void operator=(const vtkOpenGLLightMonitor &) VTK_DELETE_FUNCTION;
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif
|