osg 是基于MVC模式进行的。
frame函数包含了整个引擎在渲染一帧的过程中所要做的所有事情。这个函数是viewbase的成员函数。对于单视景体和多视景体都是一样。
该函数所执行的主要工作如下:
1、如果这是仿真系统启动后的第一帧,则执行viewerInit();此时如果还没有执行realize()
函数,则执行它。
2、执行advance 函数。
3、执行eventTraversal 函数,顾名思义,这个函数将负责处理系统产生的各种事件,诸
如鼠标的移动,点击,键盘的响应,窗口的关闭等等,以及摄像机与场景图形的事件回调
(EventCallback)。
4、执行updateTraversal 函数,这个函数负责遍历所有的更新回调(UpdateCallback);
除此之外,它的另一个重要任务就是负责更新DatabasePager 与ImagePager 这两个重要的分
页数据处理组件。
5、执行renderingTraversals 函数,这里将使用较为复杂的线程处理方法,完成场景的筛
选(cull)和绘制(draw)工作。
可以看出mvc模式是C先行,也就是事先响应C端的事件,比如用户的GUI事件,以及事件回调
接着是更新数据就是M端,这个可能是来自于C端产生的数据变化,也可能是lod加载造成的变化,
可以看出几何和纹理是分开两个线程的,这是为了分页数据处理
最后是V端,这个地方主要是利用opengl的渲染管线进行绘制。