From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/a03065.html | 587 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 587 insertions(+) create mode 100644 docs/doxygen/nel/a03065.html (limited to 'docs/doxygen/nel/a03065.html') diff --git a/docs/doxygen/nel/a03065.html b/docs/doxygen/nel/a03065.html new file mode 100644 index 00000000..85bb7d52 --- /dev/null +++ b/docs/doxygen/nel/a03065.html @@ -0,0 +1,587 @@ + + +NeL: NL3D::CPatchDLMPointLight class Reference + + + +
+

NL3D::CPatchDLMPointLight Class Reference

#include <patchdlm_context.h> +

+


Detailed Description

+A PointLight for Dynamic LightMap (DLM) context for a patch. It contains precomputed values.
Author:
Lionel Berenguier

+Nevrax France

+
Date:
2002
+ +

+ +

+Definition at line 55 of file patchdlm_context.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

void compile (const CPointLight &pl, NLMISC::CRGBA landDiffMat, float maxAttEnd=30.f)

Data Fields

float AttMax
float AttMin
float B
NLMISC::CAABBox BBox
NLMISC::CBSphere BSphere
float CosMax
float CosMin
CVector Dir
float G
bool IsSpot
float OOAttDelta
float OOCosDelta
CVector Pos
float R
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
void NL3D::CPatchDLMPointLight::compile const CPointLight pl,
NLMISC::CRGBA  landDiffMat,
float  maxAttEnd = 30.f
+
+ + + + + +
+   + + +

+ +

+Definition at line 52 of file patchdlm_context.cpp. +

+References AttMax, AttMin, NLMISC::CRGBA::B, NLMISC::CBSphere::Center, CosMax, CosMin, Dir, NLMISC::CRGBA::G, G, NL3D::CPointLight::getAttenuationBegin(), NL3D::CPointLight::getAttenuationEnd(), NL3D::CPointLight::getDiffuse(), NL3D::CPointLight::getPosition(), NL3D::CPointLight::getSpotAngleBegin(), NL3D::CPointLight::getSpotAngleEnd(), NL3D::CPointLight::getSpotDirection(), NL3D::CPointLight::getType(), IsSpot, min, nlassert, OOAttDelta, OOCosDelta, NLMISC::CRGBA::R, R, NLMISC::CBSphere::Radius, NLMISC::CAABBox::setCenter(), NLMISC::CAABBox::setHalfSize(), and NLMISC::sqr(). +

+

