获取btCollisionShape当前变换

时间:2013-11-17 17:38:15

标签: c++ visual-studio opengl bullet bulletphysics

我做了一个复合形状compound = new btCompoundShape();

然后我在化合物中添加了碰撞形状:

btCollisionShape* turretShape = new btBoxShape(btVector3(0.4f, 0.2f, 1.2f));
btTransform turretTrans;
turretTrans.setIdentity();
turretTrans.setOrigin(btVector3(0.0f, 2.2f, 0.0f));
compound->addChildShape(turretTrans, turretShape);

然后将整合的形状转化为刚体,然后作为底盘添加到车辆raycaster中:

m_carChassis = CreateRigidBody(2000, tr, compound);
m_vehicle = new btRaycastVehicle(m_tuning, m_carChassis, m_vehicleRayCaster);

车辆与它的车轮,底盘和炮塔一起移动,但我似乎无法掌握更新的炮塔变换。 每当我尝试这样的事情时:

compound->getChildTransform(1).getOpenGLMatrix(mturret);

我总是得到它最初创建的炮塔的初始位置。

现在,对于车轮,我可以这样做:

m_vehicle->getWheelInfo(i).m_worldTransform.getOpenGLMatrix(mwheel);

对于底盘,我可以这样做:

m_vehicle->getChassisWorldTransform().getOpenGLMatrix(mchassis);

但我不知道如何抓住炮塔碰撞形状更新变换?

请注意,在我需要这些信息的地方,我可以访问化合物和turretShape(实际的btCollisionShape)。

1 个答案:

答案 0 :(得分:3)

我现在不记得了,但我认为你必须将chasis world transform和childs(turrets)的矩阵相乘,因为getChildTransform()在父参考帧中返回。但是在文档中找不到它。