Bullet Physics — Ориентация твердого тела

Я пытаюсь ориентировать цилиндр в пуле. Прямо сейчас, цилиндр — единственная вещь в моделировании. Я нашел здесь несколько ответов и считаю, что я близко, но по-прежнему нет ротации. Вот моя функция по созданию цилиндра, может у кого-то что-то выскочит.

Что я делаю неправильно?

void CreateCylinder(int index, double x, double y, double z, double radius, double length, int yaw, int pitch, int roll) {

btScalar mass = 1;
btVector3 position(x,y,z);
btVector3 cylInertia(0,0,0);

//create collision shape
btCollisionShape* cylColl = new btCylinderShape(btVector3(radius,length,1));

//default motion state
btDefaultMotionState* ms = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1), btVector3(0,10,0)));

//calculate inertia
cylColl->calculateLocalInertia(mass, cylInertia);

//construction info
btRigidBody::btRigidBodyConstructionInfo cylCI(
mass,
ms,
cylColl,          //collision shape
cylInertia //inertia
);

btRigidBody *cylinder = new btRigidBody(cylCI);//orient cylinder
btTransform tr;
tr.setIdentity();
btQuaternion quat;
quat.setEuler(yaw,pitch,roll); //or quat.setEulerZYX depending on the ordering you want
tr.setRotation(quat);

//apply transform to cylinder rigid body
cylinder->setCenterOfMassTransform(tr);body[index] = cylinder;
m_dynamicsWorld->addRigidBody(body[index]);

}

0

Решение

Вы должны изменить тело WorldTransform, не CenterOfMassTransform, Вы можете сделать это в DefaultMotionState, а также в самом теле.

1

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector