当前位置: 首页 > news >正文

三、OSG学习笔记-应用基础

前一章节:二、OSG学习笔记-入门开发-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145513874

一、

OsgGA: 界面事件处理空间,处理操作各种操作器的最大名字空间;

GUIEventHandler: ui 事件操作类

注意:在启用事件类自定义时,我的Win10专业版出现一个键盘输入系统兼容的问题;

OSG Viewer输入按键无响应

1 问题描述

操作系统:Windows 10 专业版

输入法:微软拼音输入法

现象:在PowerShell执行osgviewer.exe glider.osg后,能正常显示图像,但输入s(显示帧率)或f(切换全屏或窗口)等按键后无响应。

2 解决方案

右键点击任务栏右下角输入法图标,点击设置-常规,在兼容性一栏中启用使用以前版本的微软拼音输入法。

二、

代码:CuiQingCheng/OsgStudy - Gitee.com

1、计时器的用法

osg::Timer

2、自定义ui事件

3、帮助事件

4、路径记录事件器

#include<windows.h>
#include<osg/Node>
#include<osgViewer/Viewer>
#include<osgViewer/ViewerEventHandlers>
#include<osgDB/ReadFile>
#include <osgGA/TrackballManipulator>// 事件响应类
class MyPrint :public osgGA::GUIEventHandler
{
public:void getUsage(osg::ApplicationUsage& usage) const override {usage.addKeyboardMouseBinding("cc", "11111111");}bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) override {if (ea.getEventType() == osgGA::GUIEventAdapter::KEYDOWN){int itc = static_cast<int>('c');int iK = ea.getKey();if (ea.getKey() == 'c') {// 这里添加你想要执行的操作,例如打印信息std::cout << "Key c is pressed" << std::endl;return true; // 表示事件已处理}}return false; // 表示未处理该事件,将继续传递给其他处理器}
};int main()
{osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;viewer->setUpViewInWindow(100, 100, 1500, 1200);osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("glider.osg");// 获取控制器osgGA::CameraManipulator* manipulator = viewer->getCameraManipulator();if (!manipulator) {std::cout << "No manipulator set!" << std::endl;// 设置默认操作器viewer->setCameraManipulator(new osgGA::TrackballManipulator);}else {std::cout << "Manipulator: " << manipulator->className() << std::endl;}osg::Timer_t start_time = 0;osg::Timer_t end_time = 0;osg::Timer* timer = new osg::Timer;//得到一个tick值多少second;std::cout << timer->getSecondsPerTick() << std::endl;start_time = timer->tick();std::cout << "func1: read node file time:" << timer->time_s() << std::endl;end_time = timer->tick();std::cout << "func2: read node file time:" << timer->delta_s(start_time, end_time) << std::endl;// 获取场景中事件数量;const osgViewer::View::EventHandlers& handlers = viewer->getEventHandlers();std::cout << "Number of default event handlers: " << handlers.size() << std::endl;int i = 1;for (osg::ref_ptr<osgGA::EventHandler> pE:handlers){std::cout << "Handler " << i << ": " << pE.get()->className()<< std::endl;++i;}// 添加事件viewer->addEventHandler(new MyPrint);viewer->addEventHandler(new osgViewer::HelpHandler);// 路径记录功能,会在软件开发路径下默认存放一个文件 “saved_animation.path”viewer->addEventHandler(new osgViewer::RecordCameraPathHandler);viewer->setSceneData(node.get());viewer->run();return 1;
}

运行起来程序,按下键盘小写‘z’,开启记录位置,然后开始拖动图元,再按下键盘大写‘Z’生成如下保存路径的文件

下次启动viewer,软件加载模型文件,并导入路径文件,模型中图元会按照事先保存的路径运动。

后一章节:四、OSG学习笔记-基础图元-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145514148

http://www.lryc.cn/news/534727.html

相关文章:

  • CTFHub-RCE系列wp
  • Linux ping不通百度但浏览器可以打开百度的的解决方法
  • Redis中的某一热点数据缓存过期了,此时有大量请求访问怎么办?
  • 低成本+高性能+超灵活!Deepseek 671B+Milvus重新定义知识库搭建
  • TCP服务器与客户端搭建
  • PDF 文件的安全功能概述
  • 在Linux上部署Jenkins的详细指南
  • 碳纤维复合材料制造的六西格玛管理实践:破解高端制造良率困局的实战密码
  • Day83:图形的绘制
  • C# Dll嵌入到.exe
  • o3-mini、Gemini 2 Flash、Sonnet 3.5 与 DeepSeek 在 Cursor 上的对决
  • 如何在Vscode中接入Deepseek
  • 6 maven工具的使用、maven项目中使用日志
  • Day82:创建图形界面(GUI)
  • 字节跳动大模型应用 Go 开发框架 —— Eino 实践
  • 【Golang学习之旅】Go + MySQL 数据库操作详解
  • Http 的响应码有哪些? 分别代表的是什么?
  • 深入解析 Linux 系统中 Cron 定时任务的配置与管理
  • 关于 IoT DC3 中设备(Device)的理解
  • golang 版 E签宝请求签名鉴权方式
  • QTreeView和QTableView单元格添加超链接
  • 【WB 深度学习实验管理】使用 PyTorch Lightning 实现高效的图像分类实验跟踪
  • SSM开发(十一) mybatis关联关系多表查询(嵌套查询,举例说明)
  • The Simulation技术浅析(六):机器学习
  • apache-poi导出excel数据
  • 唯一值校验的实现思路(续)
  • ffmpeg基本用法
  • MYSQL第四次
  • 联德胜w801开发板(六)手机蓝牙设置wifi名称和密码
  • Linux:库