00053 {
+00054         nlassert(maxAttEnd>0);
+00055 
+00056         // copy color
+00057         R= (float) (( pl.getDiffuse().R*(landDiffMat.R+1) ) >>8);
+00058         G= (float) (( pl.getDiffuse().G*(landDiffMat.G+1) ) >>8);
+00059         B= (float) (( pl.getDiffuse().B*(landDiffMat.B+1) ) >>8);
+00060         // Copy Spot/Pos/Dir.
+00061         IsSpot= pl.getType() == CPointLight::SpotLight;
+00062         Pos= pl.getPosition();
+00063         Dir= pl.getSpotDirection();
+00064         
+00065         // compute spot params
+00066         if(IsSpot)
+00067         {
+00068                 CosMax= cosf(pl.getSpotAngleBegin());
+00069                 CosMin= cosf(pl.getSpotAngleEnd());
+00070         }
+00071         else
+00072         {
+00073                 // with tesse Values, we have always (cosSpot-CosMin) * OOCosDelta > 1.0f
+00074                 CosMax= -1;
+00075                 CosMin= -2;
+00076         }
+00077         OOCosDelta= 1.f / (CosMax-CosMin);
+00078 
+00079         // compute att params
+00080         AttMax= pl.getAttenuationEnd();
+00081         AttMin= pl.getAttenuationBegin();
+00082         // infinite pointLight?
+00083         if(AttMax==0)
+00084         {
+00085                 AttMax= maxAttEnd;
+00086                 AttMin= maxAttEnd*0.99f;
+00087         }
+00088         // To big pointLigt?
+00089         else if(AttMax>maxAttEnd)
+00090         {
+00091                 AttMax= maxAttEnd;
+00092                 AttMin= min(AttMin, maxAttEnd*0.99f);
+00093         }
+00094         // compile distance
+00095         OOAttDelta= 1.f / (AttMin-AttMax);
+00096 
+00097 
+00098         // Compute bounding sphere.
+00099         // If not a spot or if angleMin>Pi/2
+00100         if(!IsSpot || CosMin<0)
+00101         {
+00102                 // Take sphere of pointlight sphere
+00103                 BSphere.Center= Pos;
+00104                 BSphere.Radius= AttMax;
+00105                 // The bbox englobe the sphere.
+00106                 BBox.setCenter(Pos);
+00107                 BBox.setHalfSize(CVector(AttMax, AttMax, AttMax));
+00108         }
+00109         else
+00110         {
+00111                 // Compute BSphere.
+00112                 //==============
+00113 
+00114                 // compute sinus of AngleMin
+00115                 float   sinMin= sqrtf(1-sqr(CosMin));
+00116 
+00117                 // Test 2 centers: Center of radius along Dir: Pos+Dir*AttMax/2, and intersection of end cone with line (Pos,Dir)
+00118                 // Don't know why but I think they are sufficiently good :)
+00119                 // See below for computing of those centers.
+00120 
+00121                 /* compute radius of each sphere by taking max of 3 distances: distance to spotLight center, distance
+00122                         to spotLight forward extremity, and distance to spotLight circle interstion Cone/Sphere. (named DCCS)
+00123                         NB: Do the compute with radius=1 at first, then multiply later.
+00124                 */
+00125                 float   radius1= 0.5f;          // =max(0.5, 0.5); max distance to spot center and extremity center :)
+00126                 // for distance DCCS, this is the hypothenuse of (cosMin-0.5) + sinMin.
+00127                 float   dccs= sqrtf( sqr(CosMin-0.5f) + sqr(sinMin));
+00128                 // take the bigger.
+00129                 radius1= max(radius1, dccs );
+00130 
+00131                 // Same reasoning for center2.
+00132                 float   radius2= max(CosMin, 1-CosMin); // max distance to spot center and extremity center :)
+00133                 // for distance DCCS, it is simply sinMin!!
+00134                 dccs= sinMin;
+00135                 // take the bigger.
+00136                 radius2= max(radius2, dccs );
+00137 
+00138 
+00139                 // Then take the center which gives the smaller sphere
+00140                 if(radius1<radius2)
+00141                 {
+00142                         BSphere.Center= Pos + (Dir*0.5f*AttMax);
+00143                         // radius1 E [0,1], must take real size.
+00144                         BSphere.Radius= radius1 * AttMax;
+00145                 }
+00146                 else
+00147                 {
+00148                         BSphere.Center= Pos + (Dir*CosMin*AttMax);
+00149                         // radius2 E [0,1], must take real size.
+00150                         BSphere.Radius= radius2 * AttMax;
+00151                 }
+00152 
+00153 
+00154                 // Compute BBox.
+00155                 //==============
+00156                 
+00157                 // just take bbox of the sphere, even if not optimal.
+00158                 BBox.setCenter(BSphere.Center);
+00159                 float   rad= BSphere.Radius;
+00160                 BBox.setHalfSize( CVector(rad, rad, rad) );
+00161         }
+00162 }
+
+


Field Documentation

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::AttMax +
+
+ + + + + +
+   + + +

+ +

+Definition at line 73 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::AttMin +
+
+ + + + + +
+   + + +

+ +

+Definition at line 75 of file patchdlm_context.h. +

+Referenced by compile().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::B +
+
+ + + + + +
+   + + +

+ +

+Definition at line 59 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence().

+

+ + + + +
+ + +
NLMISC::CAABBox NL3D::CPatchDLMPointLight::BBox +
+
+ + + + + +
+   + + +

+ +

+Definition at line 84 of file patchdlm_context.h. +

+Referenced by NL3D::CLandscape::computeDynamicLighting().

+

+ + + + +
+ + +
NLMISC::CBSphere NL3D::CPatchDLMPointLight::BSphere +
+
+ + + + + +
+   + + +

+ +

+Definition at line 81 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and NL3D::CLandscape::computeDynamicLighting().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::CosMax +
+
+ + + + + +
+   + + +

+ +

+Definition at line 67 of file patchdlm_context.h. +

+Referenced by compile().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::CosMin +
+
+ + + + + +
+   + + +

+ +

+Definition at line 69 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
CVector NL3D::CPatchDLMPointLight::Dir +
+
+ + + + + +
+   + + +

+ +

+Definition at line 65 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::G +
+
+ + + + + +
+   + + +

+ +

+Definition at line 59 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
bool NL3D::CPatchDLMPointLight::IsSpot +
+
+ + + + + +
+   + + +

+ +

+Definition at line 61 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::OOAttDelta +
+
+ + + + + +
+   + + +

+ +

+Definition at line 77 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::OOCosDelta +
+
+ + + + + +
+   + + +

+ +

+Definition at line 71 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+

+ + + + +
+ + +
CVector NL3D::CPatchDLMPointLight::Pos +
+
+ + + + + +
+   + + +

+ +

+Definition at line 63 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence().

+

+ + + + +
+ + +
float NL3D::CPatchDLMPointLight::R +
+
+ + + + + +
+   + + +

+ +

+Definition at line 59 of file patchdlm_context.h. +

+Referenced by NL3D::CPatchDLMContext::addPointLightInfluence(), and compile().

+


The documentation for this class was generated from the following files: +
Generated on Tue Mar 16 07:00:59 2004 for NeL by + +doxygen +1.3.6
+ + -- cgit v1.2.1