Ogre 学习笔记 (一) 处理用户的输入事件 OIS

Ogre 是使用 OIS 这个开源的输入框架来处理用户的键盘或鼠标事件的。

需要引入 OIS.h 头文件

#include "OIS.h"

int main()

{

  Ogre::Root* root = new Ogre::Root("plugins_d.cfg");

  // 创建我们的主窗口

  Ogre::RenderWindow* window = root->initialise(true,"My Ogre Render Window");

  // 首先需要创建一个InputManager对像的指针,它来负责管理所有的输入事件

  // 使用 OIS::InputManager::createInputSystem(size_t winHandle); 方法。它需要用户提拱一个窗口的句柄,也就是告诉OIS。这个输入系统是为哪个窗口服务的。 

  size_t winHnd;

  // 我们使用 RenderWindow 的 getCustomAttribute() 方法来得到这个主窗口的句柄.

  window->getCustomAttribute("WINDOW",&winHnd);

  // OK .  这样我们就可以创建一个做用为 window窗口的 输入系统了。

  OIS::InputManager Input = OIS::InputManager::createInputSystem(winHnd);

  // 使用这个输入 系统创建 键盘输入处理物体

  OIS::Keyboard* keyboard = static_cast<OIS::Keyboard*>(Input->createInputObject(OIS::OISKeyboard,false));

  // 创建鼠标处理物体 

  OIS::Mouse* mouse = static_cast<OIS::Mouse*>(Input->createInputObject(OIS::OISMouse,false));

  // 渲染

  while(!window->isClosed()) {

    // 得到键盘事件,当按下 Escape 时,关闭主窗口.

    keyboard->capture();

    if (keyboard->isKeyDown(OIS::KC_ESCAPE))

      window->destroy();

    // 渲染一帧

    root->renderOneFrame();

    // 处理其它事件

    Ogre::WindowEventUtilities::messagePump();

  }

  return 0;

}

注意: 你可以将N个 FrameListener 加入在Root中。 不过。。。。 你不能在每个 FrameStarted 的代码段里都加入 mouse->capture(). 这样。只会有一个 Listener的Mouse事件被运行。 你可需要在第一个加入 capture() 即可。 其它的Listener中 就不需要加了。

原文地址:https://www.cnblogs.com/easyfrog/p/2845763.html