Changeset 9511

Show
Ignore:
Timestamp:
01/20/09 13:39:26 (3 years ago)
Author:
robert
Message:

Added AlphaFunc? support into osgVolume::AlphaFuncProperty?.

Location:
OpenSceneGraph/trunk
Files:
11 modified

Legend:

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

    r9509 r9511  
    783783                    if (_updateAlphaCutOff && cpv._afProperty.valid()) 
    784784                    { 
     785                        osg::notify(osg::NOTICE)<<"Setting afProperty to "<<v<<std::endl; 
    785786                        cpv._afProperty->setValue(v); 
    786787                    } 
     
    13461347            { 
    13471348                case(Standard): 
     1349                    layer->addProperty(new osgVolume::AlphaFuncProperty(alphaFunc)); 
    13481350                    break; 
    13491351                case(Light): 
     1352                    layer->addProperty(new osgVolume::AlphaFuncProperty(alphaFunc)); 
    13501353                    layer->addProperty(new osgVolume::LightingProperty); 
    13511354                    break; 
     
    13541357                    break; 
    13551358                case(MaximumIntensityProjection): 
     1359                    layer->addProperty(new osgVolume::AlphaFuncProperty(alphaFunc)); 
    13561360                    layer->addProperty(new osgVolume::MaximumIntensityProjectionProperty); 
    13571361                    break; 
    13581362            } 
    13591363             
     1364         
     1365            tile->setVolumeTechnique(new osgVolume::ShaderTechnique); 
     1366        } 
     1367        else 
     1368        { 
    13601369            layer->addProperty(new osgVolume::AlphaFuncProperty(alphaFunc)); 
    1361          
    1362             tile->setVolumeTechnique(new osgVolume::ShaderTechnique); 
    1363         } 
    1364         else 
    1365         { 
    13661370            tile->setVolumeTechnique(new osgVolume::FixedFunctionTechnique); 
    13671371        } 
  • OpenSceneGraph/trunk/include/osgVolume/Property

    r9503 r9511  
    1717#include <osg/TransferFunction> 
    1818#include <osg/Uniform> 
     19#include <osg/AlphaFunc> 
    1920 
    2021#include <osgVolume/Export> 
     
    151152 
    152153        /** Set the value.*/ 
    153         void setValue(float v) { _uniform->set(v); } 
     154        virtual void setValue(float v) { _uniform->set(v); } 
    154155 
    155156        /** Get the value.*/ 
     
    199200        virtual void accept(PropertyVisitor& pv) { pv.apply(*this); } 
    200201 
     202        virtual void setValue(float v); 
     203         
     204        osg::AlphaFunc* getAlphaFunc() { return _alphaFunc.get(); } 
     205 
     206        const osg::AlphaFunc* getAlphaFunc() const { return _alphaFunc.get(); } 
     207 
     208 
    201209    protected: 
    202210     
    203211        virtual ~AlphaFuncProperty() {} 
     212         
     213        osg::ref_ptr<osg::AlphaFunc> _alphaFunc; 
    204214}; 
    205215 
  • OpenSceneGraph/trunk/src/osgVolume/FixedFunctionTechnique.cpp

    r9504 r9511  
    184184    stateset->setMode(GL_LIGHTING,osg::StateAttribute::ON); 
    185185    stateset->setMode(GL_BLEND,osg::StateAttribute::ON); 
    186     stateset->setAttributeAndModes(new osg::AlphaFunc(osg::AlphaFunc::GREATER,alphaFuncValue), osg::StateAttribute::ON); 
     186     
     187    if (cpv._afProperty.valid()) 
     188    { 
     189        stateset->setAttributeAndModes(cpv._afProperty->getAlphaFunc(), osg::StateAttribute::ON); 
     190    } 
     191    else 
     192    { 
     193        stateset->setAttributeAndModes(new osg::AlphaFunc(osg::AlphaFunc::GREATER,alphaFuncValue), osg::StateAttribute::ON); 
     194    } 
    187195     
    188196    osg::Material* material = new osg::Material; 
  • OpenSceneGraph/trunk/src/osgVolume/Property.cpp

    r9503 r9511  
    107107    ScalarProperty("AlphaFuncValue",value) 
    108108{ 
     109    _alphaFunc = new osg::AlphaFunc(osg::AlphaFunc::GREATER, value); 
    109110} 
    110111 
     
    112113    ScalarProperty(afp, copyop) 
    113114{ 
     115    _alphaFunc = new osg::AlphaFunc(osg::AlphaFunc::GREATER, getValue()); 
     116} 
     117 
     118void AlphaFuncProperty::setValue(float v) 
     119{ 
     120    _uniform->set(v);  
     121    _alphaFunc->setReferenceValue(v); 
    114122} 
    115123 
  • OpenSceneGraph/trunk/src/osgVolume/ShaderTechnique.cpp

    r9508 r9511  
    301301        stateset->addUniform(transpancy); 
    302302 
    303         osg::Uniform* alphaCutOff = new osg::Uniform("alphaCutOff",alphaFuncValue); 
    304         stateset->addUniform(alphaCutOff); 
     303        if (cpv._afProperty.valid()) 
     304        { 
     305            stateset->addUniform(cpv._afProperty->getUniform()); 
     306        } 
    305307 
    306308        stateset->setMode(GL_CULL_FACE, osg::StateAttribute::ON); 
  • OpenSceneGraph/trunk/src/osgVolume/Shaders/volume_frag.cpp

    r9491 r9511  
    22                     "uniform float sampleDensity;\n" 
    33                     "uniform float transparency;\n" 
    4                      "uniform float alphaCutOff;\n" 
     4                     "uniform float AlphaFuncValue;\n" 
    55                     "\n" 
    66                     "varying vec4 cameraPos;\n" 
     
    7575                     "        vec4 color = texture3D( baseTexture, texcoord);\n" 
    7676                     "        float r = color[3]*transparency;\n" 
    77                      "        if (r>alphaCutOff)\n" 
     77                     "        if (r>AlphaFuncValue)\n" 
    7878                     "        {\n" 
    7979                     "            fragColor.xyz = fragColor.xyz*(1.0-r)+color.xyz*r;\n" 
     
    9393                     "\n" 
    9494                     "    if (fragColor.w>1.0) fragColor.w = 1.0; \n" 
    95                      "    if (fragColor.w<alphaCutOff) discard;\n" 
     95                     "    if (fragColor.w<AlphaFuncValue) discard;\n" 
    9696                     "    \n" 
    9797                     "    gl_FragColor = fragColor;\n" 
  • OpenSceneGraph/trunk/src/osgVolume/Shaders/volume_mip_frag.cpp

    r9491 r9511  
    22                         "uniform float sampleDensity;\n" 
    33                         "uniform float transparency;\n" 
    4                          "uniform float alphaCutOff;\n" 
     4                         "uniform float AlphaFuncValue;\n" 
    55                         "\n" 
    66                         "varying vec4 cameraPos;\n" 
     
    8686                         "\n" 
    8787                         "    if (fragColor.w>1.0) fragColor.w = 1.0; \n" 
    88                          "    if (fragColor.w<alphaCutOff) discard;\n" 
     88                         "    if (fragColor.w<AlphaFuncValue) discard;\n" 
    8989                         "    \n" 
    9090                         "    gl_FragColor = fragColor;\n" 
  • OpenSceneGraph/trunk/src/osgVolume/Shaders/volume_n_frag.cpp

    r9491 r9511  
    33                       "uniform float sampleDensity;\n" 
    44                       "uniform float transparency;\n" 
    5                        "uniform float alphaCutOff;\n" 
     5                       "uniform float AlphaFuncValue;\n" 
    66                       "\n" 
    77                       "varying vec4 cameraPos;\n" 
     
    104104                       "        float r = color[3]*transparency;\n" 
    105105                       "#endif        \n" 
    106                        "        if (r>alphaCutOff)\n" 
     106                       "        if (r>AlphaFuncValue)\n" 
    107107                       "        {\n" 
    108108                       "            fragColor.xyz = fragColor.xyz*(1.0-r)+color.xyz*r;\n" 
  • OpenSceneGraph/trunk/src/osgVolume/Shaders/volume_tf_frag.cpp

    r9491 r9511  
    33                        "uniform float sampleDensity;\n" 
    44                        "uniform float transparency;\n" 
    5                         "uniform float alphaCutOff;\n" 
     5                        "uniform float AlphaFuncValue;\n" 
    66                        "\n" 
    77                        "varying vec4 cameraPos;\n" 
     
    7878                        "\n" 
    7979                        "        float r = color[3]*transparency;\n" 
    80                         "        if (r>alphaCutOff)\n" 
     80                        "        if (r>AlphaFuncValue)\n" 
    8181                        "        {\n" 
    8282                        "            fragColor.xyz = fragColor.xyz*(1.0-r)+color.xyz*r;\n" 
     
    9696                        "\n" 
    9797                        "    if (fragColor.w>1.0) fragColor.w = 1.0; \n" 
    98                         "    if (fragColor.w<alphaCutOff) discard;\n" 
     98                        "    if (fragColor.w<AlphaFuncValue) discard;\n" 
    9999                        "    \n" 
    100100                        "    gl_FragColor = fragColor;\n" 
  • OpenSceneGraph/trunk/src/osgVolume/Shaders/volume_tf_mip_frag.cpp

    r9491 r9511  
    33                            "uniform float sampleDensity;\n" 
    44                            "uniform float transparency;\n" 
    5                             "uniform float alphaCutOff;\n" 
     5                            "uniform float AlphaFuncValue;\n" 
    66                            "\n" 
    77                            "varying vec4 cameraPos;\n" 
     
    8888                            "\n" 
    8989                            "    if (fragColor.w>1.0) fragColor.w = 1.0; \n" 
    90                             "    if (fragColor.w<alphaCutOff) discard;\n" 
     90                            "    if (fragColor.w<AlphaFuncValue) discard;\n" 
    9191                            "    gl_FragColor = fragColor;\n" 
    9292                            "}\n" 
  • OpenSceneGraph/trunk/src/osgVolume/Shaders/volume_tf_n_frag.cpp

    r9491 r9511  
    44                          "uniform float sampleDensity;\n" 
    55                          "uniform float transparency;\n" 
    6                           "uniform float alphaCutOff;\n" 
     6                          "uniform float AlphaFuncValue;\n" 
    77                          "\n" 
    88                          "varying vec4 cameraPos;\n" 
     
    9191                          "\n" 
    9292                          "        float r = normal[3]*transparency;\n" 
    93                           "        if (r>alphaCutOff)\n" 
     93                          "        if (r>AlphaFuncValue)\n" 
    9494                          "        {\n" 
    9595                          "            fragColor.xyz = fragColor.xyz*(1.0-r)+color.xyz*r;\n"