无法更新连接到Ogre3D实体的bullet rigidbodies位置

时间:2017-06-18 13:26:10

标签: c++ ogre bulletphysics ogre3d bullet

我正在使用Ogre3D和Kinect制作游戏。 Ogre中的化身由kinect控制。现在我想实现物理,但我遇到了Bullet的问题。

我已将实体与具有成对的rigibodies“连接”。

std::vector<std::pair<Ogre::Entity *, btRigidBody *>> dynamicObjects;
std::vector<std::pair<Ogre::Entity *, btRigidBody *>> staticObjects;

我没有问题让我的食人魔遵循这样的僵尸:

for (int i = 0; i < dynamicObjects.size(); i++) {
try {
    btTransform tr;
    dynamicObjects[i].second->getMotionState()->getWorldTransform(tr);
    btVector3 pos = tr.getOrigin();
    btQuaternion qut = tr.getRotation();
    dynamicObjects[i].first->getParentSceneNode()->setOrientation(Ogre::Quaternion(qut.getW(), qut.getX(), qut.getY(), qut.getZ()));
    Ogre::Vector3 localPos = dynamicObjects[i].first->getParentSceneNode()->getParentSceneNode()->convertWorldToLocalPosition(Ogre::Vector3(pos.x(), pos.y(), pos.z()));
    dynamicObjects[i].first->getParentSceneNode()->setPosition(localPos);
} catch (Ogre::Exception e) {
}

然而,我似乎无法做相反的事情,通过使刚体跟随实体,这是Kinect对于玩家控制器所必需的。此代码似乎没有做任何事情。

btTransform tr;
staticObjects[0].second->getMotionState()->getWorldTransform(tr);
Ogre::Vector3 entityPos = staticObjects[0].first->getParentSceneNode()->getPosition();
tr.setOrigin(btVector3(entityPos.x, entityPos.y, entityPos.z));
staticObjects[0].second->setWorldTransform(tr);

这两个部分都放在更新循环中。

0 个答案:

没有答案