OSG学习:响应键盘鼠标示例
示例功能:示例里面有两个模型,一个是牛,另一个是飞机。鼠标右键时牛和飞机都隐藏,鼠标左键双击时牛和飞机都显示,按键盘上面的LEFT键,显示牛,按键盘上面的RIGHT键显示飞机。其中显示与隐藏节点使用的是setNodeMask(bool)。bool的值为0的时候是隐藏,1的时候是显示。
#include<osgDB\ReadFile>
#include<osgViewer\Viewer>
#include<osg\Node> class UseEventHandler :public osgGA::GUIEventHandler
{
public:
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
if (!viewer)return false; switch (ea.getEventType())
{
case osgGA::GUIEventAdapter::KEYDOWN:
{
if (ea.getKey() == 0xFF51)
{
viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(0);
viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(1);
}
if (ea.getKey() == 0xFF53)
{
viewer->getSceneData()->asGroup()->getChild(0)->setNodeMask(0);
viewer->getSceneData()->asGroup()->getChild(1)->setNodeMask(1);
}
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;
}
}; void main()
{
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> root = new osg::Group();
root->addChild(osgDB::readNodeFile("cow.osg"));
root->addChild(osgDB::readNodeFile("glider.osg"));
viewer.setSceneData(root.get());
viewer.addEventHandler(new UseEventHandler);
viewer.realize();
viewer.run();
}
结果图:
OSG学习:响应键盘鼠标示例的更多相关文章
- OSG学习:阴影代码示例
效果图: 代码示例: #include <osgViewer/Viewer> #include <osg/Node> #include <osg/Geode> #i ...
- OSG学习:自动对齐节点示例
/********************************************************** *Write by FlySky *zzuxp@163.com http://w ...
- OSG学习:矩阵变换节点示例
#include<osgViewer\Viewer> #include<osg\Node> #include<osg\Geode> #include<osg\ ...
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...
- osg学习示例之遇到问题四骨骼动画编译osgCal
osg学习示例之遇到问题四骨骼动画编译osgCal 转自:http://blog.csdn.net/wuwangrun/article/details/8239451 今天学到书<OpenSce ...
- USB HID复合设备实例—键盘+鼠标
实现这种USB HID复合设备有两种方法,在<USB HID协议入门>一节已经讲到其中一种方法,说一个USB HID设备可以包含多种功能的报告描述符合集,这样可以实现复合设备,如带鼠标功能 ...
- DSAPI 键盘鼠标钩子
通常,说到Hook键盘鼠标,总需要一大堆代码,涉及各种不明白的API.而在DSAPI中,可以说已经把勾子简化到不能再简化的地步.甚至不需要任何示例代码即会使用.那么如何实现呢? Private Wit ...
- 屏幕实时显示键盘鼠标操作软件keycastow,适合做视频教程
屏幕实时显示键盘鼠标操作软件keycastow,适合做视频教程 学习了:https://www.52pojie.cn/thread-535154-1-1.html 进行键盘按键的屏幕实时显示:
随机推荐
- PHP变量定义及工作原理
1.变量定义: 通常学到的是,变量代表存储空间以及其中数据的一个“标识符”. 变量名 指向 变量值 更深入的说是 变量指向内存的一块区域 2.变量工作原理,通过画图分析法——内存空间 <?php ...
- 典型的 ajax 异步请求及错误处理
$.ajax({ url: path + '/emergency/saveEmergency.do', async: false,//同步,会阻塞操作 type: 'POST',//PUT DELET ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- 树莓派3B+学习笔记:3、启用root账户
1.打开终端,输入 sudo passwd root 输入两次密码后设置root账户密码: 2.输入 sudo passwd --unlock root 解锁root账户: 3.点击主菜单的“Shut ...
- java 用户修改密码
import java.util.Scanner; class Member { private String mima; private String name; public String get ...
- 剑指offer题目系列三(链表相关题目)
本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...
- JavaWeb——升级赛-学生成绩管理系统(2).java---19.01.03
dao.java package Dao; import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLExcept ...
- Windows 显示环境变量
echo %% D:\>echo %python3% C:\Users\zy\AppData\Local\Programs\Python\Python36 D:\> 我的环境变量如下:
- angualarjs $location服务
$location服务 angular使用内置的$location服务来监听.操作url,包括以下功能: - 获取.监听.改变地址栏的URL: - 与URL实现双向数据绑定(地址栏变动.前进后退或者点 ...
- PS 放大眼睛
1.打开图片,Ctrl+J 复制一个 2.选择工具栏的滤镜--液化 然后选择膨胀工具--设置画笔属性