【问题标题】:Can't create an OgreBullet Trimesh无法创建 OgreBullet Trimesh
【发布时间】:2011-11-24 17:25:17
【问题描述】:

我在一个项目中使用 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);

欢迎提出任何建议。

澄清一下。它编译但胶囊形状直接穿过洞穴形状。我也有调试轮廓,洞穴网格周围没有绘制任何东西

【问题讨论】:

  • “它不工作。”.... 它怎么不工作?它不编译?它没有显示预期的行为?它崩溃了吗?小马出现了?
  • 对不起。它编译但胶囊形状直接穿过洞穴形状。我也有调试轮廓,没有在洞穴网格周围绘制。

标签: c++ physics ogre bulletphysics


【解决方案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 ));`

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

【讨论】:

  • 感谢您的建议,但我尝试使用 caveBody->setStaticShape(caveNode, tri, 0.1, 0.8, caveNode->getPosition()); 仍然无法正常工作。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2012-01-03
    • 2022-12-11
    • 2015-09-16
    • 2021-04-18
    • 2014-11-21
    相关资源
    最近更新 更多