#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=(). |