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

零售网站开发云南app制作

零售网站开发,云南app制作,python 网站开发入门,淘宝优惠券微网站开发在 OpenSceneGraph (OSG) 中,操作器(Manipulator)是用于控制视图和场景交互的核心组件。 常见的操作器包括 TrackballManipulator(轨迹球模式)、FlightManipulator(飞行模式)等。 通过使用这些…

请添加图片描述

OpenSceneGraph (OSG) 中,操作器(Manipulator)是用于控制视图和场景交互的核心组件。

常见的操作器包括 TrackballManipulator(轨迹球模式)、FlightManipulator(飞行模式)等。

通过使用这些操作器,用户可以以不同的方式与场景进行交互。

今天我们将深入探讨如何切换轨迹球模式和飞行模式,并实现一个自定义的操作器。


切换轨迹球模式和飞行模式

  • 轨迹球模式 (TrackballManipulator):模拟一个虚拟的球体,允许用户通过鼠标拖动来旋转、平移和缩放场景。
  • 飞行模式 (FlightManipulator):模拟飞行器的行为,可以通过键盘和鼠标控制视角的移动,适合大范围场景的浏览。

实战:切换操作器

在 OSG 中,可以通过 osgViewer::ViewersetCameraManipulator() 方法来动态切换操作器。

#include <osgViewer/Viewer>
#include <osgGA/TrackballManipulator>
#include <osgGA/FlightManipulator>
#include <osgDB/ReadFile>
#include <iostream>int main()
{// 创建 ViewerosgViewer::Viewer viewer;// 加载模型osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("cessna.osg");if (!model){std::cerr << "无法加载模型!" << std::endl;return -1;}viewer.setSceneData(model);// 默认使用轨迹球操作器viewer.setCameraManipulator(new osgGA::TrackballManipulator);// 主循环中监听按键切换操作器while (!viewer.done()){viewer.frame();// 检测按键if (viewer.getEventQueue()->keyDown('t')){std::cout << "切换到轨迹球模式..." << std::endl;viewer.setCameraManipulator(new osgGA::TrackballManipulator);}else if (viewer.getEventQueue()->keyDown('f')){std::cout << "切换到飞行模式..." << std::endl;viewer.setCameraManipulator(new osgGA::FlightManipulator);}}return 0;
}
运行效果
  • 按下 t 键切换到轨迹球模式。
  • 按下 f 键切换到飞行模式。

请添加图片描述

实战:实现自定义操作器

如果内置的操作器无法满足需求,我们可以继承 osgGA::CameraManipulator 类来实现自定义操作器。

自定义操作器的基本结构

自定义操作器需要重写以下方法:

  • home():重置操作器到初始状态。
  • handle():处理事件(如鼠标、键盘输入)。
  • getMatrix()getInverseMatrix():返回摄像机的变换矩阵和逆矩阵。

代码实例

以下是一个简单的自定义操作器示例,它会根据鼠标拖动改变摄像机的位置。

#include <osgGA/CameraManipulator>
#include <osg/Matrixd>
#include <osg/Quat>
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <iostream>class CustomManipulator : public osgGA::CameraManipulator
{
public:CustomManipulator() : _center(0, 0, 0), _distance(10.0) {}// 重置到初始状态void home(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) override{_center = osg::Vec3(0, 0, 0);_distance = 10.0;}// 处理事件bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) override{switch (ea.getEventType()){case osgGA::GUIEventAdapter::DRAG:// 根据鼠标移动改变中心点_center.x() += ea.getDX() * 0.1;_center.y() -= ea.getDY() * 0.1;return true;default:return false;}}// 获取摄像机矩阵osg::Matrixd getMatrix() const override{return osg::Matrixd::translate(osg::Vec3(0, 0, _distance)) *osg::Matrixd::translate(_center);}// 获取逆矩阵osg::Matrixd getInverseMatrix() const override{return osg::Matrixd::inverse(getMatrix());}private:osg::Vec3 _center;   // 相机注视的中心点double _distance;    // 相机到中心点的距离
};int main()
{// 创建 ViewerosgViewer::Viewer viewer;// 加载模型osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("cessna.osg");if (!model){std::cerr << "无法加载模型!" << std::endl;return -1;}viewer.setSceneData(model);// 使用自定义操作器viewer.setCameraManipulator(new CustomManipulator);// 开始渲染循环return viewer.run();
}
运行效果

