我们把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的肺还有失去动力之前回去继续看看。

进入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个人博客-记录走过的技术之路

转载于:https://www.cnblogs.com/wang985850293/p/10423539.html

探索未知种族之osg类生物---器官初始化一相关推荐

  1. 探索未知种族之osg类生物---器官初始化四

    上一节我们对完成了对osg生物内部非常重要器官graphicsContext的初始化工作.这样就可保证我们场景中至少有一个graphicContext存在,不至于刚出生就面临夭折.我们根据上一节中os ...

  2. 类的初始化列表_探索未知种族之osg类生物---渲染遍历之draw函数二

    我们今天今天真是进入SceneView::draw()函数. 1.判断主相机是否为隐藏状态也就是(camera->getNodeMask()==0),隐藏状态就会退出这个draw函数. 2.开始 ...

  3. 退出所有循环_探索未知种族之osg类生物---呼吸分解之事件循环三

    那我们就开始处理这些事件中得到的所有的交互事件,首先我们要判断这些事件是否包含osg的退出事件,那什么情况下会触发这个退出事件呢?如果您运行过osg中example中的小例子的,聪明的你一定就会发现当 ...

  4. osg动态加载模型不显示_探索未知种族之osg类生物---渲染遍历之Renderer::draw()简介...

    我们今天进入上一节的遗留问题Renderer::draw()的探究. 1.从_drawQueue中取出其中一个sceneView对象.SceneView是对scene和view类的封装,通过他可以方便 ...

  5. 探索未知种族之osg类生物---起源

    任何程序都是有生命的,是生命就需要呼吸.例如普通的windows程序,当运行完main()函数后,就需要进入消息循环,来监听用户的各种操作,以便做出及时的回应.这样的每次循环就像生命的每次呼吸,来维持 ...

  6. 探索未知种族之osg类生物---呼吸分解之更新循环一

    上节总结 前几天我们大体上介绍完成了osg的事件循环的介绍,总结一下osg的时间循环主要就是得到平台(windows)的所有消息,并遍历所有的node的eventCallback,并对他们进行处理.接 ...

  7. 【乘风破浪的开发者】丁一超:从AI实战营出发探索未知的AI世界

    摘要:从年初的不知不觉进入AI学习的道路,到认识并熟练使用ModelArts平台.虽然只有短短的半年,但这半年的探索学习,让丁一超看清了未来的路在何方. 从招聘网站上输入"人工智能工程技术人 ...

  8. 大学英语(第六册)复习(原文及全文翻译)——Unit 10 - Debating The Unknowable(探索未知世界)

    Unit 10 - Debating The Unknowable Do animals think? How could the earth show so many signs of design ...

  9. 「镁客早报」人类首次在太空3D打印生物器官;中国学者研制出高性能低成本的电解“水制氢”催化剂...

    SpaceX公司Dragon飞船油漆可能是造成国际空间站污染的罪魁祸首:谷歌公布将在加州山景城进行大规模开发. 1.SpaceX公司Dragon飞船油漆可能是造成国际空间站污染的罪魁祸首 12月10日 ...

最新文章

  1. 分享这篇耗子叔的-《请玉伯一起来聊一聊“所向无敌的土方法”》
  2. python基本使用-10个易被忽视但应掌握的Python基本用法
  3. caddy php sock,Caddy环境下一些Web应用程序的配置参考
  4. Python 增删改查
  5. python使用redis在实际场景使用_Python使用Redis实现作业调度系统(超简单)
  6. js 数组 ajax php,js里面的对象ajax post到php端直接变成数组了?
  7. 数据库设计技巧系列(二)——设计表和字段
  8. Linux下部署Kafka分布式集群,安装与测试
  9. 程序员 30 岁前,该如何规划自己的职业发展?
  10. Android——手机系统重装的备忘笔记
  11. TCPIP三次握手详情
  12. 【MFC开发(5)】单选按钮控件RADIOBUTTON
  13. 墨珩科技 | 密码行业标准制定的参与者
  14. Intellj Idea关闭自动更新
  15. 读后感:救黑熊重要,还是救助失学儿童重要?
  16. python 自动登录网站_Python使用selenium实现网页用户名 密码 验证码自动登录功能...
  17. 直播播控和分发基础架构
  18. 将XP SP3集成到Windows XP安装光盘
  19. C语言常用格式化符号
  20. MVC框架中分页的实现

热门文章

  1. 使用SignalR和SQLTableDependency进行记录更改的SQL Server通知
  2. ASP.NET项目中的驼峰格式JSON响应
  3. linux运行多个c文件路径,linux c的连接库和怎么同时编译多个源程序
  4. spring boot注解_Spring-boot(二)注解
  5. 计算机网络实验题教程推介,计算机网络实验教程从原理到实践(附光盘)
  6. PHP如何防止远程提交,PHP如何防止远程提交
  7. python标准输入如何一行一行读_Python 3提供了( )函数从标准输入(如键盘)读入一行文本。_学小易找答案...
  8. 计算机组装的理论知识,计算机组装基本知识点.ppt
  9. 图层上下_「只要功夫深 不用关键帧」之图层序号的玩法
  10. c语言argc,C语言 argc和argv