查看: 1557|回复: 2

osg自定义裁剪回调 的时机的疑问

[复制链接]

该用户从未签到

发表于 2014-3-19 21:01:06 | 显示全部楼层 |阅读模式
大家好!!!
       
        我现在构造了一个场景的八叉树 大概结构是
                root----->8个group---->8个group        这样的

        我希望在视锥体裁剪的时候 对 有着八叉树的group节点进行包围盒测试 不通过就结束他和他的孩子的测试

        我是这么继承nodecallback做的: 然后所有的group节点setcullcallback(  mycallback )

        在nodecallback中 我试着这样裁剪

       
        osg:olytope frustum;
        frustum.setToUnitFrustum();
        frustum.transformProvidingInverse(
        _viewer->getCameraManipulator()->getInverseMatrix() *
        _viewer->getCamera()->getProjectionMatrix());
        //获得视锥体方程
        const osg::BoundingSphere& sphere = node->getBound();
          if ( frustum.contains( sphere ) )
                traverse(node,nv);
        //通过测试 渲染

        但是我发现 所有的包围盒都通过了测试 然后我再检查cullvisitor的源码时候发现 apply( node ) 是先对boundsphere进行测试 然后才调用
        mycullback的 真的是这样吗? 所以导致我的测试就白费了 这样八叉树也就没法加速了啊 难道我只能继承cullvisitor 重写apply吗? 自定义的             cullvisitor又该如何用呢? 大神给点思路吧

该用户从未签到

 楼主| 发表于 2014-3-20 12:26:40 | 显示全部楼层
恩恩 我后来发现在cullvisitor中是对node的包围盒已经做了测试了

这是否说明我只要建立好八叉树 cullvisitor 在应用原始的裁剪时 就已经对包围盒进行裁剪测试了 所以我就不

需要setcullcallback了吧 但是我看效率方面也没有明显的提升 我的假设对不对呢?

该用户从未签到

发表于 2014-3-31 09:13:11 来自手机 | 显示全部楼层
您的八叉树上没有任何与渲染有关的优化,也就是没有索引层次,所以它自然不会有任何的效率提升。您可以参考vpb中的四叉树方法,结合lod节点来做这件事
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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