Show
Ignore:
Timestamp:
08/25/08 12:38:39 (6 years ago)
Author:
robert
Message:

Added support for event handler for non shader path, enable alpha func

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgvolume/osgvolume.cpp

    r8784 r8787  
    673673    public: 
    674674     
    675         FollowMouseCallback() 
     675        FollowMouseCallback(bool shader = false): 
     676            _shader(shader) 
    676677        { 
    677678            _updateTransparency = false; 
     
    714715                { 
    715716                    float v = (ea.getY()-ea.getYmin())/(ea.getYmax()-ea.getYmin()); 
    716                     osg::Uniform* uniform = 0; 
    717                     if (_updateTransparency && (uniform = stateset->getUniform("transparency"))) uniform->set(v); 
    718                     if (_updateAlphaCutOff && (uniform = stateset->getUniform("alphaCutOff"))) uniform->set(v); 
    719                     if (_updateSampleDensity && (uniform = stateset->getUniform("sampleDensity"))) uniform->set(powf(v,5)); 
     717                    if (_shader) 
     718                    { 
     719                        osg::Uniform* uniform = 0; 
     720                        if (_updateTransparency && (uniform = stateset->getUniform("transparency"))) uniform->set(v); 
     721                        if (_updateAlphaCutOff && (uniform = stateset->getUniform("alphaCutOff"))) uniform->set(v); 
     722                        if (_updateSampleDensity && (uniform = stateset->getUniform("sampleDensity"))) uniform->set(powf(v,5)); 
     723                    } 
     724                    else 
     725                    {                     
     726                        if (_updateAlphaCutOff) 
     727                        { 
     728                            osg::AlphaFunc* alphaFunc = dynamic_cast<osg::AlphaFunc*>(stateset->getAttribute(osg::StateAttribute::ALPHAFUNC)); 
     729                            if (alphaFunc)  
     730                            { 
     731                                alphaFunc->setReferenceValue(v); 
     732                            } 
     733                        } 
     734                         
     735                        if (_updateTransparency) 
     736                        { 
     737                            osg::Material* material = dynamic_cast<osg::Material*>(stateset->getAttribute(osg::StateAttribute::MATERIAL)); 
     738                            if (material) 
     739                            { 
     740                                material->setAlpha(osg::Material::FRONT_AND_BACK,v); 
     741                            } 
     742                        } 
     743                    } 
     744 
    720745                    break; 
    721746                } 
     
    740765        } 
    741766         
     767        bool _shader; 
    742768        bool _updateTransparency; 
    743769        bool _updateAlphaCutOff; 
     
    755781    osg::StateSet* stateset = geode->getOrCreateStateSet(); 
    756782     
    757     stateset->setEventCallback(new FollowMouseCallback); 
     783    stateset->setEventCallback(new FollowMouseCallback(true)); 
    758784     
    759785    stateset->setMode(GL_ALPHA_TEST,osg::StateAttribute::ON); 
     
    10441070    osg::StateSet* stateset = texgenNode_0->getOrCreateStateSet(); 
    10451071 
     1072    stateset->setEventCallback(new FollowMouseCallback(false)); 
     1073  
    10461074    stateset->setMode(GL_LIGHTING,osg::StateAttribute::ON); 
    10471075    stateset->setMode(GL_BLEND,osg::StateAttribute::ON); 
    1048     stateset->setAttribute(new osg::AlphaFunc(osg::AlphaFunc::GREATER,alphaFuncValue)); 
     1076    stateset->setAttributeAndModes(new osg::AlphaFunc(osg::AlphaFunc::GREATER,alphaFuncValue), osg::StateAttribute::ON); 
    10491077     
    10501078    osg::Material* material = new osg::Material; 
     
    10861114            tec->setOperand0_RGB(osg::TexEnvCombine::SRC_COLOR); 
    10871115            tec->setSource1_RGB(osg::TexEnvCombine::TEXTURE); 
     1116 
    10881117            tec->setOperand1_RGB(osg::TexEnvCombine::SRC_COLOR); 
    10891118 
     
    14981527    osgViewer::Viewer viewer(arguments); 
    14991528 
     1529    viewer.getCamera()->setClearColor(osg::Vec4(0.0f,0.0f,0.0f,0.0f)); 
     1530 
    15001531    // if user request help write it out to cout. 
    15011532    if (arguments.read("-h") || arguments.read("--help"))