查看: 1589|回复: 5

关于隐藏几何体的方法

[复制链接]

该用户从未签到

发表于 2014-6-24 17:47:14 | 显示全部楼层 |阅读模式
大家好,我现在有两张照片叠加显示,上边一张要设置成半透明,可以透过看到下边的照片。两张照片我都新建了一个图元四边形,但是这样的话上边的几何体就会把下边的图遮住。我尝试做如下设置(部分代码):
        osg::StateSet* dstate = new osg::StateSet;
        dstate->setMode(GL_CULL_FACE,osg::StateAttribute::OFF);
        dstate->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
        dstate->setTextureAttributeAndModes(0, texture,osg::StateAttribute::ON);
        dstate->setTextureAttribute(0, texmat);

        dstate->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);

        osg::Geode* geode = new osg::Geode;

        geode->getOrCreateStateSet()->setMode(GL_BLEND,osg::StateAttribute::ON);
        geode->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON);


纹理透明度设置:
        osg::Vec4Array* colors = new osg::Vec4Array();
        colors->push_back(osg::Vec4(0.5f, 0.5f, 0.5f, alpha));

这种情况下,当我把alpha设置成0时,上边的影像是完全不可见的,而且它的几何面也透明了,显示的效果就是没有遮挡下边的影像。但是如果我把alpha设置成其他值,比如0.4,就只是对纹理做了透明,上边的几何体还是会遮挡下边的影像。效果如下:

请高手帮我解答一下,如何设置能够保证上边的几何面不会遮挡下边的影像,谢谢。




正常重叠覆盖

正常重叠覆盖

上边一张影像的纹理alpha设置为0

上边一张影像的纹理alpha设置为0

上边一张的纹理alpha设置成0.4

上边一张的纹理alpha设置成0.4

该用户从未签到

发表于 2014-6-24 22:59:25 | 显示全部楼层
不太明白你的意思。不过设置纹理透明,可以通过设置matrial->diffuse参数设置纹理透明。我觉得可以实现你想要的效果

该用户从未签到

 楼主| 发表于 2014-6-25 09:03:24 | 显示全部楼层
JacaYang 发表于 2014-6-24 22:59
不太明白你的意思。不过设置纹理透明,可以通过设置matrial->diffuse参数设置纹理透明。我觉得可以实现你想 ...

您的意思是不是把几何体的材质设置成透明的,这样几何体本身就透明了?

该用户从未签到

发表于 2014-6-25 21:11:25 | 显示全部楼层
qiulinyao 发表于 2014-6-25 09:03
您的意思是不是把几何体的材质设置成透明的,这样几何体本身就透明了?

恩,我以前写过一个多重纹理程序,材质透明了。。几何体本身就透明了。你可以尝试下。不知道是不是你想要的结果

该用户从未签到

发表于 2014-6-26 10:12:47 | 显示全部楼层
本帖最后由 casthc 于 2014-6-26 11:08 编辑

看了一下,这种设置方法应该没有问题啊。。。是不是别的地方有问题。。。设置透明就这样设置,你倒是可以屏蔽深度缓存的写入操作,那样在实现透明体的相互遮挡时才会正确显示,但是你的场景中不存在透明体的相互遮挡,所以不设置也没有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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