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

    }

  • 相关阅读:
    SQL Server sql 操作
    MYSQL获取自增ID的四种方法
    Mysql自增字段
    三种JDBC批量插入编程方法的比较
    C3P0连接池使用小结
    数据库连接池 c3p0 demo 代码和分析
    Eclipse 安装对 Java 8 的支持
    Java读取Properties文件的六种方法
    常备软件及必要配置
    HBase-存储-概览
  • 原文地址:https://www.cnblogs.com/easyfrog/p/2763889.html
Copyright © 2011-2022 走看看