Show
Ignore:
Timestamp:
03/04/10 18:01:33 (4 years ago)
Author:
mplatings
Message:

Added BlendFunc? for transparent materials

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/fbx/fbxRMesh.cpp

    r11153 r11154  
    22#include <sstream> 
    33 
     4#include <osg/BlendFunc> 
    45#include <osg/Geode> 
    56#include <osg/Image> 
     
    164165    if (mti < stateSetList.size()) 
    165166    { 
     167        bool transparent = false; 
    166168        const StateSetContent& ss = stateSetList[mti]; 
    167         if(ss.first) 
    168             pGeometry->getOrCreateStateSet()->setAttributeAndModes(ss.first); 
    169         if(ss.second) 
    170             pGeometry->getOrCreateStateSet()->setTextureAttributeAndModes(0, ss.second); 
     169        if (osg::Material* pMaterial = ss.first) 
     170        { 
     171            pGeometry->getOrCreateStateSet()->setAttributeAndModes(pMaterial); 
     172            transparent = pMaterial->getDiffuse(osg::Material::FRONT).w() < 1.0f; 
     173        } 
     174        if (osg::Texture2D* pTexture = ss.second) 
     175        { 
     176            pGeometry->getOrCreateStateSet()->setTextureAttributeAndModes(0, pTexture); 
     177            if (!transparent && pTexture->getImage()) 
     178            { 
     179                transparent = pTexture->getImage()->isImageTranslucent(); 
     180            } 
     181        } 
     182 
     183        if (transparent) 
     184        { 
     185            pGeometry->getOrCreateStateSet()->setAttributeAndModes(new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); 
     186        } 
    171187    } 
    172188