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
This commit is contained in:
parent
de191107a9
commit
fe8ba57c94
@ -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);
|
||||
|
@ -360,7 +360,6 @@ private:
|
||||
string _light_type;
|
||||
SGVec3d _position;
|
||||
SGVec3d _direction;
|
||||
SGVec4d _ambient;
|
||||
SGVec4d _diffuse;
|
||||
SGVec4d _specular;
|
||||
SGVec3d _attenuation;
|
||||
|
Loading…
Reference in New Issue
Block a user