三、OSG应用基础

embedded/2025/2/9 6:22:53/

一、

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,软件加载模型文件,并导入路径文件,模型中图元会按照事先保存的路径运动。


http://www.ppmy.cn/embedded/160738.html

相关文章

Unity3D实现UGUI拖拽移动

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、实现原理👉二、方法一👉方法二👉壁纸分享👉总结👉前言 在 Unity UGUI 中实现拖拽移动的功能,主要基于事件系统、坐标转换和位置更新这几个关键步骤,下面详细介绍其原理 博客将会介绍如何实现UGUI拖…

mysql8 从C++源码角度看sql生成抽象语法树

MySQL 8的C源码中&#xff0c;SQL语句的词法分析和语法分析是通过一个复杂的解析器实现的&#xff0c;这个解析器将输入的SQL文本转换成抽象语法树&#xff08;AST&#xff09;。以下是该过程的主要步骤和相关组件&#xff1a; 主要组件 Lexer (词法分析器): MySQL使用了一个称…

casbin+iris实现权限控制

在现代Web应用开发中&#xff0c;权限控制是确保系统安全性和用户体验的关键部分。Casbin 是一个强大的开源访问控制库&#xff0c;支持多种访问控制模型&#xff08;如RBAC、ABAC等&#xff09;&#xff0c;而Iris则是一个高性能的Go语言Web框架。结合两者&#xff0c;我们可以…

(篇三)基于PyDracula搭建一个深度学习的软件之解析yolo算法融合

文章目录 1YoloPredictor类——检测器1.1继承BasePredictor解析1.2继承QObject解析 2MainWindow类——主窗口 在前面两篇中&#xff0c;篇一介绍了启动界面的制作&#xff0c;篇二介绍了如何修改PyDracula的界面&#xff0c;那么这一篇我们学习一下yolo要融合进入软件中&#x…

Centos Stream 10 根目录下的文件夹结构

/ ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── lostfound ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├─…

R包:ggalign调整和组合多个图形的R包

文章目录 介绍案例安装R包教程1教程2参考 介绍 这个包扩展了ggplot2&#xff0c;提供了用于对齐和组织多个图的高级工具&#xff0c;特别是那些自动重新排序观察结果的工具&#xff0c;比如树形图。它提供了对布局调整和情节注释的精细控制&#xff0c;使您能够创建复杂的、出…

Maven插件—flatten-maven-plugin:工程模块统一版本依赖

文章目录 前言一、认识flatten-maven-plugin插件二、如何使用flatten-maven-plugin插件&#xff1f;未使用flatten-maven-plugin插件之前的情况描述配置flatten-maven-plugin插件步骤1&#xff1a;最外层父模块安装插件&配置版本变量步骤2&#xff1a;各个自模块使用版本使…

2025年02月05日Github流行趋势

项目名称&#xff1a;OCRmyPDF 项目地址url&#xff1a;https://github.com/ocrmypdf/OCRmyPDF项目语言&#xff1a;Python历史star数&#xff1a;15872今日star数&#xff1a;157项目维护者&#xff1a;jbarlow83, fritz-hh, apps/dependabot, mawi12345, mara004项目简介&…