zoukankan      html  css  js  c++  java
  • OSG 学习随笔(一) : osgViewer::Viewer 的事件处理

          搞 OSG 搞VR 搞虚拟仿真, 不是看影片呀. 是需要交互的.怎么交互??  就是让 osgViewer::Viewer 响应下鼠标与键盘的事件嘛.. 比如:按下了鼠标的左键呀.. 按下了键盘上的 WSAD呀..  什么什么的.. 

      好的. 那么怎么让 Viewer 知道你做的事件呢??  怎么办呢?? 可喜的是. Viewer 有一个叫 addEventHandler(osgGA::GUIEventHandler handle)的方法.. 看字面的意思.就知道他是为 Viewer 来增加事件处理方法的.

         BUT!!  这个方法虽好, 但您还不能直接拿来使用..... Becuse .你需要告诉他. 你要把一个怎么样的"事件处理类" 加给Viewer呢??  这里需要一个 osgGA::GUIEventHandler 类的子类. 因为这个家伙是个纯虚类.不能实例话. 所以你要自己写一个继承于它的子类. 并重写 他的 void handle(osgGA::GUIEventAdapter ea ,osgGA::GUIActionAdapter aa) . 方法. 把你具体的操作 写在里面. 第一个参数里面包括了你当时的事件类型, 比如是 KEYDOWN 呀?? 还是鼠标按下呀PUSH.. 并包括了你按下的是哪个键.等等 非常有用.

    第二个参数是,事件处理结果的接收者. 一般就是 Viewer ,你需要这样得到这个Viewer :

      osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);

    当然 你也可以把Viewer 直接做为你写的这个了类的构造函数的参数传进来. 这样更加直观.

    例 你自己写的事件处理类,它必须继承自 osgGA::GUIEventHandler

    class MyHandle : public osgGA::GUIEventHandler
    {
    public:
      void handle(osgGA::GUIEventAdapter ea,osgGA::GUIActionAdapter aa )

      {

        switch(ea.getEventType())

        {

          case osgGA::GUIEventAdapter::KEYDOWN :

          if(ea.getKey() == osgGA::GUIEventAdapter::KEY_W){

            // Do something

          }

          break;

          case osgGA::GUIEventAdapter::PUSH:

          break;

        }

      }

    };

    int main()

    {

      ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;

      // add eventHandler

      viewer.addEventHandler(new MyHandler());

    }

  • 相关阅读:
    关于螺旋矩阵的问题
    JDK 1.5 for 循环的新写法
    Java基础视频笔记(三)
    关于接口的理解
    常用的DOS命令
    Java基础视频笔记(二)
    Eclipse的常用快捷键备忘
    Java基础视频笔记(四):泛型
    异常设计准则
    多重继承和虚继承的内存布局(转)
  • 原文地址:https://www.cnblogs.com/easyfrog/p/2763889.html
Copyright © 2011-2022 走看看