osg仿真循环剖析(基于王锐的最长的一帧)

osg仿真循环剖析(基于王锐的最长的一帧)

ID:39620615

大小:1.26 MB

页数:90页

时间:2019-07-07

osg仿真循环剖析(基于王锐的最长的一帧) _第1页
osg仿真循环剖析(基于王锐的最长的一帧) _第2页
osg仿真循环剖析(基于王锐的最长的一帧) _第3页
osg仿真循环剖析(基于王锐的最长的一帧) _第4页
osg仿真循环剖析(基于王锐的最长的一帧) _第5页
资源描述:

《osg仿真循环剖析(基于王锐的最长的一帧) 》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、OSG仿真循环剖析翟陆续(基于王锐的最长的一帧)开始剖析首先知道一下viewerbase类中的虚函数realize(),frame(),viewerinit,isRealizedvirtualvoidadvance(doublesimulationTime=USE_REFERENCE_TIME)=0;virtualvoideventTraversal()=0;virtualvoidupdateTraversal()=0;virtualvoidrenderingTraversals();virtualvoidgetContex

2、ts(Contexts&contexts,boolonlyValid=true)=0;首先看一个小程序流程示例程序一:Intmain(intargc,char**argv){osgViewer::Viewerviewer;//声明一个单视景体对象viewer.setSeceneData(“cow.osg”);//把模型数据加入照相机节点下while(!viewer.done())//仿真循环(1){viewer.frame();(2)}Return0;}示例程序二:Intmain(intargc,char**argv){os

3、gViewer::Viewerviewer;//声明一个单视景体对象viewer.setSeceneData(“cow.osg”);//把模型数据加入主从照相机节点下面viewer.realize();(3)returnviewer.run();//仿真循环(4)}Viewer从view和viewerbase派生而来,在基类viewerbase中有一个受保护的bool变量_done,在viewerbase构造函数里面调用函数voidViewerBase::viewerBaseInit(){……….._firstFrame=t

4、rue;_done=false;……….}_done=true时候退出仿真循环,退出的条件有:1.没能创建可用的图形上下文设备。则致_done=true;BoolViewerBase::done()const{return_done;}由于viewer继承了viewerbase,所以(1)中viewer.done调用的是从viewerbase继承而来的done函数.在viewerbase里面有一个虚函数frame();如下:#defineDBL_MAX1.7976931348623158e+308/*maxvalue*/#d

5、efineUSE_REFERENCE_TIMEDBL_MAXVirtualvoidViewerBase::frame(doublesimulationTime=USE_REFERENCE_TIME){if(_done)return;//OSG_NOTICE<

6、e{viewerinit();//调用viewer的,因为他是viewerbase虚函数,并且viewer重写了它,创建事件队列,和漫游器if(!isRealized())//通过判断可用的上下文设备个数是否大于0判断是不是建立了设备{realize();//创建图形上下文设备,将渲染上下文RC对应到正确的窗口绘制句柄上,处理单线程(SingleThreaded)模式下,多处理器系统的数据线程分配方式。创建于已有图形上下文设备同数量的带缓冲区的图形设备.图形设备对象工作:提供场景渲染结果的载体.}_firstFrame=fa

7、lse;}advance(simulationTime);//正式进入仿真循,获取和设置帧数,帧数帧速率,垃圾回收eventTraversal();//事件更新,设置为事件队列的“响应范围,消息传递函数,传//递消息到window消息循环,设置window窗口坐标到视口坐标updateTraversal();//OSG的更新遍历函数updateTraversal在系统每帧的执行过程//中有着重要的地位,除了处理用户的更新回调对象之外,还要负责更新摄像机的位置,并//且更新分页数据库DatabasePager和图像库Image

8、Pager的内容renderingTraversals();//场景的筛选和绘制工作和同步工作,startThreading}其中viewer调用viewerbase的虚函数frame(),因为viewer并没有重写它.(3)可有可无,因为在函数run里面有判断,如果没有realize则调

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。