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