[Orxonox-commit 6432] r11089 - code/trunk/src/libraries/core
landauf at orxonox.net
landauf at orxonox.net
Sun Jan 24 14:25:46 CET 2016
Author: landauf
Date: 2016-01-24 14:25:45 +0100 (Sun, 24 Jan 2016)
New Revision: 11089
Modified:
code/trunk/src/libraries/core/GlowMaterialListener.h
Log:
glow effect is now visible through transparent elements (e.g. billboards, particle effects, etc.)
Modified: code/trunk/src/libraries/core/GlowMaterialListener.h
===================================================================
--- code/trunk/src/libraries/core/GlowMaterialListener.h 2016-01-24 11:21:43 UTC (rev 11088)
+++ code/trunk/src/libraries/core/GlowMaterialListener.h 2016-01-24 13:25:45 UTC (rev 11089)
@@ -16,20 +16,38 @@
mBlackMat->getTechnique(0)->getPass(0)->setSpecular(0,0,0,0);
mBlackMat->getTechnique(0)->getPass(0)->setAmbient(0,0,0);
mBlackMat->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,0);
+
+ mTransparentMat = Ogre::MaterialManager::getSingleton().create("mGlowTransparent", "Internal");
+ mTransparentMat->getTechnique(0)->getPass(0)->setDiffuse(0,0,0,0);
+ mTransparentMat->getTechnique(0)->getPass(0)->setSpecular(0,0,0,0);
+ mTransparentMat->getTechnique(0)->getPass(0)->setAmbient(0,0,0);
+ mTransparentMat->getTechnique(0)->getPass(0)->setSelfIllumination(0,0,0);
+ mTransparentMat->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_ADD);
+ mTransparentMat->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
}
- Ogre::Technique* handleSchemeNotFound(unsigned short, const Ogre::String& schemeName, Ogre::Material*mat, unsigned short, const Ogre::Renderable*)
+ Ogre::Technique* handleSchemeNotFound(unsigned short, const Ogre::String& schemeName, Ogre::Material* mat, unsigned short, const Ogre::Renderable*)
{
if (schemeName == "glow")
{
- //LogManager::getSingleton().logMessage(">> adding glow to material: "+mat->getName());
- return mBlackMat->getTechnique(0);
+ // try to figure out if the original material is transparent. if yes, use a black transparent material, otherwise a black opaque one.
+ if (mat != nullptr && mat->getTechnique(0) != nullptr && mat->getTechnique(0)->getPass(0) != nullptr)
+ {
+ Ogre::Pass* pass = mat->getTechnique(0)->getPass(0);
+ if (pass->getDepthWriteEnabled())
+ return mBlackMat->getTechnique(0);
+ else
+ return mTransparentMat->getTechnique(0);
+ }
+ else
+ return mBlackMat->getTechnique(0);
}
return NULL;
}
private:
Ogre::MaterialPtr mBlackMat;
+ Ogre::MaterialPtr mTransparentMat;
};
}
More information about the Orxonox-commit
mailing list