как повернуть btCollisionShape

Я создал бронетранспортер с компаундом в качестве шасси, а компаунд состоит из 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 - это число с плавающей запятой, но ничего не происходит.

Я определенно что-то упускаю, но не до конца понимаю, как работают эти вращения.


person bogdan.css    schedule 18.11.2013    source источник


Ответы (1)


Пришлось изменить компоновку вагон-башня и сделать для башни отдельный жесткий корпус. Так что теперь у меня есть 2 разных твердых тела, машина и башня.

После прохождения 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);, чтобы остановить вращение башни, abdhinge->enableAngularMotor(true, angle, 1); (угол плавания), чтобы повернуть ее, когда захочу.

person bogdan.css    schedule 24.11.2013