osg操控器之键盘切换操控器osgGA::KeySwitchMatrixManipulator

这篇具有很好参考价值的文章主要介绍了osg操控器之键盘切换操控器osgGA::KeySwitchMatrixManipulator。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 前言

2. 键盘切换操控器接口说明

3. 总结


1. 前言

       osg官方提供了很多操控器,在源码目录下的src\osgGA目录下,cpp文件名含有Manipulator的都是操控器,每个这样的cpp表示一种类型的操控器。其中KeySwitchMatrixManipulator.cpp文件实现了键盘切换操控器。

        所谓操控器是指:操控相机运动,从而实现场景视图矩阵变化,反映到观察场景用户的感官上就是:人眼感觉场景变化了,但现实中的物体是没变化的,只是相机方位或距离远近在改变,从而给人视觉上的感觉而已。
        所谓键盘切换操控器是指可以通过按下键盘不同键,实现在多个操控器之间切换。这在游戏中很常见,比如:按w键,游戏中的人驾车跑;按q键,则游戏中的人做飞船绕星球飞行等。osg的osgGA::KeySwitchMatrixManipulator类正是为这种需求而开发的。

        关于其它操控器的学习,请参考:

  •                    《osg操控器之动画路径操控器osgGA::AnimationPathManipulator分析》。

2. 键盘切换操控器接口说明

void addMatrixManipulator(int key, std::string name, CameraManipulator *cm);

该接口向键盘切换操控器增加一个操控器对象。其参数说明如下:

  • key:表示键盘键虚拟码的值。关于什么是键盘虚拟码,不懂的可以自行百度。
  • name:操控器名称。可以随意取。
  • cm:操控器对象指针,需自己实现或用osg自带的操控器。

如下代码:

osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;

keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() );
keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() );
keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );

      创建了一个键盘切换操控器对象,并通过调用addMatrixManipulator向键盘切换操控器依次加入osg自带的跟踪球操控器、飞行操控器、驾驶操控器、地形操控器。如果调用addMatrixManipulator函数后,没有调用selectMatrixManipulator接口(参见后文描述),则当前操控器默认为最后一个加入的操控器,以本例来说就是地形操控器。当场景运行起来后,按下键盘数字1键,则立马切换到跟踪球操控器,此时用鼠标移动模型,则模型按类似球的弧线运动;如果按下2键,则立马切换到飞行操控器,感觉场景就像自己飞一样;依次类推。

 void addNumberedMatrixManipulator(CameraManipulator *cm);

addNumberedMatrixManipulator同addMatrixManipulator功能类似,不同点是:该函数在内部会自动以字符串"1"的ASCII码的值即49与当前键盘切换操控器中的操控器数量的和为key,如当前有8个操控器,则调用该函数后,会增加一个49 + 8 = 57为key,以字符串"CameraManipulator"为name的操控器。

void selectMatrixManipulator(unsigned int num);

将索引为num的操控器设置为当前操控器。注意:因为KeySwitchMatrixManipulator类内部是通过map来实现在内存中保存传入的操控器类对象的,该map的key是addMatrixManipulator的第1个参数或addNumberedMatrixManipulator自动生成的一个数值,因为采用的map是默认是按照从小到大排序规则,而selectMatrixManipulator实现是:遍历map,每遍历一个计数就增加1,直到该计数和传入的参数num相等时,就以该操控器为当前操控器,显然这个不一定就是addMatrixManipulator的第1个参数标识的操控器。

CameraManipulator* getMatrixManipulatorWithIndex(unsigned int key);
const CameraManipulator* getMatrixManipulatorWithIndex(unsigned int key) const;

返回指定索引的操控器,类似上面 selectMatrixManipulator接口阐述的含义。

CameraManipulator* getMatrixManipulatorWithKey(unsigned int key);
const CameraManipulator* getMatrixManipulatorWithKey(unsigned int key) const;

通过指定的key(即addMatrixManipulator函数的第1个参数)返回该key标识的操控器对象。 

3. 总结

       键盘切换操控器不是真实的操控器,可以认为是其它真实操控器的容器。可以根据按键变化在不同真实操控器之间切换。文章来源地址https://www.toymoban.com/news/detail-429308.html

