void Lighting::UpdateLights() { Matrix3 Mat; int i; ObjectState Os; LightObject *LightObj; LightState Ls; RenderLight Light; TimeValue Time = GetCOREInterface()->GetTime(); Interval valid; Point3 Pos,Target; m_Lights.clear(); for(i=0;i<sceneLights.Count();i++) { INode * Node = sceneLights[i]; Os = Node->EvalWorldState(Time); if(Os.obj ) { LightObj = (LightObject *)Os.obj; LightObj->EvalLightState(Time,valid,&Ls); Mat = Node->GetNodeTM(Time); Pos = Mat.GetTrans(); Light.m_Angle = Ls.hotsize; if(Light.m_Angle < 2.0f) { Light.m_Angle = 2.0f; } Mat = Node->GetNodeTM(Time); Light.m_Dir = Mat.GetRow(2); Light.m_Type = (RenderLightType)Ls.type; Light.m_Pos = Pos; Light.m_Dir = Light.m_Dir.Normalize(); Light.m_Color = Ls.color * Ls.intens; if(Ls.useAtten) { Light.m_Atten = true; if(Ls.attenStart <= 0.0f) { Light.m_InnerRange = 1.0f; } else { Light.m_InnerRange = 1.0f / (Ls.attenStart * 2.0f); } if(Ls.attenEnd <= 0.0f) { Light.m_OuterRange = 0.0f; } else { Light.m_OuterRange = 1.0f / (Ls.attenEnd * 2.0f); } } else { Light.m_Atten = false; Light.m_InnerRange = 0.1f; Light.m_OuterRange = 0.00001f; } m_Lights.push_back(Light); } } }