查看: 2391|回复: 3

请教 关于渲染顺序和文字显示的问题

[复制链接]

该用户从未签到

发表于 2009-7-11 00:59:58 | 显示全部楼层 |阅读模式
请教 关于渲染顺序和文字显示的问题

最近在向场景中加文字,遇到了很多问题,对场景中的文字的渲染有些不理解。

比如下面图1中的场景 我创建了三个geode,按照离视点由远及近的顺序依次是:

蓝色标志牌,文字,灰色面片。文字和标志牌之间有一定距离,没有贴合。

依次把三个节点添加到场景中,

然后利用setRenderBinDetails()函数设置标牌的Binnum为1,设置文字的Binnum为2,BinName都是"RenderBin".

渲染顺序应该是:灰色面片,蓝色标牌,文字;

让我不理解的是:为什么场景中的文字可以透过灰色面片被看到?(图2)

如果文字可以透过灰色面片是因为文字的渲染顺序排在在灰色面片之后的话,那么蓝色标牌也应该被看到,可是蓝色标牌是看不到的。

请问文字可以透过灰色面片的原因是什么呢?

然后我把文字的Binnum和蓝色标志牌的对调,渲染顺序变为灰色面片,文字,蓝色标牌;

这时文字就被蓝色标牌挡住了,但文字还是可以透过最前方的灰色面片。

不太理解,为什么蓝色标牌不在视点和文字之间却还是会把文字遮住呢?(图3)

感觉文字在该显示的时候没显示,不该显示的时候却显示了...呵呵

是Text与一般的geometry有什么不同吗?不知该怎样比较灵活的控制文字的显示呢?复杂场景中如果只用控制渲染顺序这种方法的话恐怕很难处理吧?

array的最长的一帧上有关于渲染树的详细讲解,

可惜本人没太看懂,不知怎么解释上面的现象,还请高手指点一下,谢谢!

[ 本帖最后由 wxxx 于 2009-7-11 01:03 编辑 ]

图1

图1

图2

图2

图3

图3

该用户从未签到

发表于 2009-7-11 01:07:19 | 显示全部楼层
OpenGL的对象是有深度值的,默认时深度较小的显示在前;而渲染顺序仅仅是在此基础上控制渲染执行的先后顺序,以实现一些微细的调整和特殊要求。渲染的先后顺序并不能改变物体之间的遮挡关系。

至于文字为什么总是显示,没有看到您的代码实现的话,我不能判断

该用户从未签到

 楼主| 发表于 2009-7-11 10:10:35 | 显示全部楼层
谢谢老大~~~这么晚了还在解决群众疾苦 呵呵 发完贴以为这么晚不会有人在就走了

文字会透过灰色面片的原因找到了 是因为我关闭了深度测试 : text->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);

现在的问题是:文字应该是和蓝色标牌在同一个面上的,为了防止文字显示的时候有闪烁,需要关闭文字的深度测试,但这样一来就会出先上面那种情况,

应该怎么解决这个矛盾呢?

我可以想到的就是不关闭深度测试,把文字和标牌之间隔开一点距离,这样可以实现正常显示,但总感觉这是投机取巧的方法 呵呵 不知有没有什么其它方法?

[ 本帖最后由 wxxx 于 2009-7-11 10:18 编辑 ]

该用户从未签到

发表于 2009-7-11 13:55:19 | 显示全部楼层
可以考虑设置PolygonOffset,给标牌或者文字都可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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