C++ Can';不要创造一个食人魔Trimesh

C++ Can';不要创造一个食人魔Trimesh,c++,physics,ogre,bulletphysics,C++,Physics,Ogre,Bulletphysics,我正在使用食人魔和子弹进行一个项目,目前我有一个第一人称相机,设置了一个胶囊碰撞形状。我已经创建了一个洞穴模型(将作为关卡的主要部分),并将其导入到我的游戏中。我现在正在尝试创建洞穴的OgreBulletCollisions::TriangleMeshCollisionShape 到目前为止,我得到的代码是这样的,但它不起作用。它编译,但胶囊形状直接通过洞穴形状。此外,我有调试大纲上,有没有正在绘制周围的洞穴网格 Entity *cave = mSceneMgr->createEntity

我正在使用食人魔和子弹进行一个项目,目前我有一个第一人称相机,设置了一个胶囊碰撞形状。我已经创建了一个洞穴模型(将作为关卡的主要部分),并将其导入到我的游戏中。我现在正在尝试创建洞穴的
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);
欢迎提出任何建议


澄清。它编译,但胶囊形状直接通过洞穴形状。此外,我还有调试大纲,但洞穴网格周围没有绘制任何大纲。我使用了您的代码,得到了完全相同的结果-我的车辆正好通过了修剪

查看以下示例:

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 ));`

当我进行此更改时,碰撞按预期进行

我使用了您的代码,并得到了完全相同的结果-我的车辆正好通过了饰件

查看以下示例:

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 ));`

当我进行此更改时,碰撞按预期工作

最后我不得不使用
btscaledBvHttriangleMeshShape
。所以我的代码现在看起来像

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);

最后,我不得不使用一个
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);

“它不起作用了。”。。。。它怎么不起作用?它不编译吗?它没有显示预期的行为?它崩溃了?小马出现了?对不起。它编译,但胶囊形状直接通过洞穴形状。此外,我有调试大纲上,没有被画在洞穴网格周围。“它不工作。”。。。。它怎么不起作用?它不编译吗?它没有显示预期的行为?它崩溃了?小马出现了?对不起。它编译,但胶囊形状直接通过洞穴形状。此外,我在上有调试大纲,在洞穴网格周围没有绘制任何大纲。感谢您的建议,但我尝试使用
caveBody->setStaticShape(caveNode,tri,0.1,0.8,caveNode->getPosition())仍然不起作用。谢谢你的建议,但我试着使用
caveBody->setStaticShape(caveNode,tri,0.1,0.8,caveNode->getPosition())但它仍然不起作用。