Added new osgVolume::VolumeScene and osgVolume::MultipassTechnique class shells that will be filled out to provide multi-pass volume rendering that handles mixing of

3D meshes with volume rendering and segmentation of volumes via a user defined hull mesh.
This commit is contained in:
Robert Osfield
2013-11-21 18:17:44 +00:00
parent 1b269a7711
commit 5bea13c172
6 changed files with 330 additions and 3 deletions

View File

@@ -12,10 +12,12 @@ SET(TARGET_H
${HEADER_PATH}/FixedFunctionTechnique
${HEADER_PATH}/Layer
${HEADER_PATH}/Locator
${HEADER_PATH}/MultipassTechnique
${HEADER_PATH}/Property
${HEADER_PATH}/RayTracedTechnique
${HEADER_PATH}/Version
${HEADER_PATH}/Volume
${HEADER_PATH}/VolumeScene
${HEADER_PATH}/VolumeTechnique
${HEADER_PATH}/VolumeTile
)
@@ -25,17 +27,19 @@ SET(TARGET_SRC
FixedFunctionTechnique.cpp
Layer.cpp
Locator.cpp
MultipassTechnique.cpp
Property.cpp
RayTracedTechnique.cpp
Version.cpp
Volume.cpp
VolumeScene.cpp
VolumeTechnique.cpp
VolumeTile.cpp
${OPENSCENEGRAPH_VERSIONINFO_RC}
)
SET(TARGET_LIBRARIES
SET(TARGET_LIBRARIES
osgUtil
osgDB
osgGA

View File

@@ -0,0 +1,124 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2009 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#include <osgVolume/MultipassTechnique>
#include <osgVolume/VolumeTile>
#include <osg/Geometry>
#include <osg/io_utils>
#include <osg/Program>
#include <osg/TexGen>
#include <osg/Texture1D>
#include <osg/Texture2D>
#include <osg/Texture3D>
#include <osg/TransferFunction>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
namespace osgVolume
{
MultipassTechnique::MultipassTechnique()
{
}
MultipassTechnique::MultipassTechnique(const MultipassTechnique& fft,const osg::CopyOp& copyop):
VolumeTechnique(fft,copyop)
{
}
MultipassTechnique::~MultipassTechnique()
{
}
void MultipassTechnique::init()
{
OSG_INFO<<"MultipassTechnique::init()"<<std::endl;
if (!_volumeTile)
{
OSG_NOTICE<<"MultipassTechnique::init(), error no volume tile assigned."<<std::endl;
return;
}
if (_volumeTile->getLayer()==0)
{
OSG_NOTICE<<"MultipassTechnique::init(), error no layer assigend to volume tile."<<std::endl;
return;
}
if (_volumeTile->getLayer()->getImage()==0)
{
OSG_NOTICE<<"MultipassTechnique::init(), error no image assigned to layer."<<std::endl;
return;
}
OSG_NOTICE<<"MultipassTechnique::init() Need to set up"<<std::endl;
}
void MultipassTechnique::update(osgUtil::UpdateVisitor* /*uv*/)
{
// OSG_NOTICE<<"MultipassTechnique:update(osgUtil::UpdateVisitor* nv):"<<std::endl;
}
void MultipassTechnique::cull(osgUtil::CullVisitor* cv)
{
OSG_NOTICE<<"MultipassTechnique::cull() Need to set up"<<std::endl;
}
void MultipassTechnique::cleanSceneGraph()
{
OSG_NOTICE<<"MultipassTechnique::cleanSceneGraph()"<<std::endl;
}
void MultipassTechnique::traverse(osg::NodeVisitor& nv)
{
// OSG_NOTICE<<"MultipassTechnique::traverse(osg::NodeVisitor& nv)"<<std::endl;
if (!_volumeTile) return;
// if app traversal update the frame count.
if (nv.getVisitorType()==osg::NodeVisitor::UPDATE_VISITOR)
{
if (_volumeTile->getDirty()) _volumeTile->init();
osgUtil::UpdateVisitor* uv = dynamic_cast<osgUtil::UpdateVisitor*>(&nv);
if (uv)
{
update(uv);
return;
}
}
else if (nv.getVisitorType()==osg::NodeVisitor::CULL_VISITOR)
{
osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(&nv);
if (cv)
{
cull(cv);
return;
}
}
if (_volumeTile->getDirty())
{
OSG_INFO<<"******* Doing init ***********"<<std::endl;
_volumeTile->init();
}
}
} // end of osgVolume namespace

View File

@@ -0,0 +1,36 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2009 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#include <osgVolume/VolumeScene>
#include <OpenThreads/ScopedLock>
using namespace osgVolume;
VolumeScene::VolumeScene()
{
}
VolumeScene::VolumeScene(const VolumeScene& vs, const osg::CopyOp& copyop):
osg::Group(vs,copyop)
{
}
VolumeScene::~VolumeScene()
{
}
void VolumeScene::traverse(osg::NodeVisitor& nv)
{
Group::traverse(nv);
}