1

私はプロジェクトにOgreとBulletを使用しており、現在、カプセル衝突形状を使用して一人称カメラをセットアップしています。洞窟のモデル(レベルの主要部分として機能します)を作成し、ゲームにインポートしました。私は今OgreBulletCollisions::TriangleMeshCollisionShape、洞窟のを作成しようとしています。

私がこれまでに持っているコードはこれですが、機能していません。コンパイルされますが、カプセルの形状は洞窟の形状をまっすぐ通過します。また、デバッグアウトラインがオンになっていて、洞窟メッシュの周りに描画されているものはありません。

Entity *cave = mSceneMgr->createEntity("Cave", "pCube1.mesh");

SceneNode *caveNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
caveNode->setPosition(0, 10, 250);
caveNode->setScale(10, 10, 10);
caveNode->rotate(Quaternion(0.5, 0.5, -0.5, 0.5));
caveNode->attachObject(cave);

OgreBulletCollisions::StaticMeshToShapeConverter *smtsc = new OgreBulletCollisions::StaticMeshToShapeConverter();
smtsc->addEntity(cave);

OgreBulletCollisions::TriangleMeshCollisionShape *tri = smtsc->createTrimesh();

OgreBulletDynamics::RigidBody *caveBody = new OgreBulletDynamics::RigidBody("cave", mWorld);
caveBody->setStaticShape(tri, 0.1, 0.8);

mShapes.push_back(tri);
mBodies.push_back(caveBody);

どんな提案でも大歓迎です。

明確にするために。コンパイルされますが、カプセルの形状は洞窟の形状をまっすぐ通過します。また、デバッグアウトラインがオンになっていて、洞窟メッシュの周りに描画されているものはありません

4

2 に答える 2

1

私はあなたのコードを使用し、まったく同じ結果を得ました-私の車はトリメッシュを通過しました。

の例を見てください:

ogrebullet/Demos/src/OgreBulletListener.cpp

それは呼び出す代わりにそれであるように思われるでしょう:

caveBody->setStaticShape(tri, 0.1, 0.8);

代わりに、以下を呼び出す必要があります。

caveBody->setStaticShape(caveNode, tri, 0.1, 0.8, Ogre::Vector3( position_x, position_y, position_z ));`

この変更を行ったとき、衝突は期待どおりに機能します

于 2011-11-29T17:38:16.213 に答える
0

結局、私はを使用しなければなりませんでしたbtScaledBvhTriangleMeshShape。だから私のコードは今のようになります

OgreBulletCollisions::StaticMeshToShapeConverter *smtsc = 
     new OgreBulletCollisions::StaticMeshToShapeConverter();
smtsc->addEntity(cave);

OgreBulletCollisions::TriangleMeshCollisionShape *tri = smtsc->createTrimesh();

OgreBulletDynamics::RigidBody *caveBody = new OgreBulletDynamics::RigidBody("cave", mWorld);

btScaledBvhTriangleMeshShape *triShape = new btScaledBvhTriangleMeshShape((btBvhTriangleMeshShape*)(tri->getBulletShape()), btVector3(150, 150, 150));

caveBody->setStaticShape(triShape, 0.0, 5, Vector3::ZERO, rotationQuaternion);
caveBody->setDebugDisplayEnabled(true);
于 2012-01-08T11:40:21.217 に答える