目录
1、渲染最简单代码
2、详解run方法
3、详细过程
4、回调函数
5、Node Visitor
1、渲染最简单代码
2、详解run方法
3、详细过程
3.1 advance()方法
进行帧计数
3.2 eventTraversal()
eventTraversal()响应用户操作,eventTraversal()遍历的是事件队列,而不 是场景图;而且这个事件队列是OSG自己的 Event Queue,并非操作系统的事件队列;
也就是说用户基于osg基类定义的事件,通过osg开放出来的接口注册了之后,在这里进行每一帧渲染,调用。
eventTraversal()与andvance()一起为更新 遍历提供依据。标记帧是否渲染完成。
3.3 updateTraversal()(更新遍历)
在updateTraversal()中实现,修改场景图,如渲染状态、结点参数等,以实现动态场景;更新摄像机。
备注:
渲染过程的几个遍历,特别是事件遍历和更新遍历,我们要想按照我们的意图去响应事件和更新场景图,就要用到回调函数 callback来参与到这些遍历中去。
详细事件遍历看章节4 回调函数。
详细更新遍历看章节5 节点访问器,访问者模式
3.4 在renderingTraversals()(裁剪遍历)
在renderingTraversals()中实现,剔除不可见结点,将可见结点置入render graph中。通过遍历render graph,向图形卡发送绘制命令;在线程中实现,可能没有执行完,主循环已进入下一轮。
4、回调函数
5、Node Visitor
基于访问者的设计模式,用来对相应的结点以各种方式进行遍历(遍历方式有只访问当前结点、遍历父结点、遍历子结点、遍历活动子结点等)。
最常见的最经典的NodeVisitor就是找到特定名字结点的那个Visitor了。
Visitor有很多种,如osgGA::EventVisitor、 osgUtil::UpdateVisitor和 osgUtil::CullVisitor,利用它们你可以控 制渲染过程中的相应遍历;在你所设置的相应回调函数中,也将可以利用它们进行遍历。