#include <point_light.h>
Inheritance diagram for NL3D::CPointLight:

Only Positionnal with or without attenuation are supported. no directionnal. This restriction is for faster rendering, especially if VertexProgram is used. New: Spot are managed but VertexProgrammed meshes won't use localAttenuation. Special Ambiant are provided too but they are considered like PointLight for dynamic light. They are used in a special way for static light in Igs.
Nevrax France
Definition at line 69 of file point_light.h.
Light setup | |
| NLMISC::CRGBA | getAmbient () const |
| Get the ambient color of the light. | |
| float | getAttenuationBegin () const |
| get the begin radius of the attenuation. | |
| float | getAttenuationEnd () const |
| get the end radius of the attenuation. | |
| NLMISC::CRGBA | getDiffuse () const |
| Get the diffuse color of the light. | |
| const CVector & | getPosition () const |
| Get the position in WorldSpace. | |
| NLMISC::CRGBA | getSpecular () const |
| Get the specular color of the light. | |
| float | getSpotAngleBegin () const |
| get the begin radius of the SpotAngles. | |
| float | getSpotAngleEnd () const |
| get the end radius of the SpotAngles. | |
| const CVector & | getSpotDirection () const |
| get the spot Direction | |
| TType | getType () const |
| Get the ambient color of the light. | |
| void | serial (NLMISC::IStream &f) |
| Get the ambient color of the light. | |
| void | setAmbient (NLMISC::CRGBA ambient) |
| Set the ambient color of the light. Default to Black. | |
| void | setColor (NLMISC::CRGBA color) |
| Set the diffuse and specular color of the light to the same value. don't modify _Ambient. | |
| void | setDiffuse (NLMISC::CRGBA diffuse) |
| Set the diffuse color of the light. Default to White. | |
| void | setPosition (const CVector &v) |
| Set the position in WorldSpace. | |
| void | setSpecular (NLMISC::CRGBA specular) |
| Set the specular color of the light. Default to White. | |
| void | setType (TType type) |
| set/get the type of the light. | |
| void | setupAttenuation (float attenuationBegin, float attenuationEnd) |
| void | setupSpotAngle (float spotAngleBegin, float spotAngleEnd) |
| void | setupSpotDirection (const CVector &dir) |
Public Types | |
| typedef TTransformList::iterator | ItTransformList |
| typedef NLMISC::CSTLBlockList< CTransform * > | TTransformList |
| The list of model this light influence. | |
| enum | TType { PointLight = 0, SpotLight, AmbientLight } |
Public Member Functions | |
| CPointLight (const CPointLight &o) | |
| do not copy _LightedModels. | |
| CPointLight () | |
| CPointLight & | operator= (const CPointLight &o) |
| do not copy _LightedModels. | |
| ~CPointLight () | |
| call resetLightModels. | |
Static Public Member Functions | |
| void | purge () |
Private Member Functions | |
| void | computeAttenuationFactors () |
| void | computeSpotAttenuationFactors () |
Private Attributes | |
| NLMISC::CRGBA | _Ambient |
| float | _AttenuationBegin |
| float | _AttenuationEnd |
| float | _ConstantAttenuation |
| float | _CosSpotAngleEnd |
| NLMISC::CRGBA | _Diffuse |
| TTransformList | _LightedModels |
| float | _LinearAttenuation |
| float | _OOCosSpotAngleDelta |
| float | _OODeltaAttenuation |
| CVector | _Position |
| float | _QuadraticAttenuation |
| NLMISC::CRGBA | _Specular |
| float | _SpotAngleBegin |
| float | _SpotAngleEnd |
| CVector | _SpotDirection |
| float | _SpotExponent |
| TType | _Type |
Static Private Attributes | |
| NLMISC::CBlockMemory< CTransform *, false > | _LightedModelListMemory |
|
|
Definition at line 74 of file point_light.h. Referenced by appendLightedModel(), and removeLightedModel(). |
|
|
The list of model this light influence.
Definition at line 73 of file point_light.h. |
|
|
Definition at line 76 of file point_light.h.
00077 {
00078 // The light is a point.
00079 PointLight= 0,
00080
00081 // The light is a spotlight with a cone.
00082 SpotLight,
00083
00084 // The light is an Ambient PointLight in an Ig.
00085 AmbientLight
00086 };
|
|
|
Constructor Default type is PointLight. Default ambient is Black, Diffuse and Specular are white. Position is CVector::Null. Attenuation is 10-30. Definition at line 46 of file point_light.cpp. References _AttenuationBegin, _AttenuationEnd, _CosSpotAngleEnd, _OOCosSpotAngleDelta, _SpotAngleBegin, _SpotAngleEnd, _SpotDirection, _SpotExponent, computeAttenuationFactors(), computeSpotAttenuationFactors(), and NLMISC::CVector::set().
00046 : _LightedModels(&_LightedModelListMemory) 00047 { 00048 _Position= CVector::Null; 00049 _Ambient= CRGBA::Black; 00050 _Diffuse= _Specular= CRGBA::White; 00051 00052 // Default setup. this is arbitrary 00053 _AttenuationBegin= 10; 00054 _AttenuationEnd= 30; 00055 00056 // Default spot setup. this is arbitrary 00057 _SpotDirection.set(0,1,0); 00058 _SpotAngleBegin= float(NLMISC::Pi/4); 00059 _SpotAngleEnd= float(NLMISC::Pi/2); 00060 00061 // compute AttenuationFactors only one time. 00062 static bool done= false; 00063 static float cAtt, lAtt, qAtt; 00064 static float spotCOOD, spotCAE, spotEXP; 00065 if(!done) 00066 { 00067 done= true; 00068 computeAttenuationFactors(); 00069 computeSpotAttenuationFactors(); 00070 // bkup setup. 00071 cAtt= _ConstantAttenuation; 00072 lAtt= _LinearAttenuation; 00073 qAtt= _QuadraticAttenuation; 00074 spotCAE= _CosSpotAngleEnd; 00075 spotCOOD= _OOCosSpotAngleDelta; 00076 spotEXP= _SpotExponent; 00077 } 00078 else 00079 { 00080 // just copy bkuped setup. 00081 _ConstantAttenuation= cAtt; 00082 _LinearAttenuation= lAtt; 00083 _QuadraticAttenuation= qAtt; 00084 _CosSpotAngleEnd= spotCAE; 00085 _OOCosSpotAngleDelta= spotCOOD; 00086 _SpotExponent= spotEXP; 00087 } 00088 } |
|
|
call resetLightModels.
Definition at line 127 of file point_light.cpp. References resetLightedModels().
00128 {
00129 resetLightedModels();
00130 }
|
|
|
do not copy _LightedModels.
Definition at line 92 of file point_light.cpp. References operator=().
00092 : _LightedModels(&_LightedModelListMemory) 00093 { 00094 // copy (no need to init) 00095 operator=(o); 00096 } |
|
|
append a model to the list. called by CLightingManager.
Definition at line 409 of file point_light.cpp. References _LightedModels, and ItTransformList. Referenced by NL3D::CLightingManager::computeModelLightContributions().
00410 {
00411 // append the entry in the list
00412 _LightedModels.push_back(model);
00413 ItTransformList it= _LightedModels.end();
00414 it--;
00415 return it;
00416 }
|
|
|
Definition at line 180 of file point_light.cpp. References _AttenuationBegin, _AttenuationEnd, _OODeltaAttenuation, NL3D::CLight::getConstantAttenuation(), NL3D::CLight::getLinearAttenuation(), NL3D::CLight::getQuadraticAttenuation(), and NL3D::CLight::setupAttenuation(). Referenced by CPointLight(), serial(), and setupAttenuation().
00181 {
00182 // disable attenuation?
00183 if(_AttenuationBegin==0 && _AttenuationEnd==0)
00184 {
00185 // setup for attenuation disabled.
00186 _ConstantAttenuation= 1;
00187 _LinearAttenuation= 0;
00188 _QuadraticAttenuation= 0;
00189 }
00190 else
00191 {
00192 // precompute attenuation values, with help of CLight formula!!
00193 static CLight dummyLight;
00194 dummyLight.setupAttenuation(_AttenuationBegin, _AttenuationEnd);
00195 _ConstantAttenuation= dummyLight.getConstantAttenuation();
00196 _LinearAttenuation= dummyLight.getLinearAttenuation();
00197 _QuadraticAttenuation= dummyLight.getQuadraticAttenuation();
00198
00199 // setup _OODeltaAttenuation
00200 _OODeltaAttenuation= _AttenuationEnd - _AttenuationBegin;
00201 if(_OODeltaAttenuation <=0 )
00202 _OODeltaAttenuation= 0;
00203 else
00204 _OODeltaAttenuation= 1.0f / _OODeltaAttenuation;
00205 }
00206 }
|
|
||||||||||||||||
|
Compute a linear attenuation from a point and precomputed distance according to attenuation and spot setup. Return [0,1]
Definition at line 273 of file point_light.cpp. References _AttenuationBegin, _AttenuationEnd, _CosSpotAngleEnd, _OOCosSpotAngleDelta, _OODeltaAttenuation, _SpotDirection, NLMISC::clamp(), and NLMISC::sqr().
00274 {
00275 float gAtt;
00276
00277 // Attenuation Distance
00278 if(_AttenuationEnd==0)
00279 gAtt= 1;
00280 else
00281 {
00282 float distMinusRadius= dist - modelRadius;
00283 if(distMinusRadius<_AttenuationBegin)
00284 gAtt= 1;
00285 else if(distMinusRadius<_AttenuationEnd)
00286 {
00287 gAtt= (_AttenuationEnd - distMinusRadius) * _OODeltaAttenuation;
00288 }
00289 else
00290 gAtt= 0;
00291 }
00292
00293 // Spot Attenuation
00294 if(_Type== SpotLight)
00295 {
00296 float spotAtt;
00297
00298 // Compute unnormalized direction
00299 CVector dir= pos - _Position;
00300 // get cosAngle(dir, SpotDirection):
00301 float cosAngleDirSpot= (dir*_SpotDirection) / dist;
00302
00303 // Modify with modelRadius. NB: made Only for big models.
00304 if(modelRadius>0)
00305 {
00306 // If the pointLight is in the model, consider no spotAtt
00307 if(modelRadius > dist)
00308 spotAtt= 1;
00309 else
00310 {
00311 // compute the angle of the cone made by the model sphere and the pointLightCenter.
00312 float cosAngleSphere= modelRadius / sqrtf( sqr(dist) + sqr(modelRadius) );
00313 /* If this one is smaller than cosAngleDirSpot, it's mean that the angle of this cone is greater than the
00314 angleDirSpot, hence a part of the sphere "ps" exist such that _SportDirection*(ps-_Position).normed() == 1
00315 => no spotAttenuation
00316 */
00317 if(cosAngleSphere < cosAngleDirSpot)
00318 spotAtt= 1;
00319 else
00320 {
00321 // Must compute cos( AngleDirSpot-AngleSphere )
00322 float sinAngleSphere= sqrtf(1 - sqr(cosAngleSphere));
00323 float sinAngleDirSpot= sqrtf(1 - sqr(cosAngleDirSpot));
00324 float cosDelta= cosAngleSphere * cosAngleDirSpot + sinAngleSphere * sinAngleDirSpot;
00325
00326 // spot attenuation on the exterior of the sphere
00327 spotAtt= (cosDelta - _CosSpotAngleEnd) * _OOCosSpotAngleDelta;
00328 }
00329 }
00330 }
00331 else
00332 {
00333 // spot attenuation
00334 spotAtt= (cosAngleDirSpot - _CosSpotAngleEnd) * _OOCosSpotAngleDelta;
00335 }
00336
00337 // modulate
00338 clamp(spotAtt, 0.f, 1.f);
00339 gAtt*= spotAtt;
00340 }
00341
00342 return gAtt;
00343 }
|
|
|
Compute a linear attenuation from a point according to attenuation and spot setup. Return [0,1].
Definition at line 267 of file point_light.cpp. Referenced by NL3D::CLightingManager::computeModelLightContributions(), NL3D::CPatch::generateTileVegetable(), NL3D::CZoneLighter::processZonePointLightRT(), NL3D::CZoneLighter::CPointLightRT::testRaytrace(), NL3D::CInstanceLighter::CPointLightRT::testRaytrace(), and NL3D::CTransform::traverseLight().
00268 {
00269 return computeLinearAttenuation(pos, (pos - _Position).norm() );
00270 }
|
|
|
Definition at line 210 of file point_light.cpp. References _CosSpotAngleEnd, _OOCosSpotAngleDelta, _SpotAngleBegin, _SpotAngleEnd, and _SpotExponent. Referenced by CPointLight(), serial(), and setupSpotAngle().
00211 {
00212 // Factors for linear Attenuation.
00213 float cosSpotAngleBegin= (float)cosf(_SpotAngleBegin);
00214 _CosSpotAngleEnd= (float)cos(_SpotAngleEnd);
00215 if(cosSpotAngleBegin - _CosSpotAngleEnd > 0)
00216 _OOCosSpotAngleDelta= 1.0f / (cosSpotAngleBegin - _CosSpotAngleEnd);
00217 else
00218 _OOCosSpotAngleDelta= 1e10f;
00219
00220 // compute an exponent such that at middleAngle, att is 0.5f.
00221 float caMiddle= (cosSpotAngleBegin + _CosSpotAngleEnd) /2;
00222 float divid=(float)log (caMiddle);
00223 if (divid==0.f)
00224 divid=0.0001f;
00225 _SpotExponent= (float)(log (0.5)/divid);
00226 }
|
|
|
Get the ambient color of the light.
Definition at line 129 of file point_light.h. Referenced by NL3D::CLightContribution::computeCurrentAmbient(), NL3D::CLightingManager::computeModelLightContributions(), NL3D::CPointLightNamed::CPointLightNamed(), NL3D::CPointLightUser::getAmbient(), and NL3D::CSurfaceLightGrid::getStaticLightSetup().
00129 {return _Ambient;}
|
|
|
get the begin radius of the attenuation.
Definition at line 141 of file point_light.h. References _AttenuationBegin. Referenced by NL3D::CZoneLighter::addStaticPointLight(), NL3D::CInstanceLighter::addStaticPointLight(), NL3D::CPatchDLMPointLight::compile(), NL3D::CLightingManager::computeModelLightContributions(), NL3D::CPointLightUser::getAttenuationBegin(), and NL3D::CPSLight::step().
00141 {return _AttenuationBegin;}
|
|
|
get the end radius of the attenuation.
Definition at line 143 of file point_light.h. References _AttenuationEnd. Referenced by NL3D::CLightingManager::addDynamicLight(), NL3D::CZoneLighter::addStaticPointLight(), NL3D::CInstanceLighter::addStaticPointLight(), NL3D::CPatchDLMPointLight::compile(), NL3D::CZoneLighter::compilePointLightRT(), NL3D::CInstanceLighter::compilePointLightRT(), NL3D::CLightingManager::computeModelLightContributions(), NL3D::CPointLightUser::getAttenuationEnd(), NL3D::CZoneLighter::CPredPointLightToPoint::operator()(), NL3D::CInstanceLighter::CPredPointLightToPoint::operator()(), and NL3D::CPSLight::step().
00143 {return _AttenuationEnd;}
|
|
|
Get the diffuse color of the light.
Definition at line 131 of file point_light.h. Referenced by NL3D::CPatchDLMPointLight::compile(), NL3D::CLightingManager::computeModelLightContributions(), NL3D::CShadowMapManager::computeShadowColors(), NL3D::CShadowMapManager::computeShadowDirection(), NL3D::CPointLightNamed::CPointLightNamed(), NL3D::CPointLightUser::getDiffuse(), NL3D::CSkeletonModel::renderCLod(), NL3D::CPointLightNamed::serial(), NL3D::CPSLight::step(), and NL3D::CParticleSystemModel::traverseRender().
00131 {return _Diffuse;}
|
|
|
|
Get the specular color of the light.
Definition at line 133 of file point_light.h. Referenced by NL3D::CPointLightNamed::CPointLightNamed(), and NL3D::CPointLightUser::getSpecular().
00133 {return _Specular;}
|
|
|
get the begin radius of the SpotAngles.
Definition at line 151 of file point_light.h. References _SpotAngleBegin. Referenced by NL3D::CPatchDLMPointLight::compile(), and NL3D::CPointLightUser::getSpotAngleBegin().
00151 {return _SpotAngleBegin;}
|
|
|
get the end radius of the SpotAngles.
Definition at line 153 of file point_light.h. References _SpotAngleEnd. Referenced by NL3D::CPatchDLMPointLight::compile(), and NL3D::CPointLightUser::getSpotAngleEnd().
00153 {return _SpotAngleEnd;}
|
|
|
get the spot Direction
Definition at line 161 of file point_light.h. References _SpotDirection. Referenced by NL3D::CPatchDLMPointLight::compile(), and NL3D::CPointLightModel::traverseLight().
00161 {return _SpotDirection;}
|
|
|
Get the ambient color of the light.
Definition at line 138 of file point_light.cpp. Referenced by NL3D::CPatchDLMPointLight::compile(), NL3D::CZoneLighter::compilePointLightRT(), NL3D::CInstanceLighter::compilePointLightRT(), NL3D::CLightingManager::computeModelLightContributions(), NL3D::CPointLightUser::isSpotlight(), NL3D::CInstanceLighter::processIGPointLightRT(), NL3D::CZoneLighter::CPointLightRT::testRaytrace(), NL3D::CInstanceLighter::CPointLightRT::testRaytrace(), and NL3D::CPointLightModel::traverseLight().
00139 {
00140 return _Type;
00141 }
|
|
|
do not copy _LightedModels. copy all but _LightedModels !! Definition at line 99 of file point_light.cpp. References _Ambient, _AttenuationBegin, _AttenuationEnd, _ConstantAttenuation, _CosSpotAngleEnd, _Diffuse, _LinearAttenuation, _OOCosSpotAngleDelta, _OODeltaAttenuation, _Position, _QuadraticAttenuation, _Specular, _SpotAngleBegin, _SpotAngleEnd, _SpotDirection, _SpotExponent, and _Type. Referenced by CPointLight().
00100 {
00102 _Type= o._Type;
00103 _Position= o._Position;
00104 _Ambient= o._Ambient;
00105 _Diffuse= o._Diffuse;
00106 _Specular= o._Specular;
00107
00108 _AttenuationBegin= o._AttenuationBegin;
00109 _AttenuationEnd= o._AttenuationEnd;
00110 _OODeltaAttenuation= o._OODeltaAttenuation;
00111 _ConstantAttenuation= o._ConstantAttenuation;
00112 _LinearAttenuation= o._LinearAttenuation;
00113 _QuadraticAttenuation= o._QuadraticAttenuation;
00114
00115 _SpotDirection= o._SpotDirection;
00116 _SpotAngleBegin= o._SpotAngleBegin;
00117 _SpotAngleEnd= o._SpotAngleEnd;
00118 _CosSpotAngleEnd= o._CosSpotAngleEnd;
00119 _OOCosSpotAngleDelta= o._OOCosSpotAngleDelta;
00120 _SpotExponent= o._SpotExponent;
00121
00122 return *this;
00123 }
|
|
|
Definition at line 424 of file point_light.cpp. References _LightedModelListMemory, and NLMISC::CBlockMemory< CTransform *, false >::purge().
00425 {
00426 _LightedModelListMemory.purge();
00427 }
|
|
|
remove a model from the list. called by CTransform.
Definition at line 418 of file point_light.cpp. References _LightedModels, and ItTransformList. Referenced by NL3D::CTransform::resetLighting().
00419 {
00420 // delete the entry in the list.
00421 _LightedModels.erase(it);
00422 }
|
|
|
Dirt all models this light influence.
Definition at line 393 of file point_light.cpp. References _LightedModels, nlassert, and NL3D::CTransform::resetLighting(). Referenced by NL3D::CPointLightModel::traverseLight(), and ~CPointLight().
00394 {
00395 // For each transform, resetLighting him.
00396 while(_LightedModels.begin() != _LightedModels.end() )
00397 {
00398 CTransform *model= *_LightedModels.begin();
00399 // reset lighting
00400 model->resetLighting();
00401
00402 // NB: the transform must erase him from this list.
00403 nlassert( _LightedModels.begin() == _LightedModels.end() || *_LightedModels.begin() != model );
00404 }
00405 }
|
|
|
Get the ambient color of the light.
Reimplemented in NL3D::CPointLightNamed. Definition at line 230 of file point_light.cpp. References _AttenuationBegin, _AttenuationEnd, _SpotAngleBegin, _SpotAngleEnd, _SpotDirection, computeAttenuationFactors(), computeSpotAttenuationFactors(), NLMISC::IStream::isReading(), NLMISC::IStream::serial(), NLMISC::IStream::serialEnum(), NLMISC::IStream::serialVersion(), NLMISC::CVector::set(), and sint.
00231 {
00232 sint ver= f.serialVersion(1);
00233
00234 if(ver>=1)
00235 {
00236 f.serialEnum(_Type);
00237 f.serial(_SpotDirection);
00238 f.serial(_SpotAngleBegin);
00239 f.serial(_SpotAngleEnd);
00240 }
00241 else if(f.isReading())
00242 {
00243 _Type= PointLight;
00244 _SpotDirection.set(0,1,0);
00245 _SpotAngleBegin= float(NLMISC::Pi/4);
00246 _SpotAngleEnd= float(NLMISC::Pi/2);
00247 }
00248
00249 f.serial(_Position);
00250 f.serial(_Ambient);
00251 f.serial(_Diffuse);
00252 f.serial(_Specular);
00253 f.serial(_AttenuationBegin);
00254 f.serial(_AttenuationEnd);
00255
00256 // precompute.
00257 if(f.isReading())
00258 {
00259 computeAttenuationFactors();
00260 computeSpotAttenuationFactors();
00261 }
00262
00263 }
|
|
|
Set the ambient color of the light. Default to Black.
Definition at line 120 of file point_light.h. Referenced by NL3D::CPointLightUser::setAmbient(), and NL3D::CPointLightNamed::setLightFactor().
00120 {_Ambient=ambient;}
|
|
|
Set the diffuse and specular color of the light to the same value. don't modify _Ambient.
Definition at line 126 of file point_light.h. Referenced by NL3D::CPointLightUser::setColor(), and NL3D::CPSLight::step().
|
|
|
Set the diffuse color of the light. Default to White.
Definition at line 122 of file point_light.h. Referenced by NL3D::CPointLightUser::setDiffuse(), and NL3D::CPointLightNamed::setLightFactor().
00122 {_Diffuse=diffuse;}
|
|
|
Set the position in WorldSpace.
Definition at line 114 of file point_light.h. References v. Referenced by NL3D::CPointLightModel::traverseLight().
|
|
|
Set the specular color of the light. Default to White.
Definition at line 124 of file point_light.h. Referenced by NL3D::CPointLightNamed::setLightFactor(), and NL3D::CPointLightUser::setSpecular().
00124 {_Specular=specular;}
|
|
|
set/get the type of the light.
Definition at line 134 of file point_light.cpp. References type. Referenced by NL3D::CPointLightUser::enableSpotlight().
|
|
||||||||||||
|
setup the attenuation of the light. if (0,0) attenuation is disabled. clamp(attenuationBegin,0 , +oo) and calmp(attenuationEnd, attenuationBegin, +oo) Definition at line 144 of file point_light.cpp. References _AttenuationBegin, _AttenuationEnd, and computeAttenuationFactors(). Referenced by NL3D::CPointLightUser::setupAttenuation(), and NL3D::CPSLight::step().
00145 {
00146 // set values.
00147 attenuationBegin= max(attenuationBegin, 0.f);
00148 attenuationEnd= max(attenuationEnd, attenuationBegin);
00149 _AttenuationBegin= attenuationBegin;
00150 _AttenuationEnd= attenuationEnd;
00151
00152 // update factors.
00153 computeAttenuationFactors();
00154
00155 }
|
|
||||||||||||
|
setup the CLight with current pointLight state. factor is used to modulate the colors.
Definition at line 346 of file point_light.cpp. References _SpotDirection, _SpotExponent, NLMISC::CRGBA::modulateFromuiRGBOnly(), NL3D::CLight::setupPointLight(), NL3D::CLight::setupSpotLight(), uint, and uint8.
00347 {
00348 // expand 0..255 to 0..256, to avoid loss of precision.
00349 uint ufactor= factor + (factor>>7); // add 0 or 1.
00350
00351 // modulate with factor
00352 CRGBA ambient, diffuse, specular;
00353 ambient.modulateFromuiRGBOnly(_Ambient, ufactor);
00354 diffuse.modulateFromuiRGBOnly(_Diffuse, ufactor);
00355 specular.modulateFromuiRGBOnly(_Specular, ufactor);
00356
00357 // setup the pointLight
00358 if(_Type == SpotLight )
00359 {
00360 light.setupSpotLight(ambient, diffuse, specular, _Position, _SpotDirection,
00361 _SpotExponent, float(NLMISC::Pi/2) ,
00362 _ConstantAttenuation, _LinearAttenuation, _QuadraticAttenuation);
00363 }
00364 // PointLight or AmbientLight
00365 else
00366 {
00367 light.setupPointLight(ambient, diffuse, specular, _Position, CVector::Null,
00368 _ConstantAttenuation, _LinearAttenuation, _QuadraticAttenuation);
00369 }
00370 }
|
|
||||||||||||
|
setup the CLight with current pointLight state. Don't use driver Attenuation and use software one setuped with an additional userAttenuation
Definition at line 374 of file point_light.cpp. References NLMISC::CRGBA::modulateFromuiRGBOnly(), NL3D::CLight::setupPointLight(), uint, and uint8.
00375 {
00376 // expand 0..255 to 0..256, to avoid loss of precision.
00377 uint ufactor= factor + (factor>>7); // add 0 or 1.
00378
00379 // modulate with factor
00380 CRGBA ambient, diffuse, specular;
00381 ambient.modulateFromuiRGBOnly(_Ambient, ufactor);
00382 diffuse.modulateFromuiRGBOnly(_Diffuse, ufactor);
00383 specular.modulateFromuiRGBOnly(_Specular, ufactor);
00384
00385 // setup the pointLight, disabling attenuation.
00386 // NB: setup a pointLight even if it is a SpotLight because already attenuated
00387 light.setupPointLight(ambient, diffuse, specular, _Position, CVector::Null,
00388 1, 0, 0);
00389 }
|
|
||||||||||||
|
setup the spot AngleBegin and AngleEnd that define spot attenuation of the light. Usefull only if SpotLight NB: clamp(angleBegin, 0, PI); clamp(angleEnd, angleBegin, PI); Default is PI/4, PI/2 Definition at line 159 of file point_light.cpp. References _SpotAngleBegin, _SpotAngleEnd, NLMISC::clamp(), computeSpotAttenuationFactors(), and NLMISC::Pi. Referenced by NL3D::CPointLightUser::setupSpotAngle().
00160 {
00161 clamp(spotAngleBegin, 0.f, float(Pi));
00162 clamp(spotAngleEnd, spotAngleBegin, float(Pi));
00163 _SpotAngleBegin= spotAngleBegin;
00164 _SpotAngleEnd= spotAngleEnd;
00165
00166 // update factors.
00167 computeSpotAttenuationFactors();
00168 }
|
|
|
setup the spot Direction. Usefull only if SpotLight. Normalized internally Default is (0, 1, 0) Definition at line 172 of file point_light.cpp. References _SpotDirection, and NLMISC::CVector::normalize(). Referenced by NL3D::CPointLightModel::traverseLight().
00173 {
00174 _SpotDirection= dir;
00175 _SpotDirection.normalize();
00176 }
|
|
|
Definition at line 217 of file point_light.h. Referenced by operator=(). |
|
|
Definition at line 222 of file point_light.h. Referenced by computeAttenuationFactors(), computeLinearAttenuation(), CPointLight(), getAttenuationBegin(), operator=(), serial(), and setupAttenuation(). |
|
|
Definition at line 222 of file point_light.h. Referenced by computeAttenuationFactors(), computeLinearAttenuation(), CPointLight(), getAttenuationEnd(), operator=(), serial(), and setupAttenuation(). |
|
|
Definition at line 224 of file point_light.h. Referenced by operator=(). |
|
|
Definition at line 232 of file point_light.h. Referenced by computeLinearAttenuation(), computeSpotAttenuationFactors(), CPointLight(), and operator=(). |
|
|
Definition at line 218 of file point_light.h. Referenced by operator=(). |
|
|
Referenced by purge(). |
|
|
Definition at line 241 of file point_light.h. Referenced by appendLightedModel(), removeLightedModel(), and resetLightedModels(). |
|
|
Definition at line 225 of file point_light.h. Referenced by operator=(). |
|
|
Definition at line 234 of file point_light.h. Referenced by computeLinearAttenuation(), computeSpotAttenuationFactors(), CPointLight(), and operator=(). |
|
|
Definition at line 223 of file point_light.h. Referenced by computeAttenuationFactors(), computeLinearAttenuation(), and operator=(). |
|
|
Definition at line 214 of file point_light.h. Referenced by operator=(). |
|
|
Definition at line 226 of file point_light.h. Referenced by operator=(). |
|
|
Definition at line 219 of file point_light.h. Referenced by operator=(). |
|
|
Definition at line 230 of file point_light.h. Referenced by computeSpotAttenuationFactors(), CPointLight(), getSpotAngleBegin(), operator=(), serial(), and setupSpotAngle(). |
|
|
Definition at line 231 of file point_light.h. Referenced by computeSpotAttenuationFactors(), CPointLight(), getSpotAngleEnd(), operator=(), serial(), and setupSpotAngle(). |
|
|
Definition at line 229 of file point_light.h. Referenced by computeLinearAttenuation(), CPointLight(), getSpotDirection(), operator=(), serial(), setupDriverLight(), and setupSpotDirection(). |
|
|
Definition at line 235 of file point_light.h. Referenced by computeSpotAttenuationFactors(), CPointLight(), operator=(), and setupDriverLight(). |
|
|
Definition at line 211 of file point_light.h. Referenced by operator=(). |
1.3.6