查看: 1616|回复: 3

请教关于设定透明的问题

[复制链接]

该用户从未签到

发表于 2009-11-20 16:44:38 | 显示全部楼层 |阅读模式
我画了个球,想把它设为透明,代码如下:
  1. osg::Geode* geode = new osg::Geode();
  2. osg::Sphere* sphere = new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),1);
  3. geode->addDrawable(new osg::ShapeDrawable(sphere));
  4. osg::StateSet* state = geode->getOrCreateStateSet();
  5. osg::BlendFunc* bf = new osg::BlendFunc();
  6. bf->setSourceAlpha(osg::BlendFunc::CONSTANT_ALPHA);
  7. bf->setDestinationAlpha(osg::BlendFunc::ONE_MINUS_CONSTANT_ALPHA);
  8. state->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
  9. state->setAttributeAndModes(bf, osg::StateAttribute::ON );
  10. osg::Depth* depth = new osg::Depth;
  11. state->setAttributeAndModes(depth, osg::StateAttribute::OFF );
  12. osg::Group* root = new osg::Group();
  13. root->addChild( geode );
  14. osgViewer::Viewer* viewer = new osgViewer::Viewer();
  15. root->setStateSet(state);
  16. viewer->setSceneData(root);
复制代码

但是运行效果是这样的
touming.JPG

该用户从未签到

发表于 2009-11-20 21:06:05 | 显示全部楼层
state->setAttributeAndModes(depth, osg::StateAttribute::OFF );

关闭深度测试怎么透明啊~~~晕

该用户从未签到

 楼主| 发表于 2009-11-21 09:33:45 | 显示全部楼层
state->setAttributeAndModes(depth, osg::StateAttribute::OFF );
改为ON一点效果也没有了,是不是要关闭深度缓存啊?

该用户从未签到

发表于 2009-11-22 15:19:37 | 显示全部楼层
您的代码似乎表明您的想法很混乱。不要把透明效果和深度缓存扯上关系~~

其实只需要先设置模型的颜色Alpha值(例如setColor(Vec4(r,g,b,0.5))),然后设置Blend就可以了:
  1. geode->getOrCreateStateSet()->setAttributeAndModes( new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) );
复制代码
当然TRANSPARENT_BIN也不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表