查看: 1530|回复: 1

急救!再次询问模型设置透明度问题

[复制链接]

该用户从未签到

发表于 2012-5-21 22:33:54 | 显示全部楼层 |阅读模式
本帖最后由 garyliyong 于 2012-5-21 22:35 编辑

以前也遇到过类似的问题,一直没解决。现在时间越来越紧了,望大侠们帮忙呀!先看下现象

左边的球有斑纹现象,右边的圆柱颜色深浅会不一样

左边的球有斑纹现象,右边的圆柱颜色深浅会不一样
,左边的球有斑纹,右边的圆柱颜色深浅不一样。代码如下:

  1. #include <osgViewer/Viewer>
  2. #include <osg/Group>
  3. #include <osg/ShapeDrawable>
  4. #include <osgViewer/ViewerEventHandlers>

  5. osg::Geode* CreateTransGeode()
  6. {
  7.     osg::ref_ptr<osg::Sphere> pSphere = new osg::Sphere();
  8.     osg::ref_ptr<osg::ShapeDrawable> pSdSphere = new osg::ShapeDrawable(pSphere);
  9.     pSdSphere->setColor(osg::Vec4(1.0,0.0,0.0,0.5));

  10.     osg::ref_ptr<osg::Cylinder> pCy = new osg::Cylinder(osg::Vec3(0,5,0),1,2);
  11.     osg::ref_ptr<osg::ShapeDrawable> pSdCy = new osg::ShapeDrawable(pCy);
  12.     pSdCy->setColor(osg::Vec4(0.0,1.0,0.0,0.5));

  13.     osg::ref_ptr<osg::Geode> pGeode = new osg::Geode;
  14.     pGeode->addDrawable(pSdSphere);
  15.     pGeode->addDrawable(pSdCy);
  16.     pGeode->getOrCreateStateSet()->setMode(GL_BLEND,osg::StateAttribute::ON);
  17.     pGeode->getOrCreateStateSet()->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
  18.     return pGeode.release();
  19. }

  20. int main()
  21. {
  22.     osg::ref_ptr<osgViewer::Viewer> pView = new osgViewer::Viewer;
  23.     osg::ref_ptr<osg::Group> pGroup = new osg::Group;
  24.     pGroup->addChild(CreateTransGeode());
  25.     pView->setSceneData(pGroup.get());
  26.     pView->addEventHandler(new osgViewer::WindowSizeHandler);
  27.     pView->run();
  28.     return 0;
  29. }
复制代码

该用户从未签到

发表于 2012-5-22 09:48:29 | 显示全部楼层
透明物体要按深度排序,因此是不能存在自交叉的。这是图形学里经典的做法了,如果想要OIT的方法,那么自己去实现depth peeling,否则还是老老实实地把您的圆柱拆开成至少4个半圆柱,以避免自交叉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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