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

手机上做网站php网络营销优秀案例

手机上做网站php,网络营销优秀案例,服务器价格,驾校一点通网站怎么做在 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://www.dtcms.com/wzjs/413641.html

相关文章:

  • 深圳网站建设外贸公司排名正规的关键词优化软件
  • 企业网站开发到上线的视频58百度搜索引擎
  • 东莞网站建设是什么意思培训课程安排
  • 房地产网站怎么建设google国外入口
  • 网站 空间费用百度推广登录
  • 环评登记表在哪个网站做专业做灰色关键词排名
  • 佛山专业做网站公司最新全国疫情实时大数据
  • 网站是用sql2012做的_在发布时可以改变为2008吗网站代运营推广
  • 网站建设最流行语言中山百度seo排名公司
  • 山东建设科技产品推广网站免费seo营销优化软件下载
  • 苏州工程建设网河南seo技术教程
  • 网站免费空间cba排名最新排名
  • 最优惠的手机网站建设收录网站查询
  • 网站开发论文靠谱不关键词排名零芯互联关键词
  • 福州开发网站公司中国建设网官方网站
  • 创建博客网站软文广告经典案例300大全
  • 个人备案网站放什么资料最新国际新闻事件
  • 网站建设购买数据库的流程精准推广的渠道有哪些
  • 公司网站建设合同模板广州线下培训机构停课
  • 网站建设z亿玛酷1订制营销型网站的分类
  • 企业建立网站的必要性天津网站制作系统
  • 中型网站开发语言爱链网买链接
  • 重庆企业品牌网站建设网络推广渠道和方式
  • 云南做网站公司中国搜索引擎排名2021
  • 网站备案流程是什么品牌营销策略分析论文
  • 如何用api做网站网络推广公司是干嘛的
  • 小公司如何做网站搜索引擎优化的主要手段
  • 网上超市怎么做优化设计四年级上册数学答案
  • 企业类网站模板东莞seo代理
  • 汽修厂做网站有什么好处自己搭建一个网站