int DirLight::Update(TimeValue t, const RendContext &rc, RenderGlobalContext *rgc, BOOL shadows, BOOL shadowGeomChanged) { int res = 1; BaseObjLight::Update(t,rc,rgc,shadows,shadowGeomChanged); hotsz = ls.hotsize; fallsz = ls.fallsize; fallsq = fallsz*fallsz; hotpct = ls.hotsize/ls.fallsize; ihotpct = 1.0f - hotpct; ObjectState os = inode->EvalWorldState(t); LightObject* lob = (LightObject *)os.obj; assert(os.obj->SuperClassID()==LIGHT_CLASS_ID); plRTDirLight* gl = (lob->GetInterface(I_MAXSCRIPTPLUGIN) != NULL) ? (plRTDirLight*)lob->GetReference(0) : (plRTDirLight*)lob; // JBW 4/7/99 //projector = gl->GetProjector(); aspect = 1.0f; //if (projector){ // projMap = gl->GetProjMap(); // if( projMap ) projMap->Update(t,FOREVER); // } return res; };
int OmniLight::Update(TimeValue t, const RendContext & rc, RenderGlobalContext *rgc, BOOL shadows, BOOL shadowGeomChanged) { BaseObjLight::Update(t,rc,rgc,shadows,shadowGeomChanged); ObjectState os = inode->EvalWorldState(t); LightObject* lob = (LightObject *)os.obj; assert(os.obj->SuperClassID()==LIGHT_CLASS_ID); plRTOmniLight* gl = (lob->GetInterface(I_MAXSCRIPTPLUGIN) != NULL) ? (plRTOmniLight*)lob->GetReference(0) : (plRTOmniLight*)lob; // JBW 4/7/99 decayType = gl->GetDecayType(); decayRadius = gl->GetDecayRadius(t); fov = HALFPI; // 90 degree fov int res=1; if(gl->GetTex()) gl->GetTex()->Update(t, FOREVER); //projector = gl->GetProjector(); //if (projector){ // projMap = gl->GetProjMap(); // if( projMap ) projMap->Update(t,FOREVER); //} return res; }
int SpotLight::Update(TimeValue t, const RendContext &rc, RenderGlobalContext *rgc, BOOL shadows, BOOL shadowGeomChanged) { int res = 1; BaseObjLight::Update(t,rc,rgc,shadows, shadowGeomChanged); float hs = DegToRad(ls.hotsize); float fs = DegToRad(ls.fallsize); fall_tan = (float)tan(fs/2.0f); hot_cos = (float)cos(hs/2.0f); fall_cos =(float)cos(fs/2.0f); fall_sin = (float)sin(fs/2.0f); hotpct = ls.hotsize/ls.fallsize; ihotpct = 1.0f - hotpct; ObjectState os = inode->EvalWorldState(t); LightObject* lob = (LightObject *)os.obj; assert(os.obj->SuperClassID()==LIGHT_CLASS_ID); plRTLightBase* gl = (lob->GetInterface(I_MAXSCRIPTPLUGIN) != NULL) ? (plRTLightBase*)lob->GetReference(0) : (plRTLightBase*)lob; // JBW 4/7/99 decayType = gl->GetDecayType(); decayRadius = gl->GetDecayRadius(t); projector = gl->GetProjector(); fov = std::max(fs, hs); float aspect = 1.0f; fov = 2.0f* (float)atan(tan(fov*0.5f)*sqrt(aspect)); zfac = -sz2 /(float)tan(0.5*(double)fov); xscale = zfac; yscale = -zfac*aspect; curve =(float)fabs(1.0f/xscale); rectv0.y = fall_sin * (float)sqrt(aspect); rectv1.y = fall_sin / (float)sqrt(aspect); rectv0.x = rectv1.x = fall_cos; rectv0 = Normalize(rectv0); rectv1 = Normalize(rectv1); Interval v; if (projector){ projMap = gl->GetProjMap(); if( projMap ) projMap->Update(t,v); } return res; }