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

}

 

转载于:https://www.cnblogs.com/easyfrog/archive/2012/11/10/2763889.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值