查看: 2142|回复: 1

OSG+ODE问题

[复制链接]

该用户从未签到

发表于 2009-6-15 14:28:13 | 显示全部楼层 |阅读模式
以前从论坛上下了一个ODE与OSG结合的例子,今天试了一下,出现这个问题,第一次用ODE,不知道为什么?
Error.jpg
错误主要出现在下面这一段函数中:
  1. //创建物理学世界
  2. void createODEWorld()
  3. {
  4.   double length = 0.0;
  5.   double width = 0.0;
  6.   double height = 0.0;

  7.   //初始化ODE引擎
  8.   dInitODE();   
  9.   World = dWorldCreate();
  10.   //设置地球重力,如果设置为正数,则被操作物体将漂浮
  11.   dWorldSetGravity(World, 0.0, 0.0, -9.81);
  12.   dWorldSetAutoDisableFlag(World, 1);
  13.   //设置全局ERP
  14.   dWorldSetERP(World, ERP);
  15.   //创建冲突世界和几何对象
  16.   Space = dSimpleSpaceCreate(0);

  17.   //为所有刚体设置状态或者位置等信息
  18.   //将body和geom联系起来,可以设置出一个可置位刚体的全部属性
  19.   dMass mass;

  20.   //设置主动运动的盒子刚体的质量、质心位置、尺寸和密度
  21.   testBody = dBodyCreate(World);
  22.   osg::ComputeBoundsVisitor cbv;
  23.   osg::BoundingBox bb;
  24.   testPAT->accept(cbv);
  25.   bb = cbv.getBoundingBox();
  26.   length = bb.xMax() - bb.xMin();
  27.   width = bb.yMax() - bb.yMin();
  28.   height = bb.zMax() - bb.zMin();

  29.   dBodySetPosition(testBody, bb.center().x(), bb.center().y(), 0.0);
  30.   dMassSetBoxTotal(&mass, 20.0, length, width, height);
  31.   dBodySetMass(testBody,&mass);

  32.   //通过给定的X/Y/Z长度信息构造主动运动的盒子刚体
  33.   testGeom = dCreateBox(Space, length, width, height);
  34.   dGeomSetBody(testGeom, testBody);
  35.   dGeomSetPosition(testGeom, bb.center().x(), bb.center().y(), 0.0);

  36.   //设置被动运动的盒子刚体的位置、尺寸和密度
  37.   for (int i = 0; i < 3; i++)
  38.   {
  39.         osg::ComputeBoundsVisitor cbvt;
  40.         osg::BoundingBox bdb;

  41.         boxBody[i] = dBodyCreate(World);

  42.         boxList[i]->accept(cbvt);
  43.         bdb = cbvt.getBoundingBox();

  44.         dBodySetPosition(boxBody[i], bdb.center().x(), bdb.center().y(), 0.0);
  45.         dMassSetBoxTotal(&mass, 100.0, length, width, height);
  46.         dBodySetMass(boxBody[i], &mass);

  47.         //通过给定的X/Y/Z长度信息构造被动运动的盒子刚体
  48.         boxGeom[i] = dCreateBox(Space, length, width, height);
  49.         dGeomSetBody(boxGeom[i], boxBody[i]);
  50.         dGeomSetPosition(boxGeom[i], bdb.center().x(), bdb.center().y(), 0.0);
  51.   }

  52.   //设置被动运动的球体刚体的位置、尺寸和密度
  53.   sphereBody = dBodyCreate(World);
  54.   dBodySetPosition(sphereBody, -2.0, 0.0, 10.0);
  55.   dMassSetSphereTotal(&mass, 40.0, 1.0);
  56.   dBodySetMass(sphereBody, &mass);

  57.   sphereGeom = dCreateSphere(Space, 1.0);
  58.   dGeomSetBody(sphereGeom, sphereBody);
  59.   dGeomSetPosition(sphereGeom, -2.0, 0.0, 10.0);

  60.   GroundGeom = dCreatePlane(Space, 0.0, 0.0, 1.0, -5.0);

  61.   ContactGroup = dJointGroupCreate(0);
  62. }
复制代码

该用户从未签到

发表于 2009-6-15 16:09:04 | 显示全部楼层
检查一下您从ComputeBoundsVisitor得到的length,width和height是否是有效的值?除此之外我个人对ode不甚了解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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