]> git.mxchange.org Git - simgear.git/commitdiff
Remove ambient component of additional lights
authorFrederic Bouvier <fredfgfs01@free.fr>
Mon, 16 Apr 2012 06:25:59 +0000 (08:25 +0200)
committerFrederic Bouvier <fredfgfs01@free.fr>
Mon, 16 Apr 2012 06:25:59 +0000 (08:25 +0200)
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
simgear/scene/model/animation.hxx

index 6215efd93060bcb28c1e7aefd7fc754f924d1f6e..33de79fb3294861405d76b71fd134455f429196c 100644 (file)
@@ -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<simgear::Technique>& technique, effect->techniques)
                 {
                     BOOST_FOREACH(osg::ref_ptr<simgear::Pass>& 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<SGExpressiond const> _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);
index 57641d308c1d7dea814c9fa4bb095fd91a510fb8..4a6b35d09d3c30cb2bec54ea819db054616ac53d 100644 (file)
@@ -360,7 +360,6 @@ private:
   string _light_type;
   SGVec3d _position;
   SGVec3d _direction;
-  SGVec4d _ambient;
   SGVec4d _diffuse;
   SGVec4d _specular;
   SGVec3d _attenuation;