Light.cpp

Go to the documentation of this file.
00001 #include "Light.h"
00002 #include "State.h"
00003 
00004 using namespace Fluxus;
00005 
00006 Light::Light() :
00007 m_Index(0),
00008 m_Ambient(0.2,0.2,0.2),
00009 m_Diffuse(1,1,1),
00010 m_Specular(1,1,1),
00011 m_Position(0,0,0),
00012 m_Direction(0,0,0),
00013 m_Type(POINT),
00014 m_CameraLock(false)
00015 {
00016 }
00017 
00018 Light::~Light() 
00019 {
00020     glDisable(GL_LIGHT0+m_Index);
00021 }
00022 
00023 void Light::SetIndex(int s) 
00024 { 
00025     m_Index=s; 
00026     glEnable(GL_LIGHT0+m_Index); 
00027 }
00028 
00029 void Light::SetAmbient(dColour s)  
00030 { 
00031     glLightfv(GL_LIGHT0+m_Index, GL_AMBIENT,  s.arr()); 
00032 }
00033 
00034 void Light::SetDiffuse(dColour s)  
00035 { 
00036     glLightfv(GL_LIGHT0+m_Index, GL_DIFFUSE,  s.arr()); 
00037 }
00038 
00039 void Light::SetSpecular(dColour s) 
00040 { 
00041     glLightfv(GL_LIGHT0+m_Index, GL_SPECULAR,  s.arr()); 
00042 }
00043 
00044 void Light::SetSpotAngle(float s) 
00045 { 
00046     if (m_Type==SPOT) glLightf(GL_LIGHT0+m_Index, GL_SPOT_CUTOFF,  s); 
00047 }
00048 
00049 void Light::SetSpotExponent(float s) 
00050 { 
00051     if (m_Type==SPOT) glLightf(GL_LIGHT0+m_Index, GL_SPOT_EXPONENT,  s); 
00052 }
00053 
00054 void Light::SetPosition(dVector s) 
00055 { 
00056     m_Position=s; 
00057 }
00058 
00059 void Light::SetAttenuation(int type, float s)
00060 {
00061     switch (type)
00062     {
00063         case 0: glLightf(GL_LIGHT0+m_Index, GL_CONSTANT_ATTENUATION, s); break;
00064         case 1: glLightf(GL_LIGHT0+m_Index, GL_LINEAR_ATTENUATION, s); break;
00065         case 2: glLightf(GL_LIGHT0+m_Index, GL_QUADRATIC_ATTENUATION, s); break;
00066     }
00067 }
00068 
00069 void Light::SetDirection(dVector s) 
00070 { 
00071     m_Direction=s; 
00072 }
00073 
00074 
00075 void Light::Render()
00076 {
00077     glPushMatrix();
00078     glTranslatef(m_Position.x,m_Position.y,m_Position.z);
00079     
00080     if (m_Type==DIRECTIONAL)
00081     {
00082         float pos[4] = { m_Direction.x,m_Direction.y,m_Direction.z,0 };
00083         glLightfv(GL_LIGHT0+m_Index, GL_POSITION, pos);
00084     }
00085     else
00086     {
00087         if (m_Type==SPOT)
00088         {
00089             float pos[4] = { m_Direction.x,m_Direction.y,m_Direction.z,1 };
00090             glLightfv(GL_LIGHT0+m_Index, GL_SPOT_DIRECTION, pos);
00091         }
00092         
00093         float pos[4] = { 0,0,0,1 };
00094         glLightfv(GL_LIGHT0+m_Index, GL_POSITION, pos);
00095     }
00096     
00097     glPopMatrix();  
00098 }
00099 

Generated on Tue Sep 4 23:22:18 2007 for The Fluxus Renderer (libfluxus) by  doxygen 1.5.1