查看: 1848|回复: 5

billboard包围盒

[复制链接]

该用户从未签到

发表于 2009-11-9 14:32:05 | 显示全部楼层 |阅读模式
我想对billboard计算包围盒,代码如下:
virtual void apply( osg::Billboard &billboard )
{
   osg::BoundingBox bbox;
   for(  unsigned int i = 0; i < billboard.getNumDrawables(); ++i )
   {
    osg::Geometry* geom = dynamic_cast<osg::Geometry*>(billboard.getDrawable(i));
    bbox.expandBy( billboard.getDrawable( i )->getBound());
    osg::MatrixList worldMatrices = geom->getWorldMatrices();
    matrixWorld.identity();  
    for(osg::MatrixList::iterator itr1 = worldMatrices.begin();itr1 != worldMatrices.end();++itr1)
    {
     osg::Matrix& matrix = *itr1;
     matrixWorld = matrix * matrixWorld;
    }
   }
   osg::BoundingBox bboxTrans;
   
   for(  unsigned int i = 0; i < billboard.getNumDrawables(); ++i )  
   {
    osg::Vec3 xvec = bbox.corner( i ) * matrixWorld;
    bboxTrans.expandBy( xvec );
   }
   m_boundingBox.expandBy( bboxTrans );
   traverse( billboard );
}
请问这样写有什么问题吗?我这样子写就是不能进行碰撞检测

该用户从未签到

发表于 2009-11-9 15:49:21 | 显示全部楼层
billboard自己会计算包围盒的,请参看它的源代码

该用户从未签到

 楼主| 发表于 2009-11-9 16:17:21 | 显示全部楼层
谢谢array,但是现在还有问题:

  1. virtual void apply( osg::Billboard &billboard )
  2. {
  3.                osg::BoundingBox bbox;
  4.         for(  unsigned int i = 0; i < billboard.getNumDrawables(); ++i )
  5.         {
  6.             osg::Geometry* geom = dynamic_cast<osg::Geometry*>(billboard.getDrawable(i));
  7.             sphere = geom->computeBound();
  8.         }
  9.         osg::BoundingBox &getBoundSphere() { return sphere; }
复制代码
在使用的时候,我是这样子的:

  1. BillboardVisitor billboardVisitor;
  2. model->accept(billboardVisitor);       
  3. billboardVisitor.getBoundSphere();
复制代码
但是还是不能进行碰撞检测,我这样子对吗?

该用户从未签到

发表于 2009-11-9 16:26:34 | 显示全部楼层
很遗憾的是,我始终不知道您要做什么。

您不是用IntersectionVisitor来完成求交测试的吗?或者您在实现过程中从不参考它的代码吗?

该用户从未签到

 楼主| 发表于 2009-11-9 16:39:05 | 显示全部楼层
4# array
是这样子的,我想对一个osg文件中所有的billboard树进行碰撞检测,所以我先对结点进行遍历,在计算包围盒,然后对其进行碰撞检测。
我仿照一些例子做的,但是总是不能成功,我现在也找不出来是什么问题了,想请您帮我看看这样子的思路对吗,谢谢!

该用户从未签到

发表于 2009-11-9 17:00:44 | 显示全部楼层
您测试一下计算包围盒得到的结果是否正确就可以了;思路本身不会有什么问题,主要看您自己怎样去实现了——这里已经没有OSG什么事情了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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