![]() |
TAPs 0.7.7.3
|
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----+----