2

Ogre プロジェクトに弾丸を実装し始めたところです。ここのインストール手順に従います: http://www.ogre3d.org/tikiwiki/OgreBullet+Tutorial+1

ここのチュートリアルの残りの部分: http://www.ogre3d.org/tikiwiki/OgreBullet+Tutorial+2

私はそれをうまく機能させましたが、今はそれを一人称カメラのハンドルに拡張したいと考えていました。CapsuleShape と Rigid Body を作成しましたが (チュートリアルでボックスに対して行ったように)、ゲームを実行すると、カプセルが倒れて床を転がり、カメラが激しく揺れます。

カプセルが常に直立するように固定する方法が必要ですが、方法がわかりません

以下は私が使用しているコードです。

(の一部) ヘッダー ファイル

OgreBulletDynamics::DynamicsWorld *mWorld;   // OgreBullet World
OgreBulletCollisions::DebugDrawer *debugDrawer;
std::deque<OgreBulletDynamics::RigidBody *>         mBodies;
std::deque<OgreBulletCollisions::CollisionShape *>  mShapes;

OgreBulletCollisions::CollisionShape *character;
OgreBulletDynamics::RigidBody *characterBody;
Ogre::SceneNode *charNode;

Ogre::Camera* mCamera;
Ogre::SceneManager* mSceneMgr;
Ogre::RenderWindow* mWindow;

メインファイル

bool MinimalOgre::go(void)
{
    ...

     mCamera = mSceneMgr->createCamera("PlayerCam");
     mCamera->setPosition(Vector3(0,0,0));
     mCamera->lookAt(Vector3(0,0,300));
     mCamera->setNearClipDistance(5);
     mCameraMan = new OgreBites::SdkCameraMan(mCamera);


    OgreBulletCollisions::CollisionShape *Shape;
    Shape = new OgreBulletCollisions::StaticPlaneCollisionShape(Vector3(0,1,0), 0); // (normal vector, distance)
    OgreBulletDynamics::RigidBody *defaultPlaneBody = new OgreBulletDynamics::RigidBody(
            "BasePlane",
            mWorld);
    defaultPlaneBody->setStaticShape(Shape, 0.1, 0.8); // (shape, restitution, friction)
    // push the created objects to the deques
    mShapes.push_back(Shape);
    mBodies.push_back(defaultPlaneBody);

    character = new OgreBulletCollisions::CapsuleCollisionShape(1.0f, 1.0f, Vector3(0, 1, 0));

    charNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
    charNode->attachObject(mCamera);
    charNode->setPosition(mCamera->getPosition());

    characterBody = new OgreBulletDynamics::RigidBody("character", mWorld);
    characterBody->setShape(   charNode,
                    character,
                    0.0f,         // dynamic body restitution
                    10.0f,         // dynamic body friction
                    10.0f,          // dynamic bodymass
                    Vector3(0,0,0),     
                    Quaternion(0, 0, 1, 0));


    mShapes.push_back(character);
    mBodies.push_back(characterBody);

    ...
}
4

1 に答える 1