• osg 中处理键盘鼠标外部设备


    继承 public::osgGA::GUIEventHandler 实现 handle函数即可

    class UseEventHandler :public::osgGA::GUIEventHandler
    {
    public:
        //handle函数,其中有两个极其重要的参数,  
        //一个是const osgGA::GUIEventAdapter,注意有不少人在写时少写了个const结果就不灵了,  
        //因为是虚函数,参数必须与父类中虚函数相应一致。该参数是用来识别各种事件类型的参数。  
        //第二个参数也很重要:osgGA::GUIActionAdapter,它是控制显示的参数,其实最重要的是它是Viewer的祖父类,由它可以得到viewer,在操作中有体现。  
        virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
        {
            
            //将aa强制转换为viewer对象  
            osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
            if (!viewer)//如果转换失败则直接退出  
            {
                return false;
            }
            switch (ea.getEventType())//获取事件的类型,是键盘上的事件,还是鼠标上的事件以及鼠标单击,右击,双击等等。  
            {
            case osgGA::GUIEventAdapter::KEYDOWN://键盘响应事件  
    
              
                if (ea.getKey() == 'q' || ea.getKey() == 'Q' || ea.getKey() == osgGA::GUIEventAdapter::KEY_Page_Up)//高度向上
                { 
    
                }
                if (ea.getKey() == 'e' || ea.getKey() == 'E' || ea.getKey() == osgGA::GUIEventAdapter::KEY_Page_Down)//高度向下
                { 
                }
                if (ea.getKey() == 'w' || ea.getKey() == 'W' || ea.getKey() == osgGA::GUIEventAdapter::KEY_Up)//俯仰俯冲向上
                { 
    
                }
                if (ea.getKey() == 's' || ea.getKey() == 'S' || ea.getKey() == osgGA::GUIEventAdapter::KEY_Down)//俯仰俯冲向下
                { 
                }
                if (ea.getKey() == 'a' || ea.getKey() == 'A' || ea.getKey() == osgGA::GUIEventAdapter::KEY_Left)//向左横滚
                { 
                }
                if (ea.getKey() == 'd' || ea.getKey() == 'D' || ea.getKey() == osgGA::GUIEventAdapter::KEY_Right)//向右横滚
                { 
                }
                break;
            case osgGA::GUIEventAdapter::PUSH:
                if (ea.getButton() == 4)//表示按鼠标右键  
                {
                    viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(0);
                    viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(0);
                }
                break;
            case osgGA::GUIEventAdapter::DOUBLECLICK://表示双击类型  
                if (ea.getButton() == 1)//表示按鼠标左键  
                {
                    viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(1);
                    viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(1);
                }
                break;
            default:
                break;
            }
            return false;
        }
    };
    
  • 相关阅读:
    Linux LAMP架构搭建
    Linux 系统版本查询
    Linux 安装本地 yum源
    Linux 虚拟机安装vmware tools
    随记分页码
    flexigrid 修改json格式
    Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
    web api 文档声明
    android UI
    Sending HTML Form Data
  • 原文地址:https://www.cnblogs.com/fishpro/p/16044390.html
Copyright © 2020-2023  润新知