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

最佳答案

我现在不确定,但是我认为您必须将底盘世界变换和子级(炮塔)的矩阵相乘,因为getChildTransform()在父级引用系中返回。虽然无法在文档中找到它。

10-08 08:20