2015-04-09 2 views
0

Я пытаюсь ориентировать цилиндр в пуле. Прямо сейчас, цилиндр - единственное в симуляции. Я нашел здесь несколько ответов и считаю, что я близок, но все равно нет вращения. Вот моя функция для создания цилиндра, возможно, что-то выскочит на кого-то.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]); 

} 

ответ

1

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