2

我做了一个复合形状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);

然后将复合形状转换为刚体,然后作为底盘添加到车辆光线投射器中:

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)。

4

1 回答 1

3

我现在不记得了,但我认为你必须乘以底盘世界变换和孩子(炮塔)的矩阵,因为 getChildTransform() 在父母参考框架中返回。虽然在文档中找不到它。

于 2013-11-17T18:49:41.470 回答