1

ここで、Bullet でのオブジェクトの回転に問題があります。私が実装したいのは、同時にグローバル x、y、z 軸を中心にオブジェクトを回転させることです。(ここでグローバルは、軸 x、y、z が回転中に変更されないことを意味します)私は以下のコードを持っています

btQuaternion m_lastRot;
btTransform tranf =  _obj[idx]->mp_btRidObj->getCenterOfMassTransform();
tranf.getBasis().getRotation(m_lastRot);
btQuaternion qx(btVector3(1,0,0),angX);
btQuaternion qy(btVector3(0,1,0),angY);
btQuaternion qz(btVector3(0,0,1),angZ);
tranf.setRotation(qz * qy * qx * m_lastRot);
_obj[idx]->mp_btRidObj->setCenterOfMassTransform(tranf);

しかし、それは私が期待したようには機能しません。ちなみに、x、y、z軸のいずれかを中心に毎回オブジェクトを回転させる以下のコードはうまく機能します。

btQuaternion m_lastRot;
btTransform tranf =  _obj[idx]->mp_btRidObj->getCenterOfMassTransform();
tranf.getBasis().getRotation(_obj[idx]->m_lastRot);
btQuaternion qx(btVector3(1,0,0),angX);
btQuaternion qy(btVector3(0,1,0),angY);
btQuaternion qz(btVector3(0,0,1),angZ);
if(x)
tranf.setRotation(qx * m_lastRot);
else if(y)
tranf.setRotation(qy * m_lastRot);
else if(z)
tranf.setRotation(qz * m_lastRot);

_obj[idx]->mp_btRidObj->setCenterOfMassTransform(tranf);

この問題を解決する方法を教えてくれる人はいますか?

4

2 に答える 2

1

私はこのようにします:

//this is my bullet object currently reading data from:
bulletobject->getMotionState()->getWorldTransform(trans);
btQuaternion rot = trans.getRotation();
myquat.w = rot.w();
myquat.x = rot.x();
myquat.y = rot.z();
myquat.z = rot.y();
//I then apply the quat to my object that I want to move in my graphics application.

この方法で行う場合も「w」を取得することを忘れないでください。そうしないと、回転が間違ってしまいます。

于 2014-12-09T05:58:27.900 に答える
0

Jbullet には、Bullet RigidBody に実装された setOrientation(Quat4f r) というメソッドがあり、それが必要なことを実行すると信じています。標準の Bullet lib にもあると思います。

于 2014-12-08T20:20:02.240 に答える