diff --git a/code/FBXConverter.cpp b/code/FBXConverter.cpp index 5148f23d5..ee9ce29fc 100644 --- a/code/FBXConverter.cpp +++ b/code/FBXConverter.cpp @@ -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" ); diff --git a/code/FBXDocument.h b/code/FBXDocument.h index be67e32e6..0abcdcf07 100644 --- a/code/FBXDocument.h +++ b/code/FBXDocument.h @@ -302,12 +302,12 @@ public: fbx_simple_property(DrawVolumetricLight, bool, true) fbx_simple_property(DrawGroundProjection, bool, true) fbx_simple_property(DrawFrontFacingVolumetricLight, bool, false) - fbx_simple_property(Intensity, float, 1.0f) + fbx_simple_property(Intensity, float, 100.0f) fbx_simple_property(InnerAngle, float, 0.0f) fbx_simple_property(OuterAngle, float, 45.0f) fbx_simple_property(Fog, int, 50) - fbx_simple_enum_property(DecayType, Decay, 0) - fbx_simple_property(DecayStart, int, 0) + fbx_simple_enum_property(DecayType, Decay, 2) + fbx_simple_property(DecayStart, float, 1.0f) fbx_simple_property(FileName, std::string, "") fbx_simple_property(EnableNearAttenuation, bool, false)