TAPs 0.7.7.3
TAPsOpenGLLightModel.cpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsOpenGLLightModel.hpp
00003 
00004 Light Model for OpenGL
00005 
00006 SUKITTI PUNAK   (05/12/2006)
00007 UPDATE          (05/14/2006)
00008 ******************************************************************************/
00009 #include "TAPsOpenGLLightModel.hpp"
00010 // Using Inclusion Model (i.e. definitions are included in declarations)
00011 //                       (this name.cpp is included in name.hpp)
00012 // Each friend is defined directly inside its declaration.
00013 
00014 BEGIN_NAMESPACE_TAPs__OpenGL
00015 //=============================================================================
00016 template <typename T> GLint     OpenGLLightModel<T>::g_iGLMaxLights = 0;
00017 template <typename T> GLuint    OpenGLLightModel<T>::g_uiGLDisplayList = 0;
00018 template <typename T> int       OpenGLLightModel<T>::g_iTotalLights = 0;
00019 //=============================================================================
00020 // Constructor(s) and Destructor
00021 //-----------------------------------------------------------------------------
00022 template <typename T>
00023 OpenGLLightModel<T>::OpenGLLightModel ()
00024     : m_bOn( false )
00025 {
00026     if ( g_iGLMaxLights == 0 )  SetGLMaxLights();
00027     SetDefaultValues();
00028     ++g_iTotalLights;
00029 }
00030 //-----------------------------------------------------------------------------
00031 template <typename T>
00032 OpenGLLightModel<T>::OpenGLLightModel (
00033             T lightNumber,                                      // light#
00034             T ambientR,  T ambientG,  T ambientB,  T ambientA,  // ambient
00035             T diffuseR,  T diffuseG,  T diffuseB,  T diffuseA,  // diffuse
00036             T specularR, T specularG, T specularB, T specularA, // specular
00037             T positionX, T positionY, T positionZ, T positionW, // position
00038             T spotDirectionX = 0,       // spot direction x
00039             T spotDirectionY = 0,       // spot direction y
00040             T spotDirectionZ = -1,      // spot direction z
00041             T spotExponent = 0,         // spot exponent
00042             T spotCutoff = 180,         // spot cutoff
00043             T constantAttenuation = 1,  // constant attenuation
00044             T linearAttenuation = 0,    // linear attenuation
00045             T QuadraticAttenuation = 0  // quadratic attenuation
00046 )   : m_bOn( false )
00047 {
00048     if ( g_iGLMaxLights == 0 )  SetGLMaxLights();
00049     //-----------------------------------------------------
00050     SetGLLightNumber( lightNumber );
00051     //-----------------------------------------------------
00052     m_v4Ambient.SetXYZW( ambientR, ambientG, ambientB, ambientA );
00053     m_v4Diffuse.SetXYZW( diffuseR, diffuseG, diffuseB, diffuseA );
00054     m_v4Specular.SetXYZW( specularR, specularG, specularB, specularA );
00055     m_v4Position.SetXYZW( positionX, specularY, specularZ, specularW );
00056     //-------------------------------------------
00057     m_v3SpotDirection.SetXYZ( spotDirectionX, spotDirectionY, spotDirectionZ );
00058     m_tSpotExponent = spotExponent;
00059     m_tSpotCutoff   = spotCutoff;
00060     //-------------------------------------------
00061     m_tConstantAttenuation  = constantAttenuation;
00062     m_tLinearAttenuation    = linearAttenuation;
00063     m_tQuadraticAttenuation = quadraticAttenuation;
00064     //-----------------------------------------------------
00065     ++g_iTotalLights;
00066 }
00067 //-----------------------------------------------------------------------------
00068 template <typename T>
00069 OpenGLLightModel<T>::~OpenGLLightModel ()
00070 {
00071     Disable();
00072     --g_iTotalLights;
00073 }
00074 //-----------------------------------------------------------------------------
00075 //=============================================================================
00076 
00077 //=============================================================================
00078 // Get/Set Function(s)
00079 //-----------------------------------------------------------------------------
00080 // Enable/Disable <==> On/Off
00081 //-----------------------------------------------------------------------------
00082 template <typename T>
00083 void OpenGLLightModel<T>::Enable ()
00084 {
00085     m_bOn = true;
00086     //-----------------------------------------------------
00087 //  glLightfv( m_eGLLightNumber, GL_AMBIENT, m_v4Ambient.GetDataFloat() );
00088 //  glLightfv( m_eGLLightNumber, GL_DIFFUSE, m_v4Diffuse.GetDataFloat() );
00089 //  glLightfv( m_eGLLightNumber, GL_SPECULAR, m_v4Specular.GetDataFloat() );
00090 //  glLightfv( m_eGLLightNumber, GL_POSITION, m_v4Position.GetDataFloat() );
00091 //  glLightfv( m_eGLLightNumber, GL_SPOT_DIRECTION, 
00092 //             m_v3SpotDirection.GetDataFloat() );
00093 //  glLightf( m_eGLLightNumber, GL_SPOT_EXPONENT, m_tSpotExponent );
00094 //  glLightf( m_eGLLightNumber, GL_SPOT_CUTOFF, m_tSpotCutoff );
00095 //  glLightf( m_eGLLightNumber, GL_CONSTANT_ATTENUATION, 
00096 //            m_tConstantAttenuation );
00097 //  glLightf( m_eGLLightNumber, GL_LINEAR_ATTENUATION, 
00098 //            m_tLinearAttenuation );
00099 //  glLightf( m_eGLLightNumber, GL_QUADRATIC_ATTENUATION, 
00100 //            m_tQuadraticAttenuation );
00101     //-----------------------------------------------------
00102     glEnable( m_eGLLightNumber );
00103 }
00104 //-----------------------------------------------------------------------------
00105 template <typename T>
00106 void OpenGLLightModel<T>::Disable ()
00107 {
00108     m_bOn = false;
00109     glDisable( m_eGLLightNumber );
00110 }
00111 //-----------------------------------------------------------------------------
00112 template <typename T>
00113 void OpenGLLightModel<T>::Switch ( bool on )
00114 {
00115     m_bOn = on;
00116     if ( m_bOn ) {
00117         Enable();
00118     }
00119     else {
00120         Disable();
00121     }
00122 }
00123 //-----------------------------------------------------------------------------
00124 template <typename T>
00125 void OpenGLLightModel<T>::ToggleSwitch ()
00126 {
00127     Switch( !m_bOn );
00128 }
00129 //-----------------------------------------------------------------------------
00130 template <typename T>
00131 bool OpenGLLightModel<T>::IsOn () const
00132 {
00133     return m_bOn;
00134 }
00135 //-----------------------------------------------------------------------------
00136 template <typename T>
00137 bool OpenGLLightModel<T>::IsEnabled () const
00138 {
00139     return m_bOn;
00140 }
00141 //-----------------------------------------------------------------------------
00142 // GL_LIGHTi; 0 <= i < GL_MAX_LIGHTS
00143 //-----------------------------------------------------------------------------
00144 template <typename T>
00145 void OpenGLLightModel<T>::SetGLLightNumber ( int n )
00146 {
00147     GLenum eGL = static_cast<GLint>(n) + GL_LIGHT0;
00148     SetGLLightNumber( eGL );
00149 }
00150 //-----------------------------------------------------------------------------
00151 template <typename T>
00152 void OpenGLLightModel<T>::SetGLLightNumber ( GLenum eGL )
00153 {
00154     if ( eGL < GL_LIGHT0 )  eGL = GL_LIGHT0;
00155     GLenum eMaxLightNumber = GL_LIGHT0 + g_iGLMaxLights - 1;
00156     if ( eGL > eMaxLightNumber )    eGL = eMaxLightNumber;
00157     m_eGLLightNumber = eGL;
00158 }
00159 //-----------------------------------------------------------------------------
00160 template <typename T>
00161 int OpenGLLightModel<T>::GetGLLightNumber () const
00162 {
00163     return m_eGLLightNumber - GL_LIGHT0;
00164 }
00165 //-----------------------------------------------------------------------------
00166 // Light Ambient    [-1,1]
00167 //   (Default: (0,0,0,1))
00168 //-----------------------------------------------------------------------------
00169 template <typename T>
00170 void OpenGLLightModel<T>::SetAmbient ( const Vector4<T> & v )
00171 {
00172     m_v4Ambient.SetXYZW( v );
00173     glLightfv( m_eGLLightNumber, GL_AMBIENT, m_v4Ambient.GetDataFloat() );
00174 }
00175 //-----------------------------------------------------------------------------
00176 template <typename T>
00177 void OpenGLLightModel<T>::SetAmbient ( const Vector3<T> & v )
00178 {
00179     m_v4Ambient.SetXYZ( v );
00180     glLightfv( m_eGLLightNumber, GL_AMBIENT, m_v4Ambient.GetDataFloat() );
00181 }
00182 //-----------------------------------------------------------------------------
00183 template <typename T>
00184 void OpenGLLightModel<T>::SetAmbient ( T r, T g, T b, T a )
00185 {
00186     m_v4Ambient.SetXYZW( r, g, b, a );
00187     glLightfv( m_eGLLightNumber, GL_AMBIENT, m_v4Ambient.GetDataFloat() );
00188 }
00189 //-----------------------------------------------------------------------------
00190 template <typename T>
00191 void OpenGLLightModel<T>::SetAmbient ( T r, T g, T b )
00192 {
00193     m_v4Ambient.SetXYZ( r, g, b );
00194     glLightfv( m_eGLLightNumber, GL_AMBIENT, m_v4Ambient.GetDataFloat() );
00195 }
00196 //-----------------------------------------------------------------------------
00197 template <typename T>
00198 const Vector4<T> & OpenGLLightModel<T>::GetAmbient () const
00199 {
00200     return m_v4Ambient;
00201 }
00202 //-----------------------------------------------------------------------------
00203 // Light Diffuse    [-1,1]
00204 //   (Default: (1,1,1,1)) for GL_LIGHT0
00205 //   (Default: (0,0,0,0)) for other
00206 //-----------------------------------------------------------------------------
00207 template <typename T>
00208 void OpenGLLightModel<T>::SetDiffuse ( const Vector4<T> & v )
00209 {
00210     m_v4Diffuse.SetXYZW( v );
00211     glLightfv( m_eGLLightNumber, GL_DIFFUSE, m_v4Diffuse.GetDataFloat() );
00212 }
00213 //-----------------------------------------------------------------------------
00214 template <typename T>
00215 void OpenGLLightModel<T>::SetDiffuse ( const Vector3<T> & v )
00216 {
00217     m_v4Diffuse.SetXYZ( v );
00218     glLightfv( m_eGLLightNumber, GL_DIFFUSE, m_v4Diffuse.GetDataFloat() );
00219 }
00220 //-----------------------------------------------------------------------------
00221 template <typename T>
00222 void OpenGLLightModel<T>::SetDiffuse ( T r, T g, T b, T a )
00223 {
00224     m_v4Diffuse.SetXYZW( r, g, b, a );
00225     glLightfv( m_eGLLightNumber, GL_DIFFUSE, m_v4Diffuse.GetDataFloat() );
00226 }
00227 //-----------------------------------------------------------------------------
00228 template <typename T>
00229 void OpenGLLightModel<T>::SetDiffuse ( T r, T g, T b )
00230 {
00231     m_v4Diffuse.SetXYZ( r, g, b );
00232     glLightfv( m_eGLLightNumber, GL_DIFFUSE, m_v4Diffuse.GetDataFloat() );
00233 }
00234 //-----------------------------------------------------------------------------
00235 template <typename T>
00236 const Vector4<T> & OpenGLLightModel<T>::GetDiffuse () const
00237 {
00238     return m_v4Diffuse;
00239 }
00240 //-----------------------------------------------------------------------------
00241 // Light Specular   [-1,1]
00242 //   (Default: (1,1,1,1)) for GL_LIGHT0
00243 //   (Default: (0,0,0,0)) for other
00244 //-----------------------------------------------------------------------------
00245 template <typename T>
00246 void OpenGLLightModel<T>::SetSpecular ( const Vector4<T> & v )
00247 {
00248     m_v4Specular.SetXYZW( v );
00249     glLightfv( m_eGLLightNumber, GL_SPECULAR, m_v4Specular.GetDataFloat() );
00250 }
00251 //-----------------------------------------------------------------------------
00252 template <typename T>
00253 void OpenGLLightModel<T>::SetSpecular ( const Vector3<T> & v )
00254 {
00255     m_v4Specular.SetXYZ( v );
00256     glLightfv( m_eGLLightNumber, GL_SPECULAR, m_v4Specular.GetDataFloat() );
00257 }
00258 //-----------------------------------------------------------------------------
00259 template <typename T>
00260 void OpenGLLightModel<T>::SetSpecular ( T r, T g, T b, T a )
00261 {
00262     m_v4Specular.SetXYZW( r, g, b, a );
00263     glLightfv( m_eGLLightNumber, GL_SPECULAR, m_v4Specular.GetDataFloat() );
00264 }
00265 //-----------------------------------------------------------------------------
00266 template <typename T>
00267 void OpenGLLightModel<T>::SetSpecular ( T r, T g, T b )
00268 {
00269     m_v4Specular.SetXYZ( r, g, b );
00270     glLightfv( m_eGLLightNumber, GL_SPECULAR, m_v4Specular.GetDataFloat() );
00271 }
00272 //-----------------------------------------------------------------------------
00273 template <typename T>
00274 const Vector4<T> & OpenGLLightModel<T>::GetSpecular () const
00275 {
00276     return m_v4Specular;
00277 }
00278 //-----------------------------------------------------------------------------
00279 // Light Position   (Default: (0,0,1,0))
00280 //-----------------------------------------------------------------------------
00281 template <typename T>
00282 void OpenGLLightModel<T>::SetPosition ( const Vector4<T> & v )
00283 {
00284     m_v4Position.SetXYZW( v );
00285     glLightfv( m_eGLLightNumber, GL_POSITION, m_v4Position.GetDataFloat() );
00286 }
00287 //-----------------------------------------------------------------------------
00288 template <typename T>
00289 void OpenGLLightModel<T>::SetPosition ( const Vector3<T> & v )
00290 {
00291     m_v4Position.SetXYZ( v );
00292     glLightfv( m_eGLLightNumber, GL_POSITION, m_v4Position.GetDataFloat() );
00293 }
00294 //-----------------------------------------------------------------------------
00295 template <typename T>
00296 void OpenGLLightModel<T>::SetPosition ( T x, T y, T z, T w )
00297 {
00298     m_v4Position.SetXYZW( x, y, z, w );
00299     glLightfv( m_eGLLightNumber, GL_POSITION, m_v4Position.GetDataFloat() );
00300 }
00301 //-----------------------------------------------------------------------------
00302 template <typename T>
00303 void OpenGLLightModel<T>::SetPosition ( T x, T y, T z )
00304 {
00305     m_v4Position.SetXYZ( x, y, z );
00306     glLightfv( m_eGLLightNumber, GL_POSITION, m_v4Position.GetDataFloat() );
00307 }
00308 //-----------------------------------------------------------------------------
00309 template <typename T>
00310 const Vector4<T> & OpenGLLightModel<T>::GetPosition () const
00311 {
00312     return m_v4Position;
00313 }
00314 //-----------------------------------------------------------------------------
00315 // Light Spot Direction (Default: (0,0,-1))
00316 //-----------------------------------------------------------------------------
00317 template <typename T>
00318 void OpenGLLightModel<T>::SetSpotDirection ( const Vector3<T> & v )
00319 {
00320     m_v3SpotDirection.SetXYZ( v );
00321     glLightfv( m_eGLLightNumber, GL_SPOT_DIRECTION, 
00322                m_v3SpotDirection.GetDataFloat() );
00323 }
00324 //-----------------------------------------------------------------------------
00325 template <typename T>
00326 void OpenGLLightModel<T>::SetSpotDirection ( T x, T y, T z )
00327 {
00328     m_v3SpotDirection.SetXYZ( x, y, z );
00329     glLightfv( m_eGLLightNumber, GL_SPOT_DIRECTION, 
00330                m_v3SpotDirection.GetDataFloat() );
00331 }
00332 //-----------------------------------------------------------------------------
00333 template <typename T>
00334 const Vector3<T> & OpenGLLightModel<T>::GetSpotDirection () const
00335 {
00336     return m_v3SpotDirection;
00337 }
00338 //-----------------------------------------------------------------------------
00339 // Light Spot Exponent [0,128] (Default: 0)
00340 //-----------------------------------------------------------------------------
00341 template <typename T>
00342 void OpenGLLightModel<T>::SetSpotExponent ( T t )
00343 {
00344     m_tSpotExponent = t;
00345     glLightf( m_eGLLightNumber, GL_SPOT_EXPONENT, m_tSpotExponent );
00346 }
00347 //-----------------------------------------------------------------------------
00348 template <typename T>
00349 T OpenGLLightModel<T>::GetSpotExponent () const
00350 {
00351     return m_tSpotExponent;
00352 }
00353 //-----------------------------------------------------------------------------
00354 // Light Spot Cutoff [0,90] & 180 (Default: 180)
00355 //-----------------------------------------------------------------------------
00356 template <typename T>
00357 void OpenGLLightModel<T>::SetSpotCutoff ( T t )
00358 {
00359     m_tSpotCutoff = t;
00360     glLightf( m_eGLLightNumber, GL_SPOT_CUTOFF, m_tSpotCutoff );
00361 }
00362 //-----------------------------------------------------------------------------
00363 template <typename T>
00364 T OpenGLLightModel<T>::GetSpotCutoff () const
00365 {
00366     return m_tSpotCutoff;
00367 }
00368 //-----------------------------------------------------------------------------
00369 // Light Constant Attenuation  (Default: 1)
00370 //-----------------------------------------------------------------------------
00371 template <typename T>
00372 void OpenGLLightModel<T>::SetAttenuationConstant ( T t )
00373 {
00374     m_tConstantAttenuation = t;
00375     glLightf( m_eGLLightNumber, GL_CONSTANT_ATTENUATION, 
00376               m_tConstantAttenuation );
00377 }
00378 //-----------------------------------------------------------------------------
00379 template <typename T>
00380 T OpenGLLightModel<T>::GetAttenuationConstant () const
00381 {
00382     return m_tConstantAttenuation;
00383 }
00384 //-----------------------------------------------------------------------------
00385 // Light Linear Attenuation    (Default: 0)
00386 //-----------------------------------------------------------------------------
00387 template <typename T>
00388 void OpenGLLightModel<T>::SetAttenuationLinear ( T t )
00389 {
00390     m_tLinearAttenuation = t;
00391     glLightf( m_eGLLightNumber, GL_LINEAR_ATTENUATION, 
00392               m_tLinearAttenuation );
00393 }
00394 //-----------------------------------------------------------------------------
00395 template <typename T>
00396 T OpenGLLightModel<T>::GetAttenuationLinear () const
00397 {
00398     return m_tLinearAttenuation;
00399 }
00400 //-----------------------------------------------------------------------------
00401 // Light Quadratic Attenuation (Default: 0)
00402 //-----------------------------------------------------------------------------
00403 template <typename T>
00404 void OpenGLLightModel<T>::SetAttenuationQuadratic ( T t )
00405 {
00406     m_tQuadraticAttenuation = t;
00407     glLightf( m_eGLLightNumber, GL_QUADRATIC_ATTENUATION, 
00408               m_tQuadraticAttenuation );
00409 }
00410 //-----------------------------------------------------------------------------
00411 template <typename T>
00412 T OpenGLLightModel<T>::GetAttenuationQuadratic () const
00413 {
00414     return m_tQuadraticAttenuation;
00415 }
00416 //-----------------------------------------------------------------------------
00417 //=============================================================================
00418 
00419 /*
00420 //=============================================================================
00421 // Shadow Function(s)
00422 //-----------------------------------------------------------------------------
00423 template <typename T>
00424 void OpenGLLightModel<T>::GenerateShadowMap ( 
00425     //void (*DrawModels)( Enum::DrawMode DM ), 
00426     void (*DrawModels)(), 
00427     //OpenGLModelManager<T> obj, 
00428     //void (OpenGLModelManager<T>::*DrawModels)(), 
00429     T tDistance, int shadowSize )
00430 {
00431     T   tNearPlane, tFarPlane, tFOV;
00432     GLfloat matrixLightModelView[16], matrixLightProjection[16];
00433     Vector3<T>  vPosition, vPointAt;
00434     //---------------------------------------------------------------
00435     if ( m_v4Position[4] != MATH<T>::Zero ) {
00436         vPosition[0] = m_v4Position[0] / m_v4Position[4];
00437         vPosition[1] = m_v4Position[1] / m_v4Position[4];
00438         vPosition[2] = m_v4Position[2] / m_v4Position[4];
00439     }
00440     else {
00441         vPosition[0] = m_v4Position[0] / 0.000001;
00442         vPosition[1] = m_v4Position[1] / 0.000001;
00443         vPosition[2] = m_v4Position[2] / 0.000001;
00444     }
00445     vPointAt[0] = ( vPosition[0] + m_v3SpotDirection[0] ) * tDistance;
00446     vPointAt[1] = ( vPosition[1] + m_v3SpotDirection[1] ) * tDistance;
00447     vPointAt[2] = ( vPosition[2] + m_v3SpotDirection[2] ) * tDistance;
00448     tNearPlane = 0; // = tToSceneDistance - 0;
00449     tFarPlane  = tDistance * 2;
00450     tFOV = 17000.0f / tDistance;
00451     //---------------------------------------------------------------
00452     glPushAttrib( GL_ALL_ATTRIB_BITS );
00453     glPushMatrix();
00454         glMatrixMode( GL_PROJECTION );
00455         glLoadIdentity();
00456         gluPerspective( tFOV, 1.0f, tNearPlane, tFarPlane );
00457         glGetFloatv( GL_PROJECTION_MATRIX, matrixLightProjection );
00458         glPushMatrix();
00459             glMatrixMode( GL_MODELVIEW );
00460             glLoadIdentity();
00461             gluLookAt(  vPosition[0], vPosition[1], vPosition[2], 
00462                         vPointAt[0], vPointAt[1], vPointAt[2], 
00463                         0, 1, 0 );
00464             glGetFloatv( GL_MODELVIEW_MATRIX, matrixLightModelView );
00465             glViewport( 0, 0, shadowSize, shadowSize );
00466             glClear( GL_DEPTH_BUFFER_BIT );
00467             //-----------------------------------
00468             // 
00469             glShadeModel( GL_FLAT );
00470             glDisable( GL_LIGHTING );
00471             glDisable( GL_COLOR_MATERIAL );
00472             glDisable( GL_NORMALIZE );
00473             glColorMask( 0, 0, 0, 0 );
00474             //-----------------------------------
00475             glEnable( GL_POLYGON_OFFSET_FILL );
00476             //-----------------------------------
00477             // Draw Object Here
00478             (* DrawModels)( DM );
00479             //-----------------------------------
00480             glCopyTexImage2d( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, shadowSize, shadowSize, 0 );
00481             //-----------------------------------
00482             // Restore normal drawing states
00483             //glShadeModel( GL_SMOOTH );
00484             //glEnsable( GL_LIGHTING );
00485             //glEnable( GL_COLOR_MATERIAL );
00486             //glEnable( GL_NORMALIZE );
00487             //glColorMask( 1, 1, 1, 1 );
00488             //-----------------------------------
00489             // Set up texture matrix for shadow map projection
00490             glMatrixMode( GL_TEXTURE );
00491             glLoadIdentity();
00492             glTranslatef(0.5f, 0.5f, 0.5f);
00493             glScalef(0.5f, 0.5f, 0.5f);
00494             glMultMatrixf( matrixLightProjection );
00495             glMultMatrixf( matrixLightModelView );
00496             //-----------------------------------
00497         glPopMatrix();
00498         glMatrixMode( GL_PROJECTION );
00499     glPopMatrix();
00500     glPopAttrib();
00501     //---------------------------------------------------------------
00502     //---------------------------------------------------------------
00503     //---------------------------------------------------------------
00504 }
00505 //-----------------------------------------------------------------------------
00506 //=============================================================================
00507 //*/
00508 
00509 //=============================================================================
00510 // Static Function(s)
00511 //-----------------------------------------------------------------------------
00512 template <typename T>
00513 int OpenGLLightModel<T>::GetNumberOfLights ()
00514 {
00515     return g_iTotalLights;
00516 }
00517 //-----------------------------------------------------------------------------
00518 template <typename T>
00519 int OpenGLLightModel<T>::GetMaxinumNumberOfLightsAllowed ()
00520 {
00521     return static_cast<int>( g_iGLMaxLights );
00522 }
00523 //-----------------------------------------------------------------------------
00524 //=============================================================================
00525 
00526 //=============================================================================
00527 // Private Function(s)
00528 //-----------------------------------------------------------------------------
00529 template <typename T>   // Static Fn
00530 void OpenGLLightModel<T>::SetGLMaxLights ()
00531 {
00532     glGetIntegerv( GL_MAX_LIGHTS, &g_iGLMaxLights );
00533 }
00534 //-----------------------------------------------------------------------------
00535 template <typename T>
00536 void OpenGLLightModel<T>::SetDefaultValues ()
00537 {
00538     SetGLLightNumber( g_iTotalLights );
00539     //-----------------------------------------------------
00540     m_v4Ambient.SetXYZW( 0, 0, 0, 1 );
00541     if ( g_iTotalLights == GL_LIGHT0 ) {
00542         m_v4Diffuse.SetXYZW( 1, 1, 1, 1 );
00543         m_v4Specular.SetXYZW( 1, 1, 1, 1 );
00544     }
00545     else {
00546         m_v4Diffuse.SetXYZW( 0, 0, 0, 0 );
00547         m_v4Specular.SetXYZW( 0, 0, 0, 0 );
00548     }
00549     m_v4Position.SetXYZW( 0, 0, 1, 0 );
00550     //-------------------------------------------
00551     m_v3SpotDirection.SetXYZ( 0, 0, -1 );
00552     m_tSpotExponent = 0;
00553     m_tSpotCutoff   = 180;
00554     //-------------------------------------------
00555     m_tConstantAttenuation  = 1;
00556     m_tLinearAttenuation    = 0;
00557     m_tQuadraticAttenuation = 0;
00558     //-----------------------------------------------------
00559 }
00560 //=============================================================================
00561 END_NAMESPACE_TAPs__OpenGL
00562 //-----------------------------------------------------------------------------
00563 //34567890123456789012345678901234567890123456789012345678901234567890123456789
00564 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines