|
以前从论坛上下了一个ODE与OSG结合的例子,今天试了一下,出现这个问题,第一次用ODE,不知道为什么?
错误主要出现在下面这一段函数中:- //创建物理学世界
- void createODEWorld()
- {
- double length = 0.0;
- double width = 0.0;
- double height = 0.0;
- //初始化ODE引擎
- dInitODE();
- World = dWorldCreate();
- //设置地球重力,如果设置为正数,则被操作物体将漂浮
- dWorldSetGravity(World, 0.0, 0.0, -9.81);
- dWorldSetAutoDisableFlag(World, 1);
- //设置全局ERP
- dWorldSetERP(World, ERP);
- //创建冲突世界和几何对象
- Space = dSimpleSpaceCreate(0);
- //为所有刚体设置状态或者位置等信息
- //将body和geom联系起来,可以设置出一个可置位刚体的全部属性
- dMass mass;
- //设置主动运动的盒子刚体的质量、质心位置、尺寸和密度
- testBody = dBodyCreate(World);
- osg::ComputeBoundsVisitor cbv;
- osg::BoundingBox bb;
- testPAT->accept(cbv);
- bb = cbv.getBoundingBox();
- length = bb.xMax() - bb.xMin();
- width = bb.yMax() - bb.yMin();
- height = bb.zMax() - bb.zMin();
- dBodySetPosition(testBody, bb.center().x(), bb.center().y(), 0.0);
- dMassSetBoxTotal(&mass, 20.0, length, width, height);
- dBodySetMass(testBody,&mass);
- //通过给定的X/Y/Z长度信息构造主动运动的盒子刚体
- testGeom = dCreateBox(Space, length, width, height);
- dGeomSetBody(testGeom, testBody);
- dGeomSetPosition(testGeom, bb.center().x(), bb.center().y(), 0.0);
- //设置被动运动的盒子刚体的位置、尺寸和密度
- for (int i = 0; i < 3; i++)
- {
- osg::ComputeBoundsVisitor cbvt;
- osg::BoundingBox bdb;
- boxBody[i] = dBodyCreate(World);
- boxList[i]->accept(cbvt);
- bdb = cbvt.getBoundingBox();
- dBodySetPosition(boxBody[i], bdb.center().x(), bdb.center().y(), 0.0);
- dMassSetBoxTotal(&mass, 100.0, length, width, height);
- dBodySetMass(boxBody[i], &mass);
- //通过给定的X/Y/Z长度信息构造被动运动的盒子刚体
- boxGeom[i] = dCreateBox(Space, length, width, height);
- dGeomSetBody(boxGeom[i], boxBody[i]);
- dGeomSetPosition(boxGeom[i], bdb.center().x(), bdb.center().y(), 0.0);
- }
- //设置被动运动的球体刚体的位置、尺寸和密度
- sphereBody = dBodyCreate(World);
- dBodySetPosition(sphereBody, -2.0, 0.0, 10.0);
- dMassSetSphereTotal(&mass, 40.0, 1.0);
- dBodySetMass(sphereBody, &mass);
- sphereGeom = dCreateSphere(Space, 1.0);
- dGeomSetBody(sphereGeom, sphereBody);
- dGeomSetPosition(sphereGeom, -2.0, 0.0, 10.0);
- GroundGeom = dCreatePlane(Space, 0.0, 0.0, 1.0, -5.0);
- ContactGroup = dJointGroupCreate(0);
- }
复制代码 |
|