osg 打开透明度
#include <osg/Node>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osg/ShapeDrawable>
osg::ref_ptr<osg::Node>createBoxA()
{
osg::ref_ptr<osg::Geode>gnode=new osg::Geode;
osg::ref_ptr<osg::ShapeDrawable>sd=new osg::ShapeDrawable(new osg::Box(osg::Vec3(0,-10,0),15,2,14));
gnode->addDrawable(sd.get());
sd->setColor(osg::Vec4(0,0.,0.5,0.3f));
gnode->getOrCreateStateSet()->setMode(GL_BLEND,osg::StateAttribute::ON);
gnode->getOrCreateStateSet()->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
return gnode;
}
osg::ref_ptr<osg::Node>createBoxB()
{
osg::ref_ptr<osg::Geode>geode=new osg::Geode;
osg::ref_ptr<osg::ShapeDrawable>sd=new osg::ShapeDrawable(new osg::Box(osg::Vec3(0,10,0),10,2,15));
geode->getOrCreateStateSet()->setMode(GL_BLEND,osg::StateAttribute::ON);
geode->getOrCreateStateSet()->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
geode->addDrawable(sd);
sd->setColor(osg::Vec4(1,0,1.0,0.3));
return geode;
}
int main(int argc, char *argv[])
{
osg::ref_ptr<osgViewer::Viewer>viewer =new osgViewer::Viewer;
osg::ref_ptr<osg::Group>root=new osg::Group;
root->addChild(osgDB::readNodeFile("cow.osg"));
root->addChild(createBoxB());
root->addChild(createBoxA());
viewer->setSceneData(root.get());
return viewer->run();
}