在visual 2010上使用ogre3避免碰撞

我与ogre3d和visual 2010一起工作,我有两个机器人彼此相邻走路的实现避免碰撞的问题,我想:第一个机器人停下来,athor继续走,然后第一个机器人走。


使用Ogre最简单的方法是检查实体的轴对齐边界框之间的交集。

例如:

  Ogre::Entity *robot1(NULL), *robot2(NULL);
  Ogre::AnimationState* move_anim(NULL);
  Ogre::Real stop_t_s(0.0f);

  void app::init() {
    robot1 = scene_mgr_->createEntity("robot.mesh");
    robot2 = scene_mgr_->createEntity("robot.mesh");
    move_anim = robot1->getAnimationState("Walk");
    move_anim->setLoop(true);
    move_anim->setEnabled(true);
    root_->startRendering();
  }
  void app::frameRenderingQueued(const Ogre::FrameEvent& evt) {
    if (move_anim->getEnabled()) {
      move_anim->addTime(evt.timeSinceLastFrame);
    }
    else {
      stop_t_s += evt.timeSinceLastFrame;
      if (stop_t_s > 2.0f) {
        move_anim->setEnabled(true);
        stop_t_s = 0.0f;
      }
    }
    if (robot1->getBoundingBox().intersects(robot2->getBoundingBox())) {
      move_anim->setEnabled(false);
      /* more collide routine */
    }
    else {
      /* normal routine */
    }
  }

如果你想有更精确的碰撞形状,你应该考虑使用物理引擎来处理它


更新:我添加了一个示例,用于在发生碰撞时停止robot.mesh"Walk"动画,并在2秒后重新启动它。 有关动画控制的更多详细信息,请参阅Ogre中级教程1

链接地址: http://www.djcxy.com/p/17117.html

上一篇: Collision Avoidance using ogre3 on visual 2010

下一篇: Ogre game programming using TDD