как повернуть 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));

Где угол это поплавок, но ничего не происходит.

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

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

1

Другие решения

Других решений пока нет …