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 に答える