十四、OSG学习笔记-事件响应
上一章节
十三、OSG学习笔记-osgDB文件读写-CSDN博客
https://blog.csdn.net/weixin_36323170/article/details/146165712
本章节代码:
OsgStudy/EventHandle · CuiQingCheng/OsgStudy - 码云 - 开源中国
https://gitee.com/cuiqingcheng/osg-study/tree/master/OsgStudy/EventHandle
一、事件的概念
事件:是计算机应用程序和人通过外设进行交互的途径。




核心模块 OSG::GA,通过事件回调,遍历响应各个事件处理的handle方法,所以在是现实时,可以通过自定义handle处理方法,从而实现事件操作器;
示例代码如下:
/**osg 事件处理器
**/#include <windows.h>
#include <iostream>#include <osgViewer/Viewer>
#include <osgDB/ReaderWriter>
#include <osgDB/ReadFile>
#include <osgGA/GUIEventHandler>
#include <osg/MatrixTransform>class TestInput:public osgGA::GUIEventHandler
{
public:// aa ,就是viewerbool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) override{osgViewer::Viewer* vw = dynamic_cast<osgViewer::Viewer*>(&aa);switch (ea.getEventType()){case osgGA::GUIEventAdapter::KEYDOWN:std::cout << ea.getKey() << std::endl;_keyMap[ea.getKey()] = true;if (((_keyMap['w'] == true) || (_keyMap['W'] == true)) && ((_keyMap['a'] == true) || (_keyMap['A'] == true))){std::cout << "应该向左前方走" << std::endl;}if (ea.getKey() == osgGA::GUIEventAdapter::KEY_Alt_L){std::cout << "按下了左边的ALT键" << std::endl;}break;case osgGA::GUIEventAdapter::KEYUP:_keyMap[ea.getKey()] = false;break;case osgGA::GUIEventAdapter::PUSH:if (ea.getButton() == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON){std::cout << "左键点击(" << ea.getX() << "," << ea.getY() << ")" << std::endl;}else if (ea.getButton() == osgGA::GUIEventAdapter::RIGHT_MOUSE_BUTTON){std::cout << "右键点击(" << ea.getX() << "," << ea.getY() << ")" << std::endl;}else if (ea.getButton() == osgGA::GUIEventAdapter::MIDDLE_MOUSE_BUTTON){std::cout << "中键点击(" << ea.getX() << "," << ea.getY() << ")" << std::endl;}else {}break;case osgGA::GUIEventAdapter::DRAG:// 拖拽std::cout << "你DRAG了" << std::endl;break;case osgGA::GUIEventAdapter::SCROLL: // 滚轮事件if (ea.getScrollingMotion() == osgGA::GUIEventAdapter::SCROLL_UP)// 滚轮向上{osg::ref_ptr<osg::MatrixTransform> mx = new osg::MatrixTransform;mx->addChild(vw->getSceneData());mx->setMatrix(osg::Matrix::rotate(0.1, osg::Vec3f(1.0, 0, 0)));vw->setSceneData(mx);}else if (ea.getScrollingMotion() == osgGA::GUIEventAdapter::SCROLL_DOWN) // 滚轮向下{osg::ref_ptr<osg::MatrixTransform> mx = new osg::MatrixTransform;mx->addChild(vw->getSceneData());mx->setMatrix(osg::Matrix::rotate(-0.1, osg::Vec3f(1.0, 0, 0)));vw->setSceneData(mx);}break;case osgGA::GUIEventAdapter::RESIZE:std::cout << "改变窗口大小" << std::endl;break;default:break;}//return true;// 如果为true,这这个事件不往后传递。return false;}private:std::map<int, bool> _keyMap; // 按键状态记录map
};int main()
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;viewer->setUpViewInWindow(50, 50, 1500, 1000);viewer->setSceneData(osgDB::readNodeFile("glider.osg"));osg::ref_ptr<TestInput> Test = new TestInput;viewer->addEventHandler(Test);// 加入事件viewer->run();return 0;
}
相关文章:
十四、OSG学习笔记-事件响应
上一章节 十三、OSG学习笔记-osgDB文件读写-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146165712 本章节代码: OsgStudy/EventHandle CuiQingCheng/OsgStudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/osg-study/tree/master/Osg…...
JS逆向_腾讯点选_VMP补环境
1.接口分析 1.cap_union_prehandle 说明:图片、jsvmp GET QueryString:{aid: xxxxxx //网站在腾讯登记的idprotocol: httpsaccver: 1showtype: popupua: //ua atob后的结果noheader: 1fb: 1aged: 0enableAged: 0enableDarkMode: 0grayscale: 1clientype: 2cap_cd: uid: lang:…...
【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
在DQL的基础查询中,我们已经学过了多表查询的一种:联合查询(union)。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先,我们想要查询emp表和stu表两个表,按照我们之前的知识栈,我们直接使用…...
爬虫案例-爬取某狗音乐
文章目录 1、爬取代码2、效果图1、爬取代码 import time import requests import hashlib import jsonpath import osurl = "https://wwwapi.kugou.com/play/songinfo"#伪造请求头 header= {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64…...
Android第四次面试总结(基础算法篇)
一、反转链表 // 定义链表节点类 class ListNode {// 节点存储的值int val;// 指向下一个节点的引用ListNode next;// 构造函数,用于初始化节点的值ListNode(int x) { val x; } }class Solution {// 反转链表的方法public ListNode reverseList(ListNode head) {/…...
DAPO-Decoupled Clip and Dynamic sAmpling Policy Optimization
论文地址:https://dapo-sia.github.io/static/pdf/dapo_paper.pdf 代码地址:https://github.com/volcengine/verl/tree/gm-tyx/puffin/main/recipe/dapo 数据:https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k 1. 背景与动机…...
每日一题——买卖股票的最佳时机
买卖股票的最佳时机 问题描述示例示例 1示例 2 提示 问题分析难点分析 算法设计思路 代码实现复杂度分析测试用例测试用例 1测试用例 2测试用例 3 总结 问题描述 给定一个数组 prices,其中第 i 个元素 prices[i] 表示一支给定股票在第 i 天的价格。你可以选择某一天…...
数组模拟邻接表 #图论
文章目录 为什么要用数组来模拟邻接表存储思路遍历思路 树是特殊的图,因此邻接表可以存储图和树两种数据结构。 为什么要用数组来模拟邻接表 在算法设计当中,利用数组来代替结构体模拟各种数据结构会更加简单。 存储思路 给定如下数据,我们可以构造如…...
如何实现一个分布式单例对象?什么场景需要分布式单例?
单例模式确保一个类在同一个进程中只有一个实例,并提供一个全局访问点。这意味着无论在哪里调用该类的实例化方法,返回的都是同一个对象实例。 在分布式系统中,无论是单台机器多个实例,还是多台机器多个实例,每个实例…...
Elasticsearch8.17 集群重启操作
一、全集群重启步骤 1. 禁用分片分配 在关闭数据节点前,需禁用副本分片的分配,避免不必要的 I/O 操作。通过以下命令将分片分配限制为仅主分片: resp = client.cluster.put_settings(persistent={"cluster.routing.allocation.enable": "primaries"}…...
VBA常见的知识都有哪些,让AI编写的VBA经常 报错,所以VBA的基础还是要学习的
掌握这些能够大大的提高VBA的编写效率,欢迎来到涛涛聊AI。 1. 异常处理 Cleanup:是VBScript的错误处理标签,用于标记程序执行失败或退出时需要执行的清理操作(如关闭文件、释放对象)。这段代码会在遇到错误或用户取消操作时跳转…...
dify重磅升级:从0.15.3安全升级1.1.0新手避坑指南
Docker Compose 部署 备份自定义的 docker-compose YAML 文件(可选) cd docker cp docker-compose.yaml docker-compose.yaml.-$(date +%Y-%m-%d-%H-%M).bak从 main 分支获取最新代码 git checkout main git pull origin main停止服务,命令,请在 docker 目录下执行...
NLP高频面试题(六)——decoder-only、encoder-only和encoder-decoder的区别与联系
一、基本概念与代表模型 1. Encoder-only 架构 Encoder-only 架构最具代表性的模型是 BERT。BERT 使用 masked language modeling(MLM)进行预训练,即随机遮蔽部分输入词汇,让模型预测被遮蔽的词汇。由于这种架构能够同时看到输入…...
DeepSeek(8):结合Kimi-PPT助手一键生成演示报告
1 生成内容 在Deepseek中生成内容: 帮我创建年度计划,描述《智能枕头》产品的如何在全国销售,计划切分到每个月。从而让我们的老板和团队对报告充满信息。输出的内容我需要放到ppt中进行展示。 使用Deepseek R1模型,如下&#x…...
【MySQL】MySQL如何存储元数据?
目录 1.数据字典的作用 2. MySQL 8.0 之前的数据字典 3. MySQL 8.0 及之后的数据字典 4.MySQL 8 中的事务数据字典的特征 5.数据字典的序列化 6. .sdi文件的作用: 7..sdi的存储方式 在 MySQL 中,元数据(Metadata) 是描述数…...
《基于自适应正负样本对比学习的特征提取框架》-核心公式提炼简洁版 2022年neural networks
论文源地址 以下是从文档中提取的关于“基于对比学习的特征提取框架(CL-FEFA)”中正负样本对比学习实现的技术细节,包括详细的数学公式、特征提取过程以及特征表示方式的说明。 1. 正负样本的定义与构造 在CL-FEFA框架中,正负样…...
8.4《同一直线上二力的合成》
教会什么:合力与分力、同一直线上二力的合成 培养什么:实验抓共同点为突破口 课标: (二)运动和相互作用 2.2 机械运动和力 2.2.4 能用示意图描述力。会测量力的大小。了解同一直线上的二力合成。 零、导入 提问: 在前面我们探究了物体处于匀速直线运动/静止状态时,即处于…...
用ASCII字符转化图片
代码 from PIL import Image# 定义 ASCII 字符集,从最暗到最亮 ASCII_CHARS "%#*-:. "def resize_image(image, new_width100):width, height image.sizeratio height / widthnew_height int(new_width * ratio)resized_image image.resize((new_wi…...
zookeepernacoskafka之间的联系
一、ZooKeeper与Kafka的协同工作原理 1. 核心关系:Kafka对ZooKeeper的依赖 在Kafka 2.8版本之前,ZooKeeper是Kafka集群的“大脑”,负责管理集群元数据、协调节点状态和故障恢复。两者的协同主要通过以下关键机制实现: Broker注册…...
力扣 797. 所有可能的路径 解析JS、Java、python、Go、c++
深度优先搜索解所有可能的路径问题 题目描述 力扣链接 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) graph[i] 是一个从节点 i 可以访问的所有节点的列…...
蓝桥与力扣刷题(蓝桥 组队)
题目:作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。 每位球员担任 1号位至 5号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少? 本题为填空题&…...
python函数的多种参数使用形式
目录 1. 位置参数(Positional Arguments) 2. 关键字参数(Keyword Arguments) 3. 默认参数(Default Arguments) 4. 可变参数(Variable Positional Arguments) 5. 关键字可变参数&…...
天梯赛 PTAL2-009 抢红包
很简单的一道模拟题,使用map统计每个用户的钱数和红包数,最后在使用结构体存储,重载小于号,sort排序即可。 #include <bits/stdc.h> using namespace std; #define endl \n #define int long long typedef long long ll; c…...
【京东API开发指南】三步获取商品详情页实时数据:SKU、价格、销量全解析
以下是使用京东 API 获取商品详情页实时数据(SKU、价格、销量)的一般步骤: 注册与认证 注册开发者账号:访问京东开放平台官网,完成企业实名认证(仅支持企业开发者)。这是使用京东 API 的前提&am…...
深入探讨TK矩阵系统:创新的TikTok运营工具
TK矩阵的应用场景 TK矩阵系统适用于多个场景,尤其是在以下几个方面有显著优势: 批量账号管理与内容发布:对于需要管理多个TikTok账号的内容创作者或营销人员,TK矩阵提供了高效的账号管理工具,支持批量发布视频、评论、…...
AI Agent系列(六) -基于ReAct架构搭建LLM Agent(Deepseek)
AI Agent系列【六】 一、 ReAct1.1 ReAct 的处理过程:1.1 代码结构 二、 Python代码实现2.1 通过Zero-shot 实现python代码实例Python代码示例1:python代码实现示例2 一、 ReAct ReAct 是 Reseaning 和 Action 两个词的前缀合成,代表着先推…...
零基础上手Python数据分析 (6):Python 异常处理,告别程序崩溃的烦恼!
回顾一下,前几篇博客我们学习了 Python 的基本语法、数据结构和文件操作。 现在,我们已经掌握了 Python 编程的基础知识,可以开始编写更复杂的数据分析代码了。 但是,在实际的数据分析工作中,程序并非总能一帆风顺地运行,总会遇到各种 意外情况,例如: 文件找不到: 程序…...
AnyTouch:跨多个视觉触觉传感器学习统一的静态动态表征
25年3月来自人大、武汉科技大学和北邮的论文“AnyTouch: Learning Unified Static-dynamic Representation Across Multiple Visuo-tactile Sensors”。 视觉触觉传感器旨在模拟人类的触觉感知,使机器人能够精确地理解和操纵物体。随着时间的推移,许多精…...
关于stm32mp157
目录 设备树: 内核移植: 编写一个驱动的过程: 编写i2c传感器驱动的过程: 从arm11后,命名改为cortex, 1.cortex A:高端应用型领域 2.cortex R:实时性要求 3.cortex M:…...
关于单项梯度冻结小记
单项权重冻结(Partial Weight Freezing)详解 单项权重冻结(Partial Weight Freezing) 是深度学习模型训练中的一种技巧,指的是在训练过程中,只冻结(固定)部分网络权重,而…...
