我做了一个复合形状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()在父级引用系中返回。虽然无法在文档中找到它。