osg中包围盒
- osg::Node提供了获取包围球的接口,inline const BoundingSphere& getBound() const,没有提供获取BoundingBox的接口。
- osg::Drawable与osg::Geode则提供了获取BoundingBox的接口。
需求
给定一个osg::Node, 需要获取BoundingBox
解决思路及方案
若知道osg::Node是个osg::Geode或osg::Drawable,则可以转换成指定类型来进行获取。(注:若osg::Node下子孙节点是个osg::Geode,你尝试遍历到osg::Geode,然后取出其osg::BoundingBox,就认为是osg::Node的包围盒,这是不正确的,因为此时的osg::BoundingBox是osg::Geode的局部坐标系下的包围盒。)
osg提供了一个访问器osg::ComputeBoundsVisitor,可以求出osg::Node的BoundingBox,如下:
osg::ComputeBoundsVisitor cbVisitor;
pOsgNode->accept(cbVisitor);
const osg::BoundingBox& mBBox = cbVisitor.getBoundingBox();