在这里插入图片描述


在这里插入图片描述


文章转载自:

http://u5kOVZTS.pzrnf.cn
http://bpdiGP4R.pzrnf.cn
http://z4fnCt2z.pzrnf.cn
http://cMw8l3Re.pzrnf.cn
http://zu2R3e8s.pzrnf.cn
http://xfSOZON6.pzrnf.cn
http://dQPOsMk8.pzrnf.cn
http://BgQ2QmMl.pzrnf.cn
http://NiRHkD0k.pzrnf.cn
http://3asHih61.pzrnf.cn
http://9NujO9l8.pzrnf.cn
http://Gh9bg7Zq.pzrnf.cn
http://NBVyfP13.pzrnf.cn
http://FaqArpdC.pzrnf.cn
http://nttjguw0.pzrnf.cn
http://J004XBfi.pzrnf.cn
http://HxP0QrqU.pzrnf.cn
http://7WpFzsPm.pzrnf.cn
http://IaosQQVc.pzrnf.cn
http://vsd5W1UZ.pzrnf.cn
http://QqemCxAr.pzrnf.cn
http://qKcC0oRQ.pzrnf.cn
http://45RAZ1y7.pzrnf.cn
http://rSYfAidm.pzrnf.cn
http://bNZgZ44y.pzrnf.cn
http://ST6W1QrW.pzrnf.cn
http://tIrslabx.pzrnf.cn
http://3bfUar4K.pzrnf.cn
http://KAUmald1.pzrnf.cn
http://yUR3g93C.pzrnf.cn
http://www.dtcms.com/wzjs/634210.html

相关文章:

  • 专业网站建设技术创建一个网站买卖
  • 网站建设公司那记号网站开发使用哪些开发语言
  • 唱片公司网站模板wordpress换php7出错
  • 律师事务所公司类网站建设案例一级a做爰电影免费观看网站
  • 访问不了服务器网站吗北京工商登记
  • 网站建设管理自查报告网站有哪些推荐
  • 灯具网站建设尚层别墅装饰公司官网
  • 做网站主流用什么语言网络营销的特点包括哪些
  • 网站流量分析报告建设部网站业绩补录
  • 制作网站的手机软件wordpress图片评论
  • 账号注册网站杭州网站建设路
  • 网站空间可以通过什么获取建设网站是什么意思
  • 服务器网站建设软件有哪些说明多媒体教学网站开发的一般步骤
  • 法治建设网站模块名称平面设计培训班价格
  • 苏州找工作网站有哪些微信上的h5页面是怎么制作的
  • 作风建设 宣讲家网站教育app定制
  • 扬州网站建设 开元WordPress仿百度百家主题
  • 哪家公司做跳转网站太阳能 技术支持 东莞网站建设
  • 打开网址资料网站广告投放平台投放
  • 网站建设陷阱网站设计培训学校有哪家
  • 本地wordpress无法打开网站网站建设与推广实训报告
  • 河北提供网站制作公司哪家好怎么查一个工地的施工单位
  • 业务网站风格模板公关策划是做什么的
  • 大学生网站建设小结wordpress插件有木马
  • 聊城做wap网站哪儿好苏州百度推广公司地址
  • 自己专业做网站做网站的外包公司上班好不好
  • 网站优化外包公司wordpress滑动解锁代码
  • 有网站开发经验怎么写简历旅游网站开发目的和目标
  • 做什网站好山西网站建设多少钱
  • 梅州市做试块网站微商怎么引流推广