我创造了一种带有复合物作为底盘的子弹车,该复合物由2个物体,一个底盘和一个炮塔组成。
我可以像这样获得炮塔变换和opengl矩阵:
// get chassis and turret transforms
btTransform chassisTransform = m_vehicle->getChassisWorldTransform();
btTransform turretTransform = compound->getChildTransform(1);
// multiply transforms to get updated turret transform
turretTransform *= chassisTransform;
// get turret matrix
btScalar turretMatrix[16];
turretTransform.getOpenGLMatrix(turretMatrix);
turretTransform是btCollisionShape对象(turretShape)的变换。
我现在正试图围绕它的Y轴旋转这个炮塔。
我试过这个:
turretTransform.setRotation(btQuaternion(btVector3(0, 1, 0), angle));
其中angle是浮点数,但没有任何反应。
我肯定错过了一些东西,但并不完全了解这些轮换是如何工作的。
答案 0 :(得分:1)
我不得不改变炮塔设置并为炮塔创建了一个单独的刚体。所以现在我有两个不同的刚体,汽车和炮塔。
在完成ConstraintDemo后,我出来了:
// create constraint
btVector3 axisA(0.f, 1.f, 0.f);
btVector3 axisB(0.f, 0.f, 0.f);
btVector3 pivotA(0.f, 1.f, 0.f);
btVector3 pivotB(0.f, 0.f, 0.f);
hinge = new btHingeConstraint(*m_carChassis, *turretBody, pivotA, pivotB, axisA, axisB);
// add constraint to world
bt_dynamicsWorld->addConstraint(hinge, true);
我现在可以使用hinge->enableAngularMotor(true, 0, 1);
来停止炮塔旋转abd hinge->enableAngularMotor(true, angle, 1);
(浮动角度)以便在我想要的时候旋转它。