查看: 1535|回复: 3

PRE_RENDER似乎不起作用?

[复制链接]

该用户从未签到

发表于 2011-10-24 08:39:16 | 显示全部楼层 |阅读模式
按我的理解,对一个osg::Camera的节点调用了setRenderOrder(osg::Camera::PRE_RENDER);之后,就会先于主Camera绘制,最终结果是此节点不会显示在屏幕上。我写了一个简单的工程,用于测试此推论,结果的确如此。加与不加这一语句,该节点就会显示或不显示。大概的代码如下:
osg::Camera * earth_node = new osg::Camera;
earth_node->setGraphicsContext(windows[0]);
earth_node->setViewport(0, 0, windows[0]->getTraits()->width, windows[0]->getTraits()->height);

osg::Node * earth = osgDB::readNodeFile("E:\\EarthView\\earth.ive");
earth_node->addChild( earth ); osg::EllipsoidModel em;
double x, y, z;
em.convertLatLongHeightToXYZ(cen_lat, cen_lon, cen_hgt, x, y, z);
earth_node->setViewMatrixAsLookAt(osg::Vec3d(x, y, z), osg::Vec3d(0, 0, 0), osg::Vec3d(0, 0, 1)); earth_node->setProjectionMatrixAsPerspective(30, (double)(windows[0]->getTraits()->width) / windows[0]->getTraits()->height, 1000, 50000000);
earth_node->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
earth_node->setRenderOrder(osg::Camera::PRE_RENDER); // ***** 此句关键,让本节点只用于 RTT,其本身并不显示
earth_node->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
但问题是:当我把这段代码加入到当前一个大工程中之后,本想把此节点只用于RTT,然后作淡入淡出的效果,没想到该earth_node始终显示在屏幕上(始终看到earth_node和RTT的结果),无法消失。不知哪位高手知道原因?难道有其它什么函数调用,会让 earth_node->setRenderOrder(osg::Camera::PRE_RENDER) 的设置无效吗?我在osg::Camera::PRE_RENDER之后再试过加各种不同的整数,如0xf0000000,0x7fffffff等等,earth_node始终显示在屏幕上。哪位能帮帮忙,就算一点提示也好,在此先谢过啦。

该用户从未签到

发表于 2011-10-24 10:18:40 | 显示全部楼层
难道有其它什么函数调用,会让 earth_node->setRenderOrder(osg::Camera:RE_RENDER) 的设置无效吗?
答案是不会,我不知道您的程序中到底是怎样一种逻辑,因此也我从判断

该用户从未签到

 楼主| 发表于 2011-10-24 10:34:23 | 显示全部楼层
谢谢 array 的回复。经过刚才的跟踪,发现是 viewer 中添加了其它很多 slave camera 后就出现了该节点始终显示的结果。我把添加 slave camera 的 viewer 用新new的 viewer 替换,也就是前一个 viewer 不加 slave camera ,就可以用 setRenderOrder(osg::Camera::PRE_RENDER) 让该节点不显示出来。请问谁知道添加 slave camera 和 setRenderOrder(osg::Camera::PRE_RENDER)  为什么会相互影响吗?

该用户从未签到

发表于 2011-10-26 09:38:51 | 显示全部楼层
依然不知道您的程序的逻辑,所以依然无法判断~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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