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

电商网站建设教学总结济南网站开发培训班

电商网站建设教学总结,济南网站开发培训班,关掉自己做的网站,注册公司应该去哪个部门昨天阅读了启动的过程,今天我们深入阅读下初始化的过程。 初始化流程 开始之前我们来看下这里的类图,结合类图来看本文的介绍: 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/533638.html

相关文章:

  • 南京的网站制作公司国家建设局网站首页
  • 深圳品牌衣服店名称免费网站seo排名优化
  • 网站开发制作公司有哪些什么做网站
  • 站长工具app入替皮杖 wordpress
  • 微信平台与微网站开发使用html制作网页
  • wordpress数据库承载单页网站如何优化
  • 集美那里有教网站建设做网站公司宣传语
  • 重庆秀山网站建设费用天津做网站价格
  • 商家网站建设西安企业建站在哪里做
  • 内蒙古住房和城乡建设部网站主流网站关键词排名
  • 设计网站私单价格网络营销是什么的组成部分
  • 珠宝商城网站模板qq群网站制作
  • 工程建设工资高吗网站优化入门免费教程
  • 企业家网站建设建设部官方网站查询
  • 深圳 做网站seo域名综合查询
  • 网站建设wuliankj怎么开发平台软件
  • 廊坊做网站上海公司电话wordpress 浏览器缓存
  • 什么网站可以做TCGA病理分期公司以优化为理由裁员合法吗
  • 网站建设期中考试题自学python需要的软件
  • 安徽省建设工程信息网站进不了广州做外贸网站建设
  • 网站建设哪个品牌好wordpress做中文官网
  • 保险网站建设方案网站建设预算申请如何写
  • 重庆建设工程信息网站上海网站建设赢昶
  • 青海省公路建设管理局官方网站上海外贸公司排名榜
  • php网站建设带数据库模板江阴建设银行网站
  • 株洲 网站建设 公司网站外链
  • 长春网站建设推广uc官网网站开发者中心
  • 哪一个网站是专门做兼职的广东省广州市白云区区号
  • 国美在线网站域名建设我想开网站
  • 成都旅游网站建设建立网站站点