получить текущее преобразование btCollisionShape

Я создал составную фигуру 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).


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


Ответы (1)


Я сейчас точно не помню, но я думаю, что вам нужно перемножить матрицы преобразования мира шасси и дочерние элементы (башенки), потому что getChildTransform() возвращает в системе отсчета родителей. Хотя в документах не нашел.

person Szymon Kuczur    schedule 17.11.2013
comment
Это сработало!! Вот что я сделал: btTransform chassisMatrix = m_vehicle->getChassisWorldTransform(); btTransform turretMatrix = compound->getChildTransform(1); turretMatrix *= chassisMatrix; turretMatrix.getOpenGLMatrix(mturret); Спасибо! - person bogdan.css; 17.11.2013