diff options
author | cody glassman <glassmancody.info@gmail.com> | 2022-01-08 16:19:42 -0800 |
---|---|---|
committer | cody glassman <glassmancody.info@gmail.com> | 2022-01-08 16:19:42 -0800 |
commit | 8216410e7d50ffd2bf6d0a62810880eb9da83c3b (patch) | |
tree | f754c14a8be31068fa4babbe42cf52abba73d485 | |
parent | 69319cea317c1796b473978248b2e837ec5c918e (diff) |
add white ambient to spell VFX as in Morrowind
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | apps/openmw/mwrender/animation.cpp | 18 |
2 files changed, 18 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 419727c87d..3ee15e0ea3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ Bug #4602: Robert's Bodies: crash inside createInstance() Bug #4700: Editor: Incorrect command implementation Bug #4744: Invisible particles must still be processed + Bug #4949: Incorrect particle lighting Bug #5088: Sky abruptly changes direction during certain weather transitions Bug #5100: Persuasion doesn't always clamp the resulting disposition Bug #5120: Scripted object spawning updates physics system diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index bf0ed04055..732ffd33aa 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -7,6 +7,7 @@ #include <osg/BlendFunc> #include <osg/Material> #include <osg/Switch> +#include <osg/LightModel> #include <osgParticle/ParticleSystem> #include <osgParticle/ParticleProcessor> @@ -372,6 +373,19 @@ namespace private: int mEffectId; }; + + osg::ref_ptr<osg::LightModel> getVFXLightModelInstance() + { + static osg::ref_ptr<osg::LightModel> lightModel = nullptr; + + if (!lightModel) + { + lightModel = new osg::LightModel; + lightModel->setAmbientIntensity({1,1,1,1}); + } + + return lightModel; + } } namespace MWRender @@ -1547,7 +1561,9 @@ namespace MWRender parentNode->addChild(trans); osg::ref_ptr<osg::Node> node = mResourceSystem->getSceneManager()->getInstance(model, trans); - node->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); + + // Morrowind has a white ambient light attached to the root VFX node of the scenegraph + node->getOrCreateStateSet()->setAttributeAndModes(getVFXLightModelInstance(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); SceneUtil::FindMaxControllerLengthVisitor findMaxLengthVisitor; node->accept(findMaxLengthVisitor); |