查看: 1183|回复: 3

关于静态场景的transform节点

[复制链接]

该用户从未签到

发表于 2010-5-14 14:17:03 | 显示全部楼层 |阅读模式
为什么culling耗时超高?场景创建代码如下:
osg::ref_ptr<osg::Group> root = new osg::Group();
osg::ref_ptr<osg::Geode> leaf = osgDB::readNodeFile(“leaf.osg")->asGeode();
for(int i = 0;i<50000;i++){
    osg::Matrixd mat;
    mat.set(...);
    osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform();
    trans->setMatrix(mat);
    root->addChild(trans.get());
    trans->addChild(leaf.get());
}

最长的一帧中说Cull步骤中“使用筛选访问器遍历场景中的节点,在遍历过程中将筛选出那些无法被用户看到的对象,并将它们裁减掉”,却不知道其对于transform节点是怎么做的,我这样做cull比draw的时间要长得多,大牛布个道把

该用户从未签到

发表于 2010-5-14 14:22:39 | 显示全部楼层
遍历时候transform节点就是联乘它的变换矩阵啊,筛选的时候根据包围盒裁剪吧

该用户从未签到

 楼主| 发表于 2010-5-14 14:30:23 | 显示全部楼层
这个包围盒在节点里被储存了吗?还是每帧都算一遍?相同的场景没用transform节点的cull耗时可以忽略不计啊,这里为啥那么高
附同样的场景:
osg::ref_ptr<osg::Group> root = new osg::Group();
osg::ref_ptr<osg::Geode> leaf = new osg::Geode();
for(int i = 0;i<50000;i++){
    leaf->addDrawable(osgDB::readNodeFile("leaf.osg")->asGeode()->GetDrawable(0));
}
root->addChild(leaf);
[url=http://www.osgchina.org/bbs/redirect.php?
goto=findpost&pid=19862&ptid=3523]2#[/url] tianxiao888

该用户从未签到

发表于 2010-5-14 17:11:04 | 显示全部楼层
只要您的总体运行时间是流畅的,那么cull和draw的时间差距很多正说明了cull的作用:它把那些不需要参与计算的节点剔除出场景,因而使得绘制的效率大大提高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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