调试最长的一帧(第一天)

突然觉得调试更一目了然。避免“看过就学会,收藏即学习”

 

先加载个牛

直奔主题frame()

这里用到的是基类viewerBase::frame(),单视景器和多视景器都调用它。这里是单视景器

 

视景器初始化

 

转到了osgViewer::viewer::Init(),

为什么呢?因为主函数调用就是单视景器

osgViewer::Viewer派生自ViewerBase和osgViewer::View,所以调用的是基类ViewerBase的frame()

那为啥不继续子类调用父类了呢?因为是个纯虚函数。该父类调用子类了。

然后,继续啃另外一个爹,父类osgViewer::View的初始化。这里先总结下,每个事件是GUIEventAdapter,每个窗口有一个事件队列EventQueue,EventQueue的成员变量_eventQueue是存储事件的链表,即GUIEventAdapter->_eventQueue->osg::ref_ptr<osgGA::EventQueue>     _eventQueue;->View(这两个_eventQueue不是同一个意思,一个是链表,一个是EventQueue对象)

 

涉及到了两个成员变量

1,第一个成员变量_eventQueue

从类的注释看,osgGA::EventQueue收集单个窗口事件,也就是说,每个窗口都有个事件队列。

事件列表及操作,一堆GUIEventAdapter

既然与窗口事件相关,那就与上下文相关,鼠标范围相关(范围以外点击不引起鼠标事件),

鼠标有各种事件

键盘有各种事件

窗口有各种事件

时间相关事件

用户自定义事件(相当重要,可以自定义封包)

事件状态

 

这些事件都是互斥保护

列表中保存的这一堆GUIEventAdapter,很明显就是窗口、鼠标、键盘等交互事件了

看成员变量

 

2,第二个成员变量osg::ref_ptr<osgGA::MatrixManipulator>  _cameraManipulator;漫游器

从定义看出,漫游器是个继承自GUIEventHandler的抽象类,也就是说,实际应用还需要再派生

一般通过继承osgGA::GUIEventHandler类,并重写handle()函数,再派生。

 

 

拉回来,继续调试下去


    //分配和返回一个新的GUIEventAdapter事件指针

 

事件类型:

这个例子用的是KeySwitchMatrixManipulator

_current是选中的漫游器

这里选中的是轨迹球漫游器

这两个名字起的也太任性了

第一天结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值