查看: 2778|回复: 12

关于纹理和背景透明的问题!

[复制链接]

该用户从未签到

发表于 2012-9-14 14:37:14 | 显示全部楼层 |阅读模式
问题如图所示:
2.jpg
1.jpg
树木,还有地形为什么都会透出osg本身的背景蓝色呢?应该怎么去设置?难道是跟max所建的模型有关系?我设置了setRenderingHint(),可是还是不能解决问题!当我加了天空盒以后,那个背景色却又透出了天空盒的颜色了!!我该怎么做呢?

该用户从未签到

发表于 2012-9-14 16:48:56 | 显示全部楼层
我也遇到过这个问题!但好像跟建模导出也有一定的关系!建模的时候把该设置为Transparent_bin的设置成了default了,地面的话是不是单面材质或者背面剔除的关系,个人感觉setRenderBinHint()不是特别靠谱,好像要一个个节点单独去设置,得在遍历函数里边下功夫!希望array大哥等人出来释疑释疑吧,呵呵!

该用户从未签到

 楼主| 发表于 2012-9-14 16:53:57 | 显示全部楼层
呃。。。。谢谢指点!相关的能想到的设置都设置了,模型不是自己建的,跟美工交流不清楚,因为建模的不懂编程,编程的不懂模型,感觉这样挺悲催的,呵呵!我再研究研究,同时坐等高手科普指导!

该用户从未签到

发表于 2012-9-14 17:08:45 | 显示全部楼层
我在想是不是设置纹理融合了!

该用户从未签到

发表于 2012-9-24 16:58:47 | 显示全部楼层
所有的树都要setRenderBinHint(TRANSPARENT_BIN),否则无法进行透明排序。经典的透明体渲染是必须进行深度排序的,否则融合不可能正确

该用户从未签到

 楼主| 发表于 2012-10-17 11:41:46 | 显示全部楼层
array 发表于 2012-9-24 16:58
所有的树都要setRenderBinHint(TRANSPARENT_BIN),否则无法进行透明排序。经典的透明体渲染是必须进行深度排 ...

array大哥,您说的这种方法我试过了,但是存在一个问题。就是我的场景当中的所有的树在同一个group类型的组节点下边,之前您也说过,必须对每一棵树都设置setRenderBinHint(Transparent_Bin)。而我发现了这样一个问题,就是如果我的场景没有外加天空盒的时候,通过setRenderBinHint(Transparent_Bin),即便就是只对组节点设置setRenderBinHint(Transparent_Bin),也不会出现上面的蓝边现象了。但是,当我的场景中加上天空盒以后,问题就出现了,这次出现的是天空盒的白边,而不是原来的osg的背景蓝边了,请问array大哥,为什么不出现osg的背景蓝色了,会出现天空盒的淡蓝色泛白边呢???是不是对天空盒也要设置什么参数呢?

该用户从未签到

发表于 2012-10-19 16:10:41 | 显示全部楼层
关键是渲染的顺序,您的天空应该是最先渲染的,请通过setRenderOrder来保证这一点

该用户从未签到

 楼主| 发表于 2012-10-22 11:22:30 | 显示全部楼层
array 发表于 2012-10-19 16:10
关键是渲染的顺序,您的天空应该是最先渲染的,请通过setRenderOrder来保证这一点

array大哥,我的天空盒是根据osgocean里边的那个skydome来做的,根据您建议的,我是这样设置渲染顺序的,因为setRenderOrder是对相机进行设置的,这个时候我新建了一个相机,然后将skydome添加到这个相机下边,然后设置相机的渲染顺序为pre_render,最后将相机添加到场景根节点下边。但是结果出来是主相机的场景没有变化,之前的天空盒不见了,渲染失败。因为之前我的场景中只有一个主相机,是通过viewer->getcamera()获得的;为什么再添加一个相机的时候就渲染失败了呢?难道是需要将渲染天空的相机与这个主相机关联起来么?还是别的地方我没有考虑到呢?按理应该跟HUD相机的设置是一样的啊,我到底哪里想错了呢?

该用户从未签到

 楼主| 发表于 2012-10-22 13:42:39 | 显示全部楼层
array 发表于 2012-10-19 16:10
关键是渲染的顺序,您的天空应该是最先渲染的,请通过setRenderOrder来保证这一点

array大哥,按您说的我是不是需要用多相机渲染场景啊,因为之前我的整个场景包括天空都是在一个相机下渲染的,这样的话我就不能按您说的方式设置渲染顺序了。不知道array大哥您还有没有别的建议呢?谢谢!

该用户从未签到

发表于 2012-10-29 09:40:29 | 显示全部楼层
为什么不能

该用户从未签到

 楼主| 发表于 2012-10-30 09:51:12 | 显示全部楼层
array 发表于 2012-10-29 09:40
为什么不能

我的理解是setRenderOrder()是设置相机渲染顺序的,但是我的程序里边只有一个相机,所有的场景(包括天空盒)都在一个主相机下渲染。在一个相机里边我好像不能用setRenderOrder()设置天空盒的渲染顺序。除非我用另外一个相机单独渲染天空盒。不知道我理解的对不对?

该用户从未签到

发表于 2012-10-30 09:54:17 | 显示全部楼层
buptronin 发表于 2012-10-30 09:51
我的理解是setRenderOrder()是设置相机渲染顺序的,但是我的程序里边只有一个相机,所有的场景(包括天 ...

设置节点的StateSet setRenderBinDetails设置渲染序号

该用户从未签到

 楼主| 发表于 2012-10-30 10:18:27 | 显示全部楼层
liuzhiyu123 发表于 2012-10-30 09:54
设置节点的StateSet setRenderBinDetails设置渲染序号

嗯,之前试过这种方法,可是我对天空盒的状态集设置这个渲染顺序的时候,天空盒直接消失了,不知道为什么?我看过array的那个最长的一帧,里边提到过这种方法,可是不知道为什么对天空盒设置就是失败的。后边的参数DepthSortedBin与RenderBin都试过,不知道是不是我什么地方使用错误了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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