[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