Bullet 2.76 Physics Japanese Manual
2010/11/24更新

Bullet 2.76 Physics SDK マニュアル

OgreでのMotion State例


Ogre3dは人気があるようなので、BulletのMotionStateについて実装してみました。オブジェクトの初期位置とOgreでの位置を表すシーンノードを設定します。おまけとして、シーンノードは後でも設定可能です。これはシミュレーションをさせたいオブジェクトを描画しないようにしたり、後からオブジェクトを生成するようアプリケーションが呼び出す場合に便利です。

 

class MyMotionState : public btMotionState {
Ogre::SceneNode* mVisibleobj;
btTransform mPos1;
public:
MyMotionState(const btTransform &initialpos, Ogre::SceneNode *node) {
mVisibleobj = node;
mPos1 = initialpos;
}
virtual ~MyMotionState() { }
void setNode(Ogre::SceneNode *node) {
mVisibleobj = node;
}
virtual void getWorldTransform(btTransform &worldTrans) const {
worldTrans = mPos1;
}
virtual void setWorldTransform(const btTransform &worldTrans) {
if(NULL == mVisibleobj) return; // silently return before we set a node
btQuaternion rot = worldTrans.getRotation();
mVisibleobj->setOrientation(rot.w(), rot.x(), rot.y(), rot.z());
btVector3 pos = worldTrans.getOrigin();
mVisibleobj->setPosition(pos.x(), pos.y(), pos.z());
}
};

inserted by FC2 system