查看: 1738|回复: 4

关于透明显示几何体

[复制链接]

该用户从未签到

发表于 2012-10-22 22:03:24 | 显示全部楼层 |阅读模式
本帖最后由 lglgaigogo 于 2012-10-22 22:22 编辑

1.我自己画了4个几何体,一层层由内到外,如下图。
无标题.png
2.设置了透明。代码如下:(这个几何体的stateSet都是这个,同一个)
  1. stateSet->setMode(GL_BLEND,osg::StateAttribute::ON);
  2.         osg::ref_ptr<osg::BlendFunc> bfn = new osg::BlendFunc;
  3.         bfn->setFunction(osg::BlendFunc::SRC_ALPHA,osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
  4.         stateSet->setAttributeAndModes(bfn,osg::StateAttribute::ON);
  5.         stateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
复制代码
3.现在的问题是,物体朝向外时,可以看到内部;物体朝向内时,就看不到里面的几何体了。
如下:
无标题3.png 无标题2.png

该用户从未签到

发表于 2012-10-23 08:08:52 | 显示全部楼层
是排序的问题,第一个图中,排序是按照视点到几何体中心的距离,那么里面的那个应该是最远的,外面的应该是最近的,设置TRANSPARENT_BIN后,应该是先渲染最里面的,然后是最外面的几何体。
在第二个图中,视点到中心距离变为最外面的是最远的,最里面的是最近的,那么就是先渲染最外面的,最后渲染最里面的,但是最外面的包围体会把Zbuffer刷的很近,所以里面的ZBuffer不通过,就能渲染了。
应该是始终是最里面的先渲染,最外面的那个后渲染。

该用户从未签到

 楼主| 发表于 2012-10-23 15:28:54 | 显示全部楼层
liuzhiyu123 发表于 2012-10-23 08:08
是排序的问题,第一个图中,排序是按照视点到几何体中心的距离,那么里面的那个应该是最远的,外面的应该是 ...

我也怀疑是这样的原因,昨天我还拿了两个杯子套在一起在那想,但是怎么解决,我还是个小白。知道了原因,不知道解决办法也是干着急啊。

该用户从未签到

发表于 2012-10-23 16:23:08 | 显示全部楼层
lglgaigogo 发表于 2012-10-23 15:28
我也怀疑是这样的原因,昨天我还拿了两个杯子套在一起在那想,但是怎么解决,我还是个小白。知道了原因, ...

设置不同的stateset,不同的渲染序号

该用户从未签到

 楼主| 发表于 2012-10-25 10:39:20 | 显示全部楼层
liuzhiyu123 发表于 2012-10-23 16:23
设置不同的stateset,不同的渲染序号

谢谢你啊。
  1. stateSet[l]->setRenderBinDetails(l,"RenderBin");
复制代码
这样弄了之后就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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