// load point & distant lights from light wave scene file // distant lights in the scene is loaded as directional lights void CBSPMapData_LW::SetLight( CLightWaveSceneLoader& rLightWaveScene ) { float* pafAmbientColor = rLightWaveScene.GetAmbientColor(); float fAmbientIntensity = rLightWaveScene.GetAmbientIntensity(); if( pafAmbientColor[0] != 0 || pafAmbientColor[1] != 0 || pafAmbientColor[2] != 0 ) { if( fAmbientIntensity != 0 ) { CAmbientLight* pAmbientLight = new CAmbientLight; pAmbientLight->fIntensity = fAmbientIntensity; pAmbientLight->Color.fRed = pafAmbientColor[0]; pAmbientLight->Color.fGreen = pafAmbientColor[1]; pAmbientLight->Color.fBlue = pafAmbientColor[2]; this->m_vecpLight.push_back( pAmbientLight ); } } float* pafColor; CPointLight* pPointLight; CDirectionalLight* pDirLight; Matrix33 matOrient; for(int i=0; i<rLightWaveScene.GetNumLights(); i++) { CLWS_Light* pLWS_Light = NULL; pLWS_Light = rLightWaveScene.GetLight(i); switch( pLWS_Light->GetType() ) { case CLWS_Light::TYPE_POINT: pPointLight = new CPointLight; pafColor = pLWS_Light->GetColor(); pPointLight->Color.fRed = pafColor[0]; pPointLight->Color.fGreen = pafColor[1]; pPointLight->Color.fBlue = pafColor[2]; pPointLight->fIntensity = pLWS_Light->GetIntensity(); pPointLight->vPosition = pLWS_Light->GetPositionAt( 0 ); this->m_vecpLight.push_back( pPointLight ); break; case CLWS_Light::TYPE_DISTANT: pDirLight = new CDirectionalLight; pafColor = pLWS_Light->GetColor(); pDirLight->Color.fRed = pafColor[0]; pDirLight->Color.fGreen = pafColor[1]; pDirLight->Color.fBlue = pafColor[2]; pDirLight->fIntensity = pLWS_Light->GetIntensity(); pDirLight->vPseudoPosition = pLWS_Light->GetPositionAt( 0 ); pLWS_Light->GetOrientationAt( 0, matOrient ); pDirLight->vDirection = matOrient.GetColumn(2); this->m_vecpLight.push_back( pDirLight ); break; default: break; // ignore lights other that point / distant } } }
inline void Camera::SetOrientation( const Matrix33& matOrient ) { m_vRight = matOrient.GetColumn(0); m_vUp = matOrient.GetColumn(1); m_vFront = matOrient.GetColumn(2); }