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

宁波优化网站排名软件做塑胶网站需要什么材料

宁波优化网站排名软件,做塑胶网站需要什么材料,app平台开发定制软件,网站里面的数据库是怎么做的昨天阅读了启动的过程,今天我们深入阅读下初始化的过程。 初始化流程 开始之前我们来看下这里的类图,结合类图来看本文的介绍: init函数流程 frame函数其中有个viewerInit() 它的实现也很简单,就是去调用了init函数. virtu…

在这里插入图片描述

昨天阅读了启动的过程,今天我们深入阅读下初始化的过程。

初始化流程

开始之前我们来看下这里的类图,结合类图来看本文的介绍:
在这里插入图片描述

init函数流程

frame函数其中有个viewerInit()

它的实现也很简单,就是去调用了init函数.

virtual void viewerInit() { init(); }

从这里就调用到了它的父类的init函数,init函数实现如下:

// View 类初始化函数实现
void View::init()
{// 输出调试信息,标记当前进入 View 初始化流程OSG_INFO<<"View::init()"<<std::endl;// 创建一个初始化用的事件对象(FRAME 类型事件)// 使用 ref_ptr 智能指针管理事件对象生命周期,防止内存泄漏osg::ref_ptr<osgGA::GUIEventAdapter> initEvent = _eventQueue->createEvent();initEvent->setEventType(osgGA::GUIEventAdapter::FRAME); // 设置事件类型为帧事件// 如果相机操作器有效,则用初始化事件对其进行初始化// CameraManipulator 负责处理相机视角控制(如鼠标键盘交互等)if (_cameraManipulator.valid()) // 检查相机操作器是否有效{// 调用相机操作器的初始化方法// 传入初始化事件和当前 View 对象的引用(*this)// 这允许操作器根据视图特性进行初始化设置_cameraManipulator->init(*initEvent, *this);}
}

这个函数也主要干了两件事:
1. 使用_eventQueue创建的事件对象
2. 初始化_cameraManipulator并传入该对象

我们继续来一个个介绍。

_eventQueue队列创建事件对象

_eventQueue是一个队列,它的声明在view类里。

osg::ref_ptr<osgGA::EventQueue>         _eventQueue;

其中EventQueue类的createEvent()都干了什么?让我们继续往下看:

/*** 创建新的事件对象实例* @return GUIEventAdapter* 新创建的事件对象指针,由调用方管理内存*/
GUIEventAdapter* EventQueue::createEvent()
{// 检查是否存在累积的事件状态if (_accumulateEventState.valid())  // 判断累积事件状态是否有效{// 当存在有效累积状态时:// 1. 使用拷贝构造函数基于当前累积状态创建新事件// 2. get() 方法从 ref_ptr 中获取原始指针// 3. 通过拷贝构造保证新事件继承当前所有状态(如鼠标位置、按键状态等)return new GUIEventAdapter(*_accumulateEventState.get());}else {// 当没有累积状态时:// 创建全新的默认初始化事件对象return new GUIEventAdapter();}
}

可见就是创建了个GUIEventAdapter对象。

源码路径:(include/osgGA/GUIEventAdapter.h)

GUIEventAdapter:

GUIEventAdapter 是 OpenSceneGraph (OSG) 中处理用户输入事件的核心类,它封装了所有与图形用户界面(GUI)相关的事件(如鼠标、键盘、窗口事件等),并将这些事件标准化为统一的接口。

初始化_cameraManipulator并传入该对象

先来看看_cameraManipulator是来干嘛的。

osg::ref_ptr<osgGA::CameraManipulator>  _cameraManipulator;

CameraManipulator:

osgGA::CameraManipulator 是 OpenSceneGraph (OSG) 中的一个类,用于控制场景中的相机行为。
它是 OSG 的事件处理和交互框架的一部分,属于 osgGA(Graphics Application)命名空间。
通过继承和实现 CameraManipulator,开发者可以创建自定义的相机控制器,用于实现第一人称视角、轨道视角、飞行模式等常见的 3D 场景导航方式。

嗯,这玩意原来就是用来控制camera的。

内置的 CameraManipulator

OSG 为我们提供了一些内置的 CameraManipulator 子类,用于实现不同的相机控制模式:

  • osgGA::TrackballManipulator

