Changeset 13948

Show
Ignore:
Timestamp:
09/16/14 19:40:13 (24 hours ago)
Author:
robert
Message:

Changed osgvolume example to use the new tf plugin rather than having local code for reading transfer function

Location:
OpenSceneGraph/trunk
Files:
8 modified

Legend:

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

    r13944 r13948  
    665665    while(arguments.read("--sdwm", sampleDensityWhenMoving)) {} 
    666666 
     667    double sampleRatioWhenMoving = 0.0; 
     668    while(arguments.read("--srwm", sampleRatioWhenMoving)) {} 
     669 
    667670    while(arguments.read("--lod")) { sampleDensityWhenMoving = 0.02; } 
    668671 
     
    10761079        // use SampleRatio in place of SampleDensity 
    10771080        osgVolume::SampleRatioProperty* sr = new osgVolume::SampleRatioProperty(1.0f); 
     1081        osgVolume::SampleRatioWhenMovingProperty* srwm = sampleRatioWhenMoving!=0.0 ? new osgVolume::SampleRatioWhenMovingProperty(sampleRatioWhenMoving) : 0; 
    10781082 
    10791083        osgVolume::TransparencyProperty* tp = new osgVolume::TransparencyProperty(1.0); 
     
    10841088            osgVolume::CompositeProperty* cp = new osgVolume::CompositeProperty; 
    10851089            cp->addProperty(ap); 
    1086             if (useMultipass) cp->addProperty(sr); 
    1087             else cp->addProperty(sd); 
     1090            if (useMultipass) 
     1091            { 
     1092                cp->addProperty(sr); 
     1093                if (srwm) cp->addProperty(srwm); 
     1094            } 
     1095            else 
     1096            { 
     1097                cp->addProperty(sd); 
     1098                if (sdwm) cp->addProperty(sdwm); 
     1099            } 
    10881100            cp->addProperty(tp); 
    10891101 
    1090             if (sdwm) cp->addProperty(sdwm); 
    10911102            if (tfp) 
    10921103            { 
  • OpenSceneGraph/trunk/include/osgVolume/Property

    r13940 r13948  
    3636class AlphaFuncProperty; 
    3737class SampleRatioProperty; 
     38class SampleRatioWhenMovingProperty; 
    3839class SampleDensityProperty; 
    3940class SampleDensityWhenMovingProperty; 
     
    5859        virtual void apply(LightingProperty&) {} 
    5960        virtual void apply(SampleRatioProperty&) {} 
     61        virtual void apply(SampleRatioWhenMovingProperty&) {} 
    6062        virtual void apply(SampleDensityProperty&) {} 
    6163        virtual void apply(SampleDensityWhenMovingProperty&) {} 
     
    330332}; 
    331333 
    332 /** Sample density to use when the volume is static relative to the eye point or when moving if no SampleDensityWhenMovingProperty is assigned.*/ 
     334/** Sample ratioto use when the volume is static relative to the eye point or when moving if no SampleRatioWhenMovingProperty is assigned.*/ 
    333335class OSGVOLUME_EXPORT SampleRatioProperty : public ScalarProperty 
    334336{ 
     
    346348 
    347349        virtual ~SampleRatioProperty() {} 
     350}; 
     351 
     352/** Sample density to use when the volume is moving relative to the eye point.*/ 
     353class OSGVOLUME_EXPORT SampleRatioWhenMovingProperty : public ScalarProperty 
     354{ 
     355    public: 
     356 
     357        SampleRatioWhenMovingProperty(float value=1.0f); 
     358 
     359        SampleRatioWhenMovingProperty(const SampleRatioWhenMovingProperty& isp,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); 
     360 
     361        META_Object(osgVolume, SampleRatioWhenMovingProperty); 
     362 
     363        virtual void accept(PropertyVisitor& pv) { pv.apply(*this); } 
     364 
     365    protected: 
     366 
     367        virtual ~SampleRatioWhenMovingProperty() {} 
    348368}; 
    349369 
     
    383403        virtual void apply(SampleDensityWhenMovingProperty& sdp); 
    384404        virtual void apply(SampleRatioProperty& sdp); 
     405        virtual void apply(SampleRatioWhenMovingProperty& sdp); 
    385406        virtual void apply(TransparencyProperty& tp); 
    386407 
     
    393414        osg::ref_ptr<SampleDensityWhenMovingProperty>       _sampleDensityWhenMovingProperty; 
    394415        osg::ref_ptr<SampleRatioProperty>                   _sampleRatioProperty; 
     416        osg::ref_ptr<SampleRatioWhenMovingProperty>         _sampleRatioWhenMovingProperty; 
    395417        osg::ref_ptr<TransparencyProperty>                  _transparencyProperty; 
    396418 
  • OpenSceneGraph/trunk/include/osgVolume/RayTracedTechnique

    r13041 r13948  
    4848        osg::ref_ptr<osg::MatrixTransform> _transform; 
    4949 
    50         typedef std::map<osgUtil::CullVisitor::Identifier*, osg::Matrix> ModelViewMatrixMap; 
    51  
    52         OpenThreads::Mutex _mutex; 
    53         ModelViewMatrixMap _modelViewMatrixMap; 
    54  
    5550        osg::ref_ptr<osg::StateSet> _whenMovingStateSet; 
    5651}; 
  • OpenSceneGraph/trunk/include/osgVolume/VolumeTechnique

    r13041 r13948  
    4444        virtual void update(osgUtil::UpdateVisitor* nv); 
    4545 
     46        virtual bool isMoving(osgUtil::CullVisitor* nv); 
     47 
    4648        virtual void cull(osgUtil::CullVisitor* nv); 
    4749 
     
    6264        VolumeTile*    _volumeTile; 
    6365 
     66        typedef std::map<osgUtil::CullVisitor::Identifier*, osg::Matrix> ModelViewMatrixMap; 
     67        OpenThreads::Mutex _mutex; 
     68        ModelViewMatrixMap _modelViewMatrixMap; 
    6469}; 
    6570 
  • OpenSceneGraph/trunk/src/osgVolume/MultipassTechnique.cpp

    r13944 r13948  
    420420 
    421421 
     422    if (cpv._sampleRatioWhenMovingProperty.valid()) 
     423    { 
     424        _whenMovingStateSet = new osg::StateSet; 
     425        _whenMovingStateSet->addUniform(cpv._sampleRatioWhenMovingProperty->getUniform(), osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON); 
     426    } 
     427 
    422428} 
    423429 
     
    436442    if (postTraversal) 
    437443    { 
    438         // OSG_NOTICE<<"  OK need to handle postTraversal"<<std::endl; 
    439         _transform->accept(*cv); 
     444        if (_whenMovingStateSet.valid() && isMoving(cv)) 
     445        { 
     446            OSG_NOTICE<<"Using MovingStateSet"<<std::endl; 
     447            cv->pushStateSet(_whenMovingStateSet.get()); 
     448            _transform->accept(*cv); 
     449            cv->popStateSet(); 
     450        } 
     451        else 
     452        { 
     453            OSG_NOTICE<<"NOT using MovingStateSet"<<std::endl; 
     454            _transform->accept(*cv); 
     455        } 
    440456    } 
    441457    else 
  • OpenSceneGraph/trunk/src/osgVolume/Property.cpp

    r13940 r13948  
    208208} 
    209209 
     210///////////////////////////////////////////////////////////////////////////// 
     211// 
     212// SampleRatioWhenMovingProperty 
     213// 
     214SampleRatioWhenMovingProperty::SampleRatioWhenMovingProperty(float value): 
     215    ScalarProperty("SampleRatioValue",value) 
     216{ 
     217} 
     218 
     219SampleRatioWhenMovingProperty::SampleRatioWhenMovingProperty(const SampleRatioWhenMovingProperty& isp,const osg::CopyOp& copyop): 
     220    ScalarProperty(isp, copyop) 
     221{ 
     222} 
     223 
    210224 
    211225 
     
    279293void CollectPropertiesVisitor::apply(SampleDensityWhenMovingProperty& sdp) { _sampleDensityWhenMovingProperty = &sdp; } 
    280294void CollectPropertiesVisitor::apply(SampleRatioProperty& srp) { _sampleRatioProperty = &srp; } 
     295void CollectPropertiesVisitor::apply(SampleRatioWhenMovingProperty& srp) { _sampleRatioWhenMovingProperty = &srp; } 
    281296void CollectPropertiesVisitor::apply(TransparencyProperty& tp) { _transparencyProperty = &tp; } 
    282297 
     
    450465            cpv._sampleRatioProperty->setValue(sampleRatio); 
    451466        } 
     467 
     468        if (_updateSampleDensity && cpv._sampleRatioWhenMovingProperty.valid()) 
     469        { 
     470            float sampleRatio = v2*4; 
     471            OSG_NOTICE<<"Setting sample ratio to "<<sampleRatio<<std::endl; 
     472            cpv._sampleRatioWhenMovingProperty->setValue(sampleRatio); 
     473        } 
    452474    } 
    453475 
  • OpenSceneGraph/trunk/src/osgVolume/RayTracedTechnique.cpp

    r13936 r13948  
    499499    if (!_transform.valid()) return; 
    500500 
    501     if (_whenMovingStateSet.valid()) 
    502     { 
    503         bool moving = false; 
    504         { 
    505             OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    506             ModelViewMatrixMap::iterator itr = _modelViewMatrixMap.find(cv->getIdentifier()); 
    507             if (itr!=_modelViewMatrixMap.end()) 
    508             { 
    509                 osg::Matrix newModelViewMatrix = *(cv->getModelViewMatrix()); 
    510                 osg::Matrix& previousModelViewMatrix = itr->second; 
    511                 moving = (newModelViewMatrix != previousModelViewMatrix); 
    512  
    513                 previousModelViewMatrix = newModelViewMatrix; 
    514             } 
    515             else 
    516             { 
    517                 _modelViewMatrixMap[cv->getIdentifier()] = *(cv->getModelViewMatrix()); 
    518             } 
    519         } 
    520  
    521         if (moving) 
    522         { 
    523             cv->pushStateSet(_whenMovingStateSet.get()); 
    524             _transform->accept(*cv); 
    525             cv->popStateSet(); 
    526         } 
    527         else 
    528         { 
    529             _transform->accept(*cv); 
    530         } 
     501    if (_whenMovingStateSet.valid() && isMoving(cv)) 
     502    { 
     503        cv->pushStateSet(_whenMovingStateSet.get()); 
     504        _transform->accept(*cv); 
     505        cv->popStateSet(); 
    531506    } 
    532507    else 
  • OpenSceneGraph/trunk/src/osgVolume/VolumeTechnique.cpp

    r13041 r13948  
    8787    _volumeTile->osg::Group::traverse(nv); 
    8888} 
     89 
     90bool VolumeTechnique::isMoving(osgUtil::CullVisitor* cv) 
     91{ 
     92    bool moving = false; 
     93 
     94    OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
     95 
     96    OSG_NOTICE<<"cv="<<cv<<", cv->getIdentifier()="<<cv->getIdentifier()<<std::endl; 
     97 
     98    ModelViewMatrixMap::iterator itr = _modelViewMatrixMap.find(cv->getIdentifier()); 
     99    if (itr!=_modelViewMatrixMap.end()) 
     100    { 
     101        osg::Matrix newModelViewMatrix = *(cv->getModelViewMatrix()); 
     102        osg::Matrix& previousModelViewMatrix = itr->second; 
     103        moving = (newModelViewMatrix != previousModelViewMatrix); 
     104 
     105        previousModelViewMatrix = newModelViewMatrix; 
     106    } 
     107    else 
     108    { 
     109        _modelViewMatrixMap[cv->getIdentifier()] = *(cv->getModelViewMatrix()); 
     110    } 
     111    return moving; 
     112}