到了这里,关于osg操控器之键盘切换操控器osgGA::KeySwitchMatrixManipulator的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mac怎么切换输入法(在外接键盘下)

    首先,如果你就用的mac的键盘,有三种方式可以切换输入法,第一个是地球键,可以见下图  第二个是大写键来切换输入法,见下图,但是这样的话大写键用起来就不是很方便。 第三个是^空格键,见下图 但是现在我是外接键盘,而且是下面这样的键盘, 和mac自带的键盘不一

    2024年02月11日
    浏览(55)
  • 键盘快捷切换K线周期的设计与实现

    首先,需要定义一组按键对于一组K线周期,按下1代表M1,按下2代表M5,以此类推。 接下来,需要编写一个函数来处理键盘快捷键的事件。可以使用OnChartEvent()函数来监听键盘事件。当按下指定的快捷键时,触发相应的事件处理函数。 在事件处理函数中,根据按下的快捷键来

    2024年02月21日
    浏览(15)
  • osgGA::CameraManipulator类computeHomePosition函数分析

    osgGA::CameraManipulator类computeHomePosition函数代码如下:        这个函数用于计算操控器默认位置。该计算方法考虑了相机视场角和模型大小及相机和模型之间的距离足够远,以便能将整个模型投放到计算机屏幕上。如果第1个参数即相机对象为NULL,场景到相机之间的距离将不能被

    2024年02月02日
    浏览(19)
  • 电脑键盘大小写切换按哪个键?正确操作分享!

    “我在工作时,经常需要输入英文文档,但我不知道输入大小字母时应该按哪个键切换,有朋友可以教教我吗?” 在我们使用电脑时,输入英文文档是经常会遇到的事。当输入某些单词时,我们可能需要切换大小写。电脑键盘大小写切换按哪个键呢?这个键有利于快速完成切

    2024年02月04日
    浏览(34)
  • 在windows和ubuntu之间共享鼠标键盘,无缝切换

    安装和使用Barrier在Linux和其他设备之间共享键盘和鼠标 Barrier是一个开源软件,能够在多台计算机之间共享鼠标和键盘,如果你同时使用window和linux系统,那就可以安装和使用Barrier。 开源地址:https://github.com/debauchee/barrier ubuntu下安装: 运行以下命令安装 或者在软件商店中进

    2024年02月04日
    浏览(41)
  • 键盘按键切换电脑显示屏的输入源的方法

    一、查看显示屏的输入源 如上图电脑显示屏可以选择两个输入源,接下来需要下载两款软件来实现键盘切换输入源。 二、下载必需软件 1.下载ControlMyMonitor:Download ControlMyMonitor 页面网址:http://www.nirsoft.net/utils/control_my_monitor.html 2.下载AutoHotKey或者WinHotKey的快捷设置软件 Auto

    2024年02月09日
    浏览(87)
  • cherry键盘alt+tab无法切换窗口的问题解决

    现象: alt 好用, tab好用,tab+alt不好用。 原因: 键盘误触了关闭了alt+tab的功能。 不同的樱桃键盘可能方法不一样,下面是两个方案,本人的键盘是MX6.0 G80 3930红轴,用的方法一解决就了,方法二不管用。 解决办法: 1. 按下右上角小键盘Num上面的那个按键。 或者 2. 按下F

    2024年01月19日
    浏览(54)
  • vue 管理后台 使用虚拟键盘组件 支持中英文切换

    前言:在大型触屏设备(如双屏设备)中,就没有键盘去操作,而且在触屏input或者textarea的输入时候就无法去输入值,没办法触发输入框enter事件,所以就需要去建立一个虚拟键盘去操作 就想着找一找vue有没有类似的键盘组件。 还!真!有! 项目使用框架:vue+element ui 官网

    2024年02月11日
    浏览(42)
  • 【LangChain】检索器之MultiQueryRetriever

    基于距离的向量数据库检索在高维空间中嵌入查询,并根据“ 距离 ”查找相似的嵌入文档。 但是,如果查询 措辞 发生细微变化,或者嵌入不能很好地捕获数据的语义,检索可能会产生不同的结果。有时需要进行及时的工程/调整来手动解决这些问题,但这可能很乏味。 Mu

    2024年02月15日
    浏览(65)
  • QMLDay2:圆角按钮,关联键盘左右键,鼠标点击。状态切换控制。

    作用: 圆角按钮,关联键盘左右键,鼠标点击。状态切换控制。 代码: 运行截图

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包