实现了类似 3D 轨道球的操作,允许用户通过鼠标拖动来旋转、平移和缩放场景。

  • osgGA::FlightManipulator

模拟飞行模式,用户可以通过鼠标和键盘控制相机的飞行方向和速度。

  • osgGA::DriveManipulator

模拟驾驶模式,适合于地面导航,例如车辆驾驶或步行。

  • osgGA::TerrainManipulator

专为地形导航设计,支持第一人称视角和地形跟随功能。

  • osgGA::FirstPersonManipulato

提供第一人称视角控制,常用于游戏开发。

嗯~,这样还是蛮方便的。当然我们也可以基于这个类自定义一个漫游器。

不过我们这里只是讲源码的流程,就不展示如何自定义了。

_cameraManipulator对象的值是通过View::setCameraManipulator函数来传入的。

从源码中我们可以看到有很多的直接设置的osgGA::TrackballManipulator这个内置漫游器。
在这里插入图片描述
我们就来看看它的init函数。

TrackballManipulator的init函数

TrackballManipulator的代码路径:include/osgGA/TrackballManipulator.h

看看它的类图关系:
在这里插入图片描述

其中又有两个新的类,我们一个一个介绍。

osgGA::OrbitManipulatorOpenSceneGraph(OSG)图形库里 osgGA::CameraManipulator 的一个派生类。它为用户提供了一种基于轨道的相机控制方式,允许用户围绕一个中心点旋转、缩放以及平移相机,从而实现对 3D 场景不同视角的观察。

osgGA::StandardManipulatorOpenSceneGraph(OSG)中 osgGA::CameraManipulator 的一个派生类。它集成了多种常用的相机操作方式,为用户提供了一套标准化、便捷且功能丰富的相机控制方案,方便用户对 3D 场景进行不同视角的观察与交互。

最后其实调用的是StandardManipulator的`

void StandardManipulator::init( const GUIEventAdapter& /*ea*/, GUIActionAdapter& us )
{flushMouseEventStack();// stop animation_thrown = false;us.requestContinuousUpdate(false);
}

这里可以看到,我们传入的GUIEventAdapter居然都没被使用。

看起来并不是所有的漫游器都需要处理这个GUIEventAdapter事件。

虽然init函数就那么几行,但是巴拉下来,还是内容挺多的。

好了,今天就到这里,明天见。_

在这里插入图片描述

http://www.dtcms.com/wzjs/830922.html

相关文章:

  • 15年做哪个网站致富温州网站策划
  • 网站承建互动营销的方式有哪些
  • 怎么样建立学校网站移动插件WordPress
  • 青岛电商网站建设电子商务网站加盟
  • 网站建设比较牛的企业做网站设计答辩问题
  • 3gcms企业手机网站整站源码asp太原市一页网络科技有限公司
  • 1万一个月扣多少个税推广优化厂商联系方式
  • 互联网企业网站模板全球购物网站大全
  • 内部网站如何建设无锡互联网企业
  • iis建站安装wordpress重庆娱乐公司
  • 响应式 网站建设袜子网站建设规划书
  • 优质手机网站建设哪家好武进网站建设
  • 大连网站建设主页专业网站制作技术
  • 网站加速器推荐网站建设难么
  • 手机微网站怎么设计方案品牌设计分为几部分
  • frontpage做网站wordpress网站定时更新没有发布
  • 人们做网站怎么赚钱wordpress主题对接支付
  • wordpress设置手机浏览对新网站做seo大概需要多久
  • 涿州网站建设天峰汕头东莞网站建设
  • 企业网站的目的做电商网站一般要多少钱
  • 万盛网站建设公司怎样自己做卖商品的网站
  • 做柜子好的设计网站哪里卖网站模板
  • 深圳市住房和城乡建设局网站工作室建设
  • 自助发外链网站广州好的做网站公司
  • 做网站就是做点击率品牌网站建设等高端服务
  • 成都网站优化方法智能建造工程
  • 网站运营专员具体每天怎么做帝国cms 网站地图标签
  • 网站建设需要考虑哪些因素一了网站
  • 客户网站留言企业管理咨询心得体会
  • 手机网站做seo代做网站地图