查看: 1086|回复: 3

透明显示时如何在各方向都能看清?

[复制链接]

该用户从未签到

发表于 2014-2-8 04:39:23 | 显示全部楼层 |阅读模式
我创建了一个平面,贴了个图在上面并且设置了透明材质
  1. osg::StateSet* stateset = geom->getOrCreateStateSet();
  2. stateset->setMode(GL_REPLACE,osg::StateAttribute::ON);
  3. stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);

  4. osg::ref_ptr<osg::Material> material = new osg::Material;

  5. osg::ref_ptr<osg::TessellationHints> hints = new osg::TessellationHints;
  6. hints->setDetailRatio(0.5);
  7. material->setAmbient(osg::Material::FRONT_AND_BACK,osg::Vec4(1.0,1.0,1.0,1.0));
  8. material->setDiffuse(osg::Material::FRONT_AND_BACK,osg::Vec4(1.0,1.0,1.0,0.5));
  9. material->setSpecular(osg::Material::FRONT_AND_BACK,osg::Vec4(1.0,1.0,1.0,1.0));
  10. material->setShininess(osg::Material::FRONT_AND_BACK,6.0);

  11. geode->getOrCreateStateSet()->setAttributeAndModes(material,osg::StateAttribute::ON);
  12. geode->getOrCreateStateSet()->setMode(GL_BLEND,osg::StateAttribute::ON);
  13. geode->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON);
  14. geode->getOrCreateStateSet()->setTextureAttributeAndModes(0,texture,osg::StateAttribute::ON);
复制代码

现在的问题是设置好法线,只有一个面能够清楚显示贴图,另一面很不清楚。
front.png back.png
我尝试打开双面光照,似乎也没有效果。关闭光照的话就看不出透明了。
  1. geom->getOrCreateStateSet()->setMode( GL_LIGHT_MODEL_TWO_SIDE,osg::StateAttribute::ON|        osg::StateAttribute::PROTECTED);
复制代码

请问应该如何才能在各个角度都能看清这个透明平面上的贴图呢?

该用户从未签到

发表于 2014-2-8 09:21:21 | 显示全部楼层
法线正方向那一面是亮的,法线反方向那面是暗的。你给出双向的法线估计就没有问题了。

该用户从未签到

 楼主| 发表于 2014-2-11 05:51:32 | 显示全部楼层
请问怎么添加双向的法线?

该用户从未签到

 楼主| 发表于 2014-2-11 06:07:08 | 显示全部楼层
翻老帖找到个双面渲染的例子
  1. osg::LightModel* lm = new osg::LightModel;
  2. lm->setTwoSided(true);
  3. geom->getOrCreateStateSet()->setAttributeAndModes(lm,osg::StateAttribute::ON);
复制代码

不过我还是比较感兴趣有没有设置所谓双向法线的方法。

另外,开启透明后图片整体偏暗,能不能调得更清晰一点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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