|
@@ -640,7 +640,7 @@ void Converter::ConvertLight( const Model& model, const Light& light )
|
|
|
|
|
|
out_light->mName.Set( FixNodeName( model.Name() ) );
|
|
|
|
|
|
- const float intensity = light.Intensity();
|
|
|
+ const float intensity = light.Intensity() / 100.0f;
|
|
|
const aiVector3D& col = light.Color();
|
|
|
|
|
|
out_light->mColorDiffuse = aiColor3D( col.x, col.y, col.z );
|
|
@@ -650,6 +650,11 @@ void Converter::ConvertLight( const Model& model, const Light& light )
|
|
|
|
|
|
out_light->mColorSpecular = out_light->mColorDiffuse;
|
|
|
|
|
|
+ //lights are defined along negative y direction
|
|
|
+ out_light->mPosition = aiVector3D(0.0f);
|
|
|
+ out_light->mDirection = aiVector3D(0.0f, -1.0f, 0.0f);
|
|
|
+ out_light->mUp = aiVector3D(0.0f, 0.0f, -1.0f);
|
|
|
+
|
|
|
switch ( light.LightType() )
|
|
|
{
|
|
|
case Light::Type_Point:
|
|
@@ -679,17 +684,23 @@ void Converter::ConvertLight( const Model& model, const Light& light )
|
|
|
ai_assert( false );
|
|
|
}
|
|
|
|
|
|
- // XXX: how to best convert the near and far decay ranges?
|
|
|
+ float decay = light.DecayStart();
|
|
|
switch ( light.DecayType() )
|
|
|
{
|
|
|
case Light::Decay_None:
|
|
|
- out_light->mAttenuationConstant = 1.0f;
|
|
|
+ out_light->mAttenuationConstant = decay;
|
|
|
+ out_light->mAttenuationLinear = 0.0f;
|
|
|
+ out_light->mAttenuationQuadratic = 0.0f;
|
|
|
break;
|
|
|
case Light::Decay_Linear:
|
|
|
- out_light->mAttenuationLinear = 1.0f;
|
|
|
+ out_light->mAttenuationConstant = 0.0f;
|
|
|
+ out_light->mAttenuationLinear = 2.0f / decay;
|
|
|
+ out_light->mAttenuationQuadratic = 0.0f;
|
|
|
break;
|
|
|
case Light::Decay_Quadratic:
|
|
|
- out_light->mAttenuationQuadratic = 1.0f;
|
|
|
+ out_light->mAttenuationConstant = 0.0f;
|
|
|
+ out_light->mAttenuationLinear = 0.0f;
|
|
|
+ out_light->mAttenuationQuadratic = 2.0f / (decay * decay);
|
|
|
break;
|
|
|
case Light::Decay_Cubic:
|
|
|
FBXImporter::LogWarn( "cannot represent cubic attenuation, set to Quadratic" );
|