Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/lib/graphics/light.h @ 9701

Last change on this file since 9701 was 9685, checked in by bensch, 18 years ago

adapted many classes to the new ClassID System, now comes the hard part… Scripting… then Network… wow this will be so bad :/

File size: 4.3 KB
Line 
1/*!
2* @file light.h
3*  Handles Lights.
4
5A Light is one of the more important things in a 3D-environment,
6without it one sees nothing :)
7It is here for diffuse-, specular- and Bump-Mappings.
8*/
9
10#ifndef _LIGHT_H
11#define _LIGHT_H
12
13#include "p_node.h"
14#include "glincl.h"
15
16//! The maximum number of Lights this OpenGL-implementation supports.
17#define NUMBEROFLIGHTS GL_MAX_LIGHTS
18
19
20// FORWARD DECLARATIONS //
21class Vector;
22class TiXmlElement;
23
24//! A class that handles Lights. The LightManager operates on this.
25class Light : public PNode
26{
27  NewObjectListDeclaration(Light);
28public:
29  Light(const TiXmlElement* root = NULL);
30  virtual ~Light();
31
32  virtual void loadParams(const TiXmlElement* root);
33
34  void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b);
35  void setSpecularColor(GLfloat r, GLfloat g, GLfloat b);
36  void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation);
37  void setSpotDirection(const Vector& direction);
38  void setSpotDirection(float x, float y, float z) { setSpotDirection(Vector(x,y,z)); };
39  void setSpotCutoff(GLfloat cutoff);
40
41  /** @returns the lightNumber*/
42  int getLightNumber() const {return this->lightNumber;}
43
44  virtual void draw() const;
45
46  void debug() const;
47
48  // attributes
49private:
50  int              lightNumber;               //!< The number of this Light.
51  GLfloat          diffuseColor[4];           //!< The Diffuse Color this Light emmits.
52  GLfloat          specularColor[4];          //!< The specular Color of this Light.
53  float            constantAttenuation;       //!< The Factor of the the Constant Attenuation.
54  float            linearAttenuation;         //!< The Factor of the the Linear Attenuation.
55  float            quadraticAttenuation;      //!< The Factor of the the Quadratic Attenuation.
56  GLfloat          spotDirection[4];          //!< The direction of the Spot Light.
57  GLfloat          spotCutoff;                //!< The cutoff Angle of the Light Source
58};
59
60
61
62//! A class that handles Lights
63/**
64A Light is a source that emits light rays (photons)
65
66<b>Usage:</b>\n
67First you have to get the Light Manager up and running by using LightManager::getInstance().
68This automatically initiates the GL_LIGHTING, and sets some default stuff about the light.\n
69Then you will create a new light using:
70\li new Light();
71
72if you want to operate on this Light just apply the following functions onto it.
73(You can also optain the Light-pointer with LightManager::getInstance()->getLight(lightNumber))
74
75now you can operate on the light as follows:
76\li void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b);
77\li void setSpecularColor(GLfloat r, GLfloat g, GLfloat b);
78\li void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation);
79\li void setSpotDirection(Vector direction);
80\li void setSpotCutoff(GLfloat cutoff);
81\li all PNode stuff also works
82
83To redraw the light use
84\li void draw() const; (this is automatically done by the LightManager)
85
86for some nice output just use:
87\li void debug() const; (either on LightManager for a resume or on any Light for single information.)
88*/
89class LightManager : public BaseObject
90{
91  NewObjectListDeclaration(LightManager);
92
93  friend class Light;
94public:
95  virtual ~LightManager();
96  /** @returns a Pointer to the only object of this Class */
97  inline static LightManager* getInstance() { if (!singletonRef) singletonRef = new LightManager();  return singletonRef; };
98
99  virtual void loadParams(const TiXmlElement* root);
100  void loadLights(const TiXmlElement* root);
101
102  void setAmbientColor(GLfloat r, GLfloat g, GLfloat b);
103  // HACK: Assuming r = g = b values
104inline GLfloat getAmbientColor() {  return this->ambientColor[0]; }
105
106  Light* getLight(int lightNumber) const;
107  inline Light* getLight() const { return this->currentLight; };
108
109  void draw() const;
110
111  void debug() const;
112
113private:
114  LightManager();
115
116  int  registerLight(Light* light);
117  void unregisterLight(Light* light);
118
119private:
120  static LightManager*    singletonRef;       //!< This is the LightHandlers Reference.
121  GLfloat                 ambientColor[4];    //!< The ambient Color of the scene.
122
123  Light**                 lights;             //!< An array of Lenght NUMBEROFLIGHTS, that holds pointers to all LightValues.
124  Light*                  currentLight;       //!< The current Light, we are working with.
125
126};
127
128#endif /* _LIGHT_H */
Note: See TracBrowser for help on using the repository browser.