osgVolume.PropertyVisitor类是OpenSceneGraph中的一个用于遍历VolumeNode子节点属性的访问器类,它继承自osg::NodeVisitor类。该类的头文件位于<osgVolume/Property>
。
class osgVolume::PropertyVisitor : public osg::NodeVisitor
属性名称 | 类型 | 描述 |
---|---|---|
bool _override |
bool |
是否覆盖VolumeNode子节点属性的默认值,默认为false 。 |
PropertyVisitor(osg::NodeVisitor::TraversalMode traversalMode = TRAVERSE_ALL_CHILDREN)
构造函数。可选参数traversalMode
指定该访问器的遍历方式,默认为TRAVERSE_ALL_CHILDREN
。
void apply(osg::Node& node)
应用PropertyVisitor访问器到给定的Node节点。该方法将自动调用该节点的accept()
方法,然后遍历VolumeNode子节点属性。
virtual void apply(osgVolume::VolumeNode& node)
纯虚函数。当该访问器访问到VolumeNode节点时调用。
virtual void setOverride(bool override)
设置是否覆盖VolumeNode子节点属性的默认值。若override
为true
,则将使用该访问器中设置的属性值代替VolumeNode子节点的默认属性。
#include <osgVolume/Property>
#include <osgVolume/Volume>
#include <osg/ShapeDrawable>
#include <osgViewer/Viewer>
#include <osgGA/StateSetManipulator>
int main(int argc, char** argv)
{
osg::ref_ptr<osg::Box> box = new osg::Box(osg::Vec3(0,0,0), 1.0f);
osg::ref_ptr<osg::ShapeDrawable> drawable = new osg::ShapeDrawable(box);
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
geode->addDrawable(drawable);
osg::ref_ptr<osgVolume::Volume> volume = new osgVolume::Volume();
volume->addChild(geode);
volume->setVolumeData(new osgVolume::ImagePager());
volume->setAlphaThreshold(0.4f);
volume->setSampleDistance(0.5f);
osg::ref_ptr<osg::Group> root = new osg::Group();
root->addChild(volume);
// 使用StateSetManipulator来查看效果
osgViewer::Viewer viewer;
viewer.setSceneData(root);
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.run();
}
上述例子中,创建了一个包含一个简单方块绘制的Geode作为子节点的Volume节点,并设置了setAlphaThreshold
和setSampleDistance
两个属性。使用StateSetManipulator来将该节点的属性设置应用到OpenGL状态中,以查看效果。注意到此处的Volume节点重载了其子节点的属性值。