查看: 1970|回复: 7

如何把一个节点放在最底层

[复制链接]

该用户从未签到

发表于 2011-9-28 01:11:03 | 显示全部楼层 |阅读模式
本帖最后由 microcartoon 于 2011-9-28 01:12 编辑

我有一个openGL写的天空节点,现在我想把它作为背景,应该怎么弄?
我设置了setRenderBinDetails,而且深度检查(DEPTH_TEST)也设为ALWAYS了,但是不起作用,不知道是什么原因。
请高手帮忙!感激不尽

该用户从未签到

发表于 2011-9-28 09:00:02 | 显示全部楼层
您没有说明什么问题,也没有给出什么关键性的代码,我如何判断?

该用户从未签到

 楼主| 发表于 2011-9-28 13:34:11 | 显示全部楼层
回复 2# array


    您好,先谢谢你。我把opengl写的一个星空的模型放在drawImplemention下,封装成一个osg节点,还有另外一个osgearth节点,我把这两个节点分别画出来的时候都是正常的,但是把这两个节点一起画出来的时候只能看到星空,看不到地球。我怀疑是星空挡住了地球。因此,我想把星空先渲染,作为背景。请问实现这个功能的基本思路是什么?相关的类和函数有哪些?
    还有,我看到有些资料上实现HUD技术的时候用到了多个camera,然后设置了各个相机的渲染顺序。如果我要实现上面的功能是不是也要多个camera?

该用户从未签到

发表于 2011-9-29 08:35:00 | 显示全部楼层
您可以把地球放在一个post-render的camera下并且设置只清除DEPTH_BUFFER_BIT,看能否同时看到两者

该用户从未签到

 楼主| 发表于 2011-9-30 17:37:36 | 显示全部楼层
回复 4# array


        mRoot->addChild(mSkyNode.get());

        mRoot->addChild(mEarthNode.get());

.......................

            mEarthCamera = new osg::Camera;

        mEarthCamera->addChild(mEarthNode);

        mEarthCamera->setRenderOrder(osg::Camera:OST_RENDER);

        mEarthCamera->setClearMask(GL_DEPTH_BITS);

...........................

        mCamera = new osg::Camera;

        mViewer->setCamera(mCamera.get());

        mViewer->addSlave(mEarthCamera.get());
      
        mViewer->setSceneData(mRoot.get());

我这样弄的,但是还是不行。麻烦您看一下是不是代码不对,我刚接触osg,还不是很熟悉。

另外,有没有可能是星空节点中的opengl代码的状态影响了地球节点的状态,使地球节点不能正常显示?

如果这种方法不行,还有什么方法能达到我的目的?

麻烦您了!

该用户从未签到

发表于 2011-9-30 18:04:37 | 显示全部楼层
你的最底层的意思是不是,像天空?那你可最先渲染,不写深度!

该用户从未签到

 楼主| 发表于 2011-10-1 21:38:19 | 显示全部楼层
回复 6# fenma3422

麻烦你帮我看一下5楼的代码对不对

该用户从未签到

发表于 2011-10-7 08:56:00 | 显示全部楼层
仅仅是天空的话,不需要建立多摄影机,直接使用天空节点的stateset设置renderbin的顺序,禁写深度缓冲即可,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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