OSG笔记:获取节点的包围盒

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(); 

猜你喜欢

转载自blog.csdn.net/s634772208/article/details/130150994
今日推荐