00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExCLight.h"
00025
00026 ExCLight::ExCLight()
00027 {
00028 Guard(ExCLight::ExCLight())
00029 Reset();
00030 m_LightNumber=0;
00031 SetName("ExCLight");
00032 SetType(typeid(this).name());
00033 UnGuard
00034 }
00035
00036 ExCLight::ExCLight(GLenum Number)
00037 {
00038 Guard(ExCLight::ExCLight(GLenum Number))
00039 Reset();
00040 m_LightNumber=Number;
00041 UnGuard
00042 }
00043
00044 ExCLight::~ExCLight(void)
00045 {
00046 Guard(ExCLight::~ExCLight(void))
00047 UnGuard
00048 }
00049
00050 void ExCLight::Reset(void)
00051 {
00052 Guard(ExCLight::Reset(void))
00053 TurnOn();
00054 glEnable(GL_LIGHT0);
00055 m_Angle.SetValue(0,0,0);
00056 m_State=false;
00057 SetAmbiant(0.0f,0.0f,0.0f,1.0f);
00058 SetDiffuse(1.0f,1.0f,1.0f,1.0f);
00059 SetSpecular(1.0f,1.0f,1.0f,1.0f);
00060 m_Position.SetValue(10,10,0);
00061 m_Target.SetValue(0,0,0);
00062 SetSpotExponent(0.0f);
00063 SetSpotCutOff(180.0f);
00064 SetConstantAttenuation(1.0f);
00065 SetLinearAttenuation(0.0f);
00066 SetQuadraticAttenuation(0.0f);
00067
00068 UnGuard
00069 }
00070
00071 void ExCLight::SetLightNumber(GLenum light)
00072 {
00073 Guard(void ExCLight::SetLightNumber(GLenum light))
00074 m_LightNumber=light;
00075 UnGuard
00076 }
00077
00078 void ExCLight::TurnOn(void)
00079 {
00080 Guard(void ExCLight::TurnOn(void))
00081 m_State=true;
00082 glEnable(m_LightNumber);
00083 UnGuard
00084 }
00085
00086 void ExCLight::TurnOff(void)
00087 {
00088 Guard(void ExCLight::TurnOff(void))
00089 m_State=false;
00090 glDisable(m_LightNumber);
00091 UnGuard
00092 }
00093
00094 void ExCLight::SetAmbiant(float R,float G,float B,float A)
00095 {
00096 Guard(void ExCLight::SetAmbiant(float R,float G,float B,float A))
00097 SetAmbiantR(R);
00098 SetAmbiantG(G);
00099 SetAmbiantB(B);
00100 SetAmbiantA(A);
00101 UnGuard
00102 }
00103
00104 void ExCLight::SetAmbiantR(float R)
00105 {
00106 Guard(void ExCLight::SetAmbiantR(float R))
00107 if(R>1)R=1.0f;if(R<0.0f)R=0.0f;
00108 m_ambiant[0]=R;
00109 glLightfv(m_LightNumber,GL_AMBIENT,m_ambiant);
00110 UnGuard
00111 }
00112
00113 void ExCLight::SetAmbiantG(float G)
00114 {
00115 Guard(void ExCLight::SetAmbiantG(float G))
00116 if(G>1)G=1.0f;if(G<0.0f)G=0.0f;
00117 m_ambiant[1]=G;
00118 glLightfv(m_LightNumber,GL_AMBIENT,m_ambiant);
00119 UnGuard
00120 }
00121
00122 void ExCLight::SetAmbiantB(float B)
00123 {
00124 Guard(void ExCLight::SetAmbiantB(float B))
00125 if(B>1)B=1.0f;if(B<0.0f)B=0.0f;
00126 m_ambiant[2]=B;
00127 glLightfv(m_LightNumber,GL_AMBIENT,m_ambiant);
00128 UnGuard
00129 }
00130
00131 void ExCLight::SetAmbiantA(float A)
00132 {
00133 Guard(void ExCLight::SetAmbiantA(float A))
00134 if(A>1)A=1.0f;if(A<0.0f)A=0.0f;
00135 m_ambiant[3]=A;
00136 glLightfv(m_LightNumber,GL_AMBIENT,m_ambiant);
00137 UnGuard
00138 }
00139
00140 float ExCLight::GetAmbiantR(void)
00141 {
00142 Guard(float ExCLight::GetAmbiantR(void))
00143 return m_ambiant[0];
00144 UnGuard
00145 }
00146
00147 float ExCLight::GetAmbiantG(void)
00148 {
00149 Guard(float ExCLight::GetAmbiantG(void))
00150 return m_ambiant[1];
00151 UnGuard
00152 }
00153
00154 float ExCLight::GetAmbiantB(void)
00155 {
00156 Guard(float ExCLight::GetAmbiantB(void))
00157 return m_ambiant[2];
00158 UnGuard
00159 }
00160
00161 float ExCLight::GetAmbiantA(void)
00162 {
00163 Guard(float ExCLight::GetAmbiantA(void))
00164 return m_ambiant[3];
00165 UnGuard
00166 }
00167
00168 void ExCLight::IncAmbiantR(float inc)
00169 {
00170 Guard(void ExCLight::IncAmbiantR(float inc))
00171 SetAmbiantR(GetAmbiantR()+inc);
00172 UnGuard
00173 }
00174
00175 void ExCLight::IncAmbiantG(float inc)
00176 {
00177 Guard(void ExCLight::IncAmbiantG(float inc))
00178 SetAmbiantG(GetAmbiantG()+inc);
00179 UnGuard
00180 }
00181
00182 void ExCLight::IncAmbiantB(float inc)
00183 {
00184 Guard(void ExCLight::IncAmbiantB(float inc))
00185 SetAmbiantB(GetAmbiantB()+inc);
00186 UnGuard
00187 }
00188
00189 void ExCLight::IncAmbiantA(float inc)
00190 {
00191 Guard(void ExCLight::IncAmbiantA(float inc))
00192 SetAmbiantA(GetAmbiantA()+inc);
00193 UnGuard
00194 }
00195
00196 void ExCLight::SetDiffuse(float R,float G,float B,float A)
00197 {
00198 Guard(void ExCLight::SetDiffuse(float R,float G,float B,float A))
00199 SetDiffuseR(R);
00200 SetDiffuseG(G);
00201 SetDiffuseB(B);
00202 SetDiffuseA(A);
00203 UnGuard
00204 }
00205
00206 void ExCLight::SetDiffuseR(float R)
00207 {
00208 Guard(void ExCLight::SetDiffuseR(float R))
00209 if(R>1)R=1.0f;if(R<0.0f)R=0.0f;
00210 m_diffuse[0]=R;
00211 glLightfv(m_LightNumber,GL_DIFFUSE,m_diffuse);
00212 UnGuard
00213 }
00214
00215 void ExCLight::SetDiffuseG(float G)
00216 {
00217 Guard(void ExCLight::SetDiffuseG(float G))
00218 if(G>1)G=1.0f;if(G<0.0f)G=0.0f;
00219 m_diffuse[1]=G;
00220 glLightfv(m_LightNumber,GL_DIFFUSE,m_diffuse);
00221 UnGuard
00222 }
00223
00224 void ExCLight::SetDiffuseB(float B)
00225 {
00226 Guard(void ExCLight::SetDiffuseB(float B))
00227 if(B>1)B=1.0f;if(B<0.0f)B=0.0f;
00228 m_diffuse[2]=B;
00229 glLightfv(m_LightNumber,GL_DIFFUSE,m_diffuse);
00230 UnGuard
00231 }
00232
00233 void ExCLight::SetDiffuseA(float A)
00234 {
00235 Guard(void ExCLight::SetDiffuseA(float A))
00236 if(A>1)A=1.0f;if(A<0.0f)A=0.0f;
00237 m_diffuse[3]=A;
00238 glLightfv(m_LightNumber,GL_DIFFUSE,m_diffuse);
00239 UnGuard
00240 }
00241
00242 float ExCLight::GetDiffuseR(void)
00243 {
00244 Guard(float ExCLight::GetDiffuseR(void))
00245 return m_diffuse[0];
00246 UnGuard
00247 }
00248
00249 float ExCLight::GetDiffuseG(void)
00250 {
00251 Guard(float ExCLight::GetDiffuseG(void))
00252 return m_diffuse[1];
00253 UnGuard
00254 }
00255
00256 float ExCLight::GetDiffuseB(void)
00257 {
00258 Guard(float ExCLight::GetDiffuseB(void))
00259 return m_diffuse[2];
00260 UnGuard
00261 }
00262
00263 float ExCLight::GetDiffuseA(void)
00264 {
00265 Guard(float ExCLight::GetDiffuseA(void))
00266 return m_diffuse[3];
00267 UnGuard
00268 }
00269
00270 void ExCLight::IncDiffuseR(float inc)
00271 {
00272 Guard(void ExCLight::IncDiffuseR(float inc))
00273 SetDiffuseR(GetDiffuseR()+inc);
00274 UnGuard
00275 }
00276
00277 void ExCLight::IncDiffuseG(float inc)
00278 {
00279 Guard(void ExCLight::IncDiffuseG(float inc))
00280 SetDiffuseG(GetDiffuseG()+inc);
00281 UnGuard
00282 }
00283
00284 void ExCLight::IncDiffuseB(float inc)
00285 {
00286 Guard(void ExCLight::IncDiffuseB(float inc))
00287 SetDiffuseB(GetDiffuseB()+inc);
00288 UnGuard
00289 }
00290
00291 void ExCLight::IncDiffuseA(float inc)
00292 {
00293 Guard(void ExCLight::IncDiffuseA(float inc))
00294 SetDiffuseA(GetDiffuseA()+inc);
00295 UnGuard
00296 }
00297
00298 void ExCLight::SetSpecular(float R,float G,float B,float A)
00299 {
00300 Guard(void ExCLight::SetSpecular(float R,float G,float B,float A))
00301 SetSpecularR(R);
00302 SetSpecularG(G);
00303 SetSpecularB(B);
00304 SetSpecularA(A);
00305 UnGuard
00306 }
00307
00308 void ExCLight::SetSpecularR(float R)
00309 {
00310 Guard(void ExCLight::SetSpecularR(float R))
00311 if(R>1)R=1.0f;if(R<0.0f)R=0.0f;
00312 m_specular[0]=R;
00313 glLightfv(m_LightNumber,GL_SPECULAR,m_specular);
00314 UnGuard
00315 }
00316
00317 void ExCLight::SetSpecularG(float G)
00318 {
00319 Guard(void ExCLight::SetSpecularG(float G))
00320 if(G>1)G=1.0f;if(G<0.0f)G=0.0f;
00321 m_specular[1]=G;
00322 glLightfv(m_LightNumber,GL_SPECULAR,m_specular);
00323 UnGuard
00324 }
00325
00326 void ExCLight::SetSpecularB(float B)
00327 {
00328 Guard(void ExCLight::SetSpecularB(float B))
00329 if(B>1)B=1.0f;if(B<0.0f)B=0.0f;
00330 m_specular[2]=B;
00331 glLightfv(m_LightNumber,GL_SPECULAR,m_specular);
00332 UnGuard
00333 }
00334
00335 void ExCLight::SetSpecularA(float A)
00336 {
00337 Guard(void ExCLight::SetSpecularA(float A))
00338 if(A>1)A=1.0f;if(A<0.0f)A=0.0f;
00339 m_specular[3]=A;
00340 glLightfv(m_LightNumber,GL_SPECULAR,m_specular);
00341 UnGuard
00342 }
00343
00344 float ExCLight::GetSpecularR(void)
00345 {
00346 Guard(float ExCLight::GetSpecularR(void))
00347 return m_specular[0];
00348 UnGuard
00349 }
00350
00351 float ExCLight::GetSpecularG(void)
00352 {
00353 Guard(float ExCLight::GetSpecularG(void))
00354 return m_specular[1];
00355 UnGuard
00356 }
00357
00358 float ExCLight::GetSpecularB(void)
00359 {
00360 Guard(float ExCLight::GetSpecularB(void))
00361 return m_specular[2];
00362 UnGuard
00363 }
00364
00365 float ExCLight::GetSpecularA(void)
00366 {
00367 Guard(float ExCLight::GetSpecularA(void))
00368 return m_specular[3];
00369 UnGuard
00370 }
00371
00372 void ExCLight::IncSpecularR(float inc)
00373 {
00374 Guard(void ExCLight::IncSpecularR(float inc))
00375 SetSpecularR(GetSpecularR()+inc);
00376 UnGuard
00377 }
00378
00379 void ExCLight::IncSpecularG(float inc)
00380 {
00381 Guard(void ExCLight::IncSpecularG(float inc))
00382 SetSpecularG(GetSpecularG()+inc);
00383 UnGuard
00384 }
00385
00386 void ExCLight::IncSpecularB(float inc)
00387 {
00388 Guard(void ExCLight::IncSpecularB(float inc))
00389 SetSpecularB(GetSpecularB()+inc);
00390 UnGuard
00391 }
00392
00393 void ExCLight::IncSpecularA(float inc)
00394 {
00395 Guard(void ExCLight::IncSpecularA(float inc))
00396 SetSpecularA(GetSpecularA()+inc);
00397 UnGuard
00398 }
00399
00400
00401 void ExCLight::SetPosition(double X,double Y,double Z)
00402 {
00403 Guard(void ExCLight::SetPosition(double X,double Y,double Z))
00404 SetPosition(X,Y,Z);
00405 GLfloat lightPos[] = { m_Position.GetX(), m_Position.GetY(),m_Position.GetZ()};
00406 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00407 UnGuard
00408 }
00409
00410 void ExCLight::SetPositionX(double X)
00411 {
00412 Guard(void ExCLight::SetPositionX(double X))
00413 m_Position.SetX(X);
00414 GLfloat lightPos[] = { m_Position.GetX(), m_Position.GetY(),m_Position.GetZ()};
00415 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00416 UnGuard
00417 }
00418
00419 void ExCLight::SetPositionY(double Y)
00420 {
00421 Guard(void ExCLight::SetPositionY(double Y))
00422 m_Position.SetY(Y);
00423 GLfloat lightPos[] = { m_Position.GetX(), m_Position.GetY(),m_Position.GetZ()};
00424 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00425 UnGuard
00426 }
00427
00428 void ExCLight::SetPositionZ(double Z)
00429 {
00430 Guard(void ExCLight::SetPositionZ(double Z))
00431 m_Position.SetZ(Z);
00432 GLfloat lightPos[] = { m_Position.GetX(), m_Position.GetY(),m_Position.GetZ()};
00433 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00434 UnGuard
00435 }
00436
00437
00438 void ExCLight::SetTargetX(double X)
00439 {
00440 Guard(void ExCLight::SetTargetX(double X))
00441 m_Target.SetX(X);
00442 GLfloat lightPos[] = { m_Target.GetX(), m_Target.GetY(),m_Target.GetZ(), 1.0 };
00443 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00444 UnGuard
00445 }
00446
00447 void ExCLight::SetTargetY(double Y)
00448 {
00449 Guard(void ExCLight::SetTargetY(double Y))
00450 m_Target.SetY(Y);
00451 GLfloat lightPos[] = { m_Target.GetX(), m_Target.GetY(),m_Target.GetZ(), 1.0 };
00452 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00453 UnGuard
00454 }
00455
00456 void ExCLight::SetTargetZ(double Z)
00457 {
00458 Guard(void ExCLight::SetTargetZ(double Z))
00459 m_Target.SetZ(Z);
00460 GLfloat lightPos[] = { m_Target.GetX(), m_Target.GetY(),m_Target.GetZ(), 1.0 };
00461 glLightfv(m_LightNumber, GL_POSITION, lightPos );
00462 UnGuard
00463 }
00464
00465
00466
00467
00468 void ExCLight::SetTarget(double X,double Y,double Z)
00469 {
00470 Guard(void ExCLight::SetTarget(double X,double Y,double Z))
00471
00472 GLfloat lightPos[] = { m_Target.GetX(), m_Target.GetY(),m_Target.GetZ(), 1.0 };
00473 glLightfv(m_LightNumber,GL_SPOT_DIRECTION,lightPos);
00474 UnGuard
00475 }
00476
00477 void ExCLight::SetSpotExponent(float Exponent)
00478 {
00479 Guard(void ExCLight::SetSpotExponent(float Exponent))
00480 if(Exponent<0)Exponent=0.0f;if(Exponent>128)Exponent=128.0f;
00481 m_spotExponent[0]=Exponent;
00482 glLightfv(m_LightNumber,GL_SPOT_EXPONENT,m_spotExponent);
00483 UnGuard
00484 }
00485
00486 void ExCLight::IncSpotExponent(float inc)
00487 {
00488 Guard(void ExCLight::IncSpotExponent(float inc))
00489 SetSpotExponent(GetSpotExponent()+inc);
00490 UnGuard
00491 }
00492
00493 float ExCLight::GetSpotExponent(void)
00494 {
00495 Guard(float ExCLight::GetSpotExponent(void))
00496 return m_spotExponent[0];
00497 UnGuard
00498 }
00499
00500 void ExCLight::SetSpotCutOff(float cut)
00501 {
00502 Guard(void ExCLight::SetSpotCutOff(float cut))
00503 if(cut>m_spotCutOff[0])
00504 {
00505 if(cut>90)cut=180;
00506 }else
00507 {
00508 if(cut<0)cut=0;
00509 if(cut>90)cut=90;
00510
00511 }
00512
00513 m_spotCutOff[0]=cut;
00514 glLightfv(m_LightNumber,GL_SPOT_CUTOFF,m_spotCutOff);
00515 UnGuard
00516 }
00517
00518 void ExCLight::IncSpotCutOff(float inc)
00519 {
00520 Guard(void ExCLight::IncSpotCutOff(float inc))
00521 SetSpotCutOff(GetSpotCutOff()+inc);
00522 UnGuard
00523 }
00524
00525 float ExCLight::GetSpotCutOff(void)
00526 {
00527 Guard(float ExCLight::GetSpotCutOff(void))
00528 return m_spotCutOff[0];
00529 UnGuard
00530 }
00531
00532 void ExCLight::SetConstantAttenuation(float att)
00533 {
00534 Guard(void ExCLight::SetConstantAttenuation(float att))
00535 if(att<0)att=0.0f;if(att>5)att=5.0f;
00536 m_spotConstentAtt[0]=att;
00537 glLightfv(m_LightNumber,GL_CONSTANT_ATTENUATION,m_spotConstentAtt);
00538 UnGuard
00539 }
00540
00541 void ExCLight::IncConstantAttenuation(float inc)
00542 {
00543 Guard(void ExCLight::IncConstantAttenuation(float inc))
00544 SetConstantAttenuation(GetConstantAttenuation()+inc);
00545 UnGuard
00546 }
00547
00548 float ExCLight::GetConstantAttenuation(void)
00549 {
00550 Guard(float ExCLight::GetConstantAttenuation(void))
00551 return m_spotConstentAtt[0];
00552 UnGuard
00553 }
00554
00555 void ExCLight::SetLinearAttenuation(float att)
00556 {
00557 Guard(void ExCLight::SetLinearAttenuation(float att))
00558 if(att<0)att=0.0f;if(att>5)att=5.0f;
00559 m_spotLinearAtt[0]=att;
00560 glLightfv(m_LightNumber,GL_LINEAR_ATTENUATION,m_spotLinearAtt);
00561 UnGuard
00562 }
00563
00564 void ExCLight::IncLinearAttenuation(float inc)
00565 {
00566 Guard(void ExCLight::IncLinearAttenuation(float inc))
00567 SetLinearAttenuation(GetLinearAttenuation()+inc);
00568 UnGuard
00569 }
00570
00571 float ExCLight::GetLinearAttenuation(void)
00572 {
00573 Guard(float ExCLight::GetLinearAttenuation(void))
00574 return m_spotLinearAtt[0];
00575 UnGuard
00576 }
00577
00578 void ExCLight::SetQuadraticAttenuation(float att)
00579 {
00580 Guard(void ExCLight::SetQuadraticAttenuation(float att))
00581 if(att<0)att=0.0f;if(att>5)att=5.0f;
00582 m_spotQuadraticAtt[1]=att;
00583 glLightfv(m_LightNumber,GL_QUADRATIC_ATTENUATION,m_spotQuadraticAtt);
00584 UnGuard
00585 }
00586
00587 void ExCLight::IncQuadraticAttenuation(float inc)
00588 {
00589 Guard(void ExCLight::IncQuadraticAttenuation(float inc))
00590 SetQuadraticAttenuation(GetQuadraticAttenuation()+inc);
00591 UnGuard
00592 }
00593
00594 float ExCLight::GetQuadraticAttenuation(void)
00595 {
00596 Guard(float ExCLight::GetQuadraticAttenuation(void))
00597 return m_spotQuadraticAtt[1];
00598 UnGuard
00599 }
00600
00601 void ExCLight::Draw(void)
00602 {
00603 Guard(void ExCLight::Draw(void))
00604 glPushMatrix();
00605 glDisable(GL_LIGHTING);
00606 glColor3f(1,1,1);
00607 glTranslatef(m_Position.GetX(),m_Position.GetY(),m_Position.GetZ());
00608 glutWireSphere(0.5,10,10);
00609 glPopMatrix();
00610 UnGuard
00611 }
00612