Show
Ignore:
Timestamp:
08/01/14 15:07:38 (9 hours ago)
Author:
robert
Message:

Implemented callbacks for validate(), textChanged() and returnPressed()

Files:
1 modified

Legend:

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

    r13899 r13923  
    7070#include <osgVolume/RayTracedTechnique> 
    7171#include <osgVolume/FixedFunctionTechnique> 
     72#include <osgVolume/MultipassTechnique> 
     73#include <osgVolume/VolumeScene> 
    7274 
    7375enum ShadingModel 
     
    438440    arguments.getApplicationUsage()->addCommandLineOption("--images [filenames]","Specify a stack of 2d images to build the 3d volume from."); 
    439441    arguments.getApplicationUsage()->addCommandLineOption("--shader","Use OpenGL Shading Language. (default)"); 
     442    arguments.getApplicationUsage()->addCommandLineOption("--multi-pass","Use MultipassTechnique to render volumes."); 
     443    arguments.getApplicationUsage()->addCommandLineOption("--model","load 3D model and insert into the scene along with the volume."); 
     444    arguments.getApplicationUsage()->addCommandLineOption("--hull","load 3D hull that defines the extents of the region to volume render."); 
    440445    arguments.getApplicationUsage()->addCommandLineOption("--no-shader","Disable use of OpenGL Shading Language."); 
    441446    arguments.getApplicationUsage()->addCommandLineOption("--gpu-tf","Aply the transfer function on the GPU. (default)"); 
     
    619624    while(arguments.read("--manipulator") || arguments.read("-m")) { useManipulator = true; } 
    620625 
    621  
    622626    bool useShader = true; 
    623627    while(arguments.read("--shader")) { useShader = true; } 
    624628    while(arguments.read("--no-shader")) { useShader = false; } 
     629 
     630    bool useMultipass = false; 
     631    while(arguments.read("--multi-pass")) useMultipass = true; 
     632 
     633    std::string filename; 
     634    osg::ref_ptr<osg::Group> models; 
     635    while(arguments.read("--model",filename)) 
     636    { 
     637        osg::ref_ptr<osg::Node> model = osgDB::readNodeFile(filename); 
     638        if (model.valid()) 
     639        { 
     640            if (!models) models = new osg::Group; 
     641            models->addChild(model.get()); 
     642        } 
     643    } 
     644 
     645    osg::ref_ptr<osg::Group> hulls; 
     646    while(arguments.read("--hull",filename)) 
     647    { 
     648        osg::ref_ptr<osg::Node> hull = osgDB::readNodeFile(filename); 
     649        if (hull.valid()) 
     650        { 
     651            if (!hulls) hulls = new osg::Group; 
     652            hulls->addChild(hull.get()); 
     653        } 
     654    } 
    625655 
    626656    bool gpuTransferFunction = true; 
     
    10991129 
    11001130 
    1101         tile->setVolumeTechnique(new osgVolume::RayTracedTechnique); 
     1131        if (useMultipass) 
     1132        { 
     1133            tile->setVolumeTechnique(new osgVolume::MultipassTechnique); 
     1134        } 
     1135        else 
     1136        { 
     1137            tile->setVolumeTechnique(new osgVolume::RayTracedTechnique); 
     1138        } 
    11021139    } 
    11031140    else 
     
    11661203        } 
    11671204 
     1205        if (hulls.get()) 
     1206        { 
     1207            tile->addChild(hulls.get()); 
     1208        } 
     1209 
     1210        // add add models into the scene alongside the volume 
     1211        if (models.get()) 
     1212        { 
     1213            osg::ref_ptr<osg::Group> group = new osg::Group; 
     1214            group->addChild(models.get()); 
     1215            group->addChild(loadedModel.get()); 
     1216            loadedModel = group.get(); 
     1217        } 
     1218 
     1219        // if we want to do multi-pass volume rendering we need decorate the whole scene with a VolumeScene node. 
     1220        if (useMultipass) 
     1221        { 
     1222            osg::ref_ptr<osgVolume::VolumeScene> volumeScene = new osgVolume::VolumeScene; 
     1223            volumeScene->addChild(loadedModel.get()); 
     1224            loadedModel = volumeScene.get(); 
     1225        } 
     1226 
    11681227 
    11691228        // set the scene to render