From fe8ba57c9412c18681429c4cea6f37a6ef5ec14d Mon Sep 17 00:00:00 2001 From: Frederic Bouvier Date: Mon, 16 Apr 2012 08:25:59 +0200 Subject: [PATCH] Remove ambient component of additional lights It creates artifacts at edges of light volumes and should come from the main light source (sun and moon) anyway --- simgear/scene/model/SGLightAnimation.cxx | 13 ++----------- simgear/scene/model/animation.hxx | 1 - 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/simgear/scene/model/SGLightAnimation.cxx b/simgear/scene/model/SGLightAnimation.cxx index 6215efd9..33de79fb 100644 --- a/simgear/scene/model/SGLightAnimation.cxx +++ b/simgear/scene/model/SGLightAnimation.cxx @@ -45,9 +45,8 @@ static EffectMap lightEffectMap; class SGLightAnimation::UpdateCallback : public osg::NodeCallback { public: - UpdateCallback(string k, const SGExpressiond* v, SGVec4d a, SGVec4d d, SGVec4d s) : + UpdateCallback(string k, const SGExpressiond* v, SGVec4d d, SGVec4d s) : _key(k), - _ambient(a), _diffuse(d), _specular(s), _animationValue(v) @@ -64,16 +63,12 @@ public: if (iter != lightEffectMap.end()) { simgear::Effect* effect = iter->second; SGPropertyNode* params = effect->parametersProp; - params->getNode("ambient")->setValue(_ambient * dim); params->getNode("diffuse")->setValue(_diffuse * dim); params->getNode("specular")->setValue(_specular * dim); BOOST_FOREACH(osg::ref_ptr& technique, effect->techniques) { BOOST_FOREACH(osg::ref_ptr& pass, technique->passes) { - osg::Uniform* amb = pass->getUniform("Ambient"); - if (amb) - amb->set(toOsg(_ambient) * dim); osg::Uniform* dif = pass->getUniform("Diffuse"); if (dif) dif->set(toOsg(_diffuse) * dim); @@ -88,7 +83,6 @@ public: } public: string _key; - SGVec4d _ambient; SGVec4d _diffuse; SGVec4d _specular; SGSharedPtr _animationValue; @@ -108,7 +102,6 @@ SGLightAnimation::SGLightAnimation(const SGPropertyNode* configNode, _direction = SGVec3d( getConfig()->getDoubleValue("direction/x"), getConfig()->getDoubleValue("direction/y"), getConfig()->getDoubleValue("direction/z") ); double l = length(_direction); if (l > 0.001) _direction /= l; - _ambient = GET_COLOR_VALUE("ambient"); _diffuse = GET_COLOR_VALUE("diffuse"); _specular = GET_COLOR_VALUE("specular"); _attenuation = SGVec3d( getConfig()->getDoubleValue("attenuation/c"), getConfig()->getDoubleValue("attenuation/l"), getConfig()->getDoubleValue("attenuation/q") ); @@ -130,7 +123,7 @@ SGLightAnimation::createAnimationGroup(osg::Group& parent) osg::Group* grp = new osg::Group; grp->setName("light animation node"); if (_animationValue.valid()) - grp->setUpdateCallback(new UpdateCallback(_key, _animationValue, _ambient, _diffuse, _specular)); + grp->setUpdateCallback(new UpdateCallback(_key, _animationValue, _diffuse, _specular)); parent.addChild(grp); grp->setNodeMask( simgear::MODELLIGHT_BIT ); return grp; @@ -156,7 +149,6 @@ SGLightAnimation::install(osg::Node& node) SGPropertyNode* params = makeChild(effectProp, "parameters"); params->getNode("position",true)->setValue(SGVec4d(_position.x(),_position.y(),_position.z(),1.0)); params->getNode("direction",true)->setValue(SGVec4d(_direction.x(),_direction.y(),_direction.z(),0.0)); - params->getNode("ambient",true)->setValue(_ambient * dim); params->getNode("diffuse",true)->setValue(_diffuse * dim); params->getNode("specular",true)->setValue(_specular * dim); params->getNode("attenuation",true)->setValue(_attenuation); @@ -199,7 +191,6 @@ SGLightAnimation::install(osg::Node& node) SGPropertyNode* params = makeChild(effectProp, "parameters"); params->getNode("position",true)->setValue(SGVec4d(_position.x(),_position.y(),_position.z(),1.0)); - params->getNode("ambient",true)->setValue(_ambient * dim); params->getNode("diffuse",true)->setValue(_diffuse * dim); params->getNode("specular",true)->setValue(_specular * dim); params->getNode("attenuation",true)->setValue(_attenuation); diff --git a/simgear/scene/model/animation.hxx b/simgear/scene/model/animation.hxx index 57641d30..4a6b35d0 100644 --- a/simgear/scene/model/animation.hxx +++ b/simgear/scene/model/animation.hxx @@ -360,7 +360,6 @@ private: string _light_type; SGVec3d _position; SGVec3d _direction; - SGVec4d _ambient; SGVec4d _diffuse; SGVec4d _specular; SGVec3d _attenuation; -- 2.39.5