查看: 2343|回复: 5

【求助】如何获取带角度的包围盒

[复制链接]

该用户从未签到

发表于 2012-9-8 13:57:46 | 显示全部楼层 |阅读模式
问题描述:
目前在做一个拖拽器,因为用的不是在包围球基础上计算出的正立方体,而已一个长方体,所以在旋转物体时发生了问题,即在初始化一个带倾斜度的包围盒时,不能得到其正确的包围盒。
图片:
下图是模型在90度角下的包围盒显示
包围盒3.png
下图是在原先基础上根据模型的旋转角度做了旋转后的结果
包围盒1.png
下图是模型在45度角下的包围盒显示,包围盒没有做角度旋转的情况
包围盒2.png
下图是模型在45度角下,包围盒也做了45度旋转的情况
包围盒4.png
问题:
      想要获取旋转角度后,正确大小的包围盒。
尝试的方案:
     将模型回复到原先的角度,然后获取正确的包围盒大小,再对包围盒做相应的旋转,以达到正确的结果。以下是参考代码,请高人指点一二。

代码:

  1. osg::ref_ptr<osg::MatrixTransform>  mt = new osg::MatrixTransform;
  2. mt->addChild(building);
  3. osg::Matrix  matrix = mt->getMatrix();
  4. mt->setMatrix(osg::Matrix::translate(matrix.getTrans()) * osg::Matrix::inverse(osg::Matrix::rotate(matrix.getRotate())) *
  5.   osg::Matrix::scale(matrix.getScale()));
  6. // 计算包围盒
  7. osg::ComputeBoundsVisitor   cbv;
  8. mt->accept(cbv);
  9. osg::BoundingBox   bb = cbv.getBoundingBox();
  10. float  xScaleFactor = (bb.xMax() - bb.xMin()) * 1.2;
  11. float  yScaleFactor = (bb.yMax() - bb.yMin()) * 1.2;
  12. float  zScaleFactor = (bb.zMax() - bb.zMin()) * 1.2;
  13. osg::Vec3  scaleFactor( (xScaleFactor > 0.0f ? xScaleFactor : 1.0), (yScaleFactor > 0.0f ? yScaleFactor : 1.0), (zScaleFactor > 0.0f ? zScaleFactor : 1.0) );
  14. setMatrix(osg::Matrix::scale(scaleFactor) * osg::Matrix::rotate(building->asTransform()->asMatrixTransform()->getMatrix().getRotate()) * osg::Matrix::translate(bb.center()));
复制代码

该用户从未签到

发表于 2012-9-8 23:08:12 | 显示全部楼层
高兴啊,以前遇到的一个问题,不过没在意。不过这是个好办法。周一的时候试试看,这是不是和OBB有异曲同工之处呢?求解答。

该用户从未签到

 楼主| 发表于 2012-9-10 08:25:10 | 显示全部楼层
本帖最后由 xulin_2005 于 2012-9-11 10:16 编辑

这里没有用到OBB的算法,只是想通过调整初始时的包围盒角度来实现带角度的包围盒。

该用户从未签到

发表于 2012-9-11 15:41:14 | 显示全部楼层
opengl默认用AABB,如用OBB还是要自己来旋转
楼主的方法可行

该用户从未签到

发表于 2012-9-13 07:50:53 | 显示全部楼层
opengl 没有包围盒的概念哦,OBB 只要确定它的父节点就可以了,在父节点下创建这个子节点的包围盒外形,这样父节点变化的时候 直接影响这个包围盒

该用户从未签到

发表于 2012-9-13 09:58:20 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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