zoukankan      html  css  js  c++  java
  • 探索未知种族之osg类生物---器官初始化一

    frame

    我们把ViewerBase::frame()比作osg这类生物的肺,首先我们先来大概的看一下‘肺’长什么样子,有哪几部分组成。在这之前得对一些固定的零件进行说明,例如_done代表osg的viewer是否被删除释放内存;_firstFrame代表是否是第一次进入frame函数。那么接下来我们会发现frame函数表面上组成结构非常简单,逻辑上也非常的清晰---先判断当前的viewer是否被删除,也就是判断是否died,如果已经died,那么肺的功能就不会进行。然后判断这个osg小孩是否刚刚出生,是的话就要执行一些初始化工作---嚎啕大哭。最后剩下的四个函数就是一个正常的osg生物的肺周而复始进行的工作。

    我们一步步来,首先看看刚刚生下来的osg宝宝为什么会哭,对osg整体产生了什么样的影响。进入第一个函数viewerInit(),ViewerBase::ViewerInit是纯虚函数,代表他的实现由他的子类完成,上一节我们研究了osg生物两种存在形式时,就已经定义了目前正在进行工作的viewer是哪一个,所以我们直接到osgViewer::Viewer(是ViewerBase的子类)下看看他的ViewerInit函数。经过复杂的拆解工作,终于发现ViewerInit是在osgViewer::Viewer的头文件中定义并且实现的。并且它的功能非常简单就是简单的调用init()方法。而这个init方法又是在那个类里面定义的呢。Viewer类分别继承了osgViewer::ViewerBase以及osgViewer::View。Init既然在osgViewer::ViewerBase和osgViewer::Viewer中都没有记录,那么肯定是在osgViewer::View中定义和实现的。我们这里就有一个疑问Viewer和View到底有什么区别。从名字上我们有一个大概的区分Viewer视景器,View视图风景。简单的理解Viewer就是View的操作器,osgViewer::View就是持有场景中的一张景色。仔细的你们一定会发现osgViewer::View继承自osg::View以及osgGA::GUIActionAdapter. osgGA::GUIActionAdapter我们先不进行详解要不就跑偏太远了,先介绍osg::View. osg::View我们看作是场景中一系列相机的掌管者。好了。我们这些就先说到这里,赶紧趁着刚刚打开的osg的肺还有失去动力之前回去继续看看。

    viewInit

    进入osgViewer::View::init()函数,这是一个新的身体零件,和研究frame()函数的思路一样,我们先认识它内部的固定零件:_eventQueue代表空的osg内的事件队列—这个我们以后再介绍,_cameraManipulator代表相机的操作方式—这个我们都会在进入frame()函数之前进行单独的指定。所以我们大体上也就大体了解了osgViewer::View初始化工作,就是创建一个名叫osgGA::GUIEventAdapter::FRAME的事件并放到_eventQueue中,以及对_cameraManipulator相机操作方式的初始化。不同的摄像机操作模式就会有不同的init函数,我们就对CameraManipulator::init()函数不进行介绍了--- 很简单。

    这样我们就完成了对ViewerBase::frame()函数中第一个功能介绍完毕,总结一下。Viewer::viewerInit()函数就是完成了osg中事件队列的初始化以及相机操作器的初始化工作。当然这些工作之前,也就是进入frame函数之前必须先完成viewer以及相机的定义。但是osg库非常强大,即是你没有定义viewer以及camera他就会默认的按照约定的模式创建一组他们出来。

    欢迎大家来我的新家看一看3wwang个人博客-记录走过的技术之路

  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/wang985850293/p/10423539.html
Copyright © 2011-2022 走看看