|
大家好!!!
我现在构造了一个场景的八叉树 大概结构是
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又该如何用呢? 大神给点思路吧
|
|