查看: 1883|回复: 5

关于透明的问题

[复制链接]

该用户从未签到

发表于 2009-5-26 16:07:51 | 显示全部楼层 |阅读模式
最近做了一个有关波浪的模拟,波浪透明,有个bug一直不能解决。希望高手能解决一下。
谢了先



在重叠部分出现很多暗条

声明:
在关闭/打开灯光,关闭/打开背面裁减的情况下均出现该问题,而且也仔细检测了法向量的

该用户从未签到

 楼主| 发表于 2009-5-26 16:10:04 | 显示全部楼层
设置材质的代码如下
osg::BlendFunc    *blendFunc = new osg::BlendFunc();
osg::BlendColor    *blendColor= new osg::BlendColor(color);
blendFunc->setSource(osg::BlendFunc::CONSTANT_ALPHA);
blendFunc->setDestination(osg::BlendFunc::ONE_MINUS_CONSTANT_ALPHA);

osg::StateSet* ss = wave->getOrCreateStateSet();
ss->setAttributeAndModes(blendFunc,osg::StateAttribute::ON);
ss->setAttributeAndModes(blendColor,osg::StateAttribute::ON);

osg::Material* mat = new osg::Material;
mat->setAmbient(osg::Material::FRONT,color/2.0);
mat->setDiffuse(osg::Material::FRONT,color);
mat->setSpecular(osg::Material::FRONT,osg::Vec4(1.0,1.0,1,1));
ss->setAttribute(mat);

该用户从未签到

发表于 2009-5-26 16:37:38 | 显示全部楼层
OpenGL中两个多边形交叠的部分必然出现闪烁(Z-Fighting),可以设置PolygonOffset来避免这一问题

该用户从未签到

发表于 2009-5-26 16:42:22 | 显示全部楼层
ati显卡不支持PolygonOffset(就是做出来的效果和预期的差很多,nv的就没问题) ,不知道还有没有其他的解决闪烁问题的办法

该用户从未签到

 楼主| 发表于 2009-5-27 10:23:45 | 显示全部楼层
仿佛不是Z-Fighting的问题。
因为我如果设置全部不透明,就不会出现那种问题。
而且我的水面是规则网格。波浪上的点只是上下动,没有左右动。所以不会出现多边形交叠的情况。
如下图
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-9-27 19:43:49 | 显示全部楼层
    这个问题不容易解决,再顶上来
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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