osg动态加载模型不显示_探索未知种族之osg类生物---呼吸函数frame总结(单线程模式)...

353d91ca54be51bbffbf5f7fa391d260.png

好。到这里我们就算是完成了对osg::frame的整体介绍(针对单线程的),下面我们就来整体的总结一下fame函数的整个流程。

2cda4ea7572e9356c9a987f95b4df438.png

OSG 渲染后台与用户层的接口是摄像机类(Camera)。场景中至少有一个主摄像机,它关联了一个图形设备(GraphicsContext,通常是窗口),以及一个渲染器(Renderer);我们可以在场景树中(或者别的视图 View 中,对于复合视景器而言)添加更多的摄像机,它们可以关联相同的或者其它的图形设备,但都会配有单独的渲染器,用以保存该摄像机的筛选设置、显示器设置等信息。

场景筛选和绘制的工作由渲染器来完成,而图形设备 GraphicsContext 则负责根据不同时机的选择,调用渲染器的相关函数。例如在单线程模式中,ViewerBase::renderingTraversals函数依次执行 Renderer::cull 和 Renderer::draw 函数(后者通过 GraphicsContext::runOperations调用),而在多线程模型中调用者的关系将更加错综复杂。

OSG 渲染后台的调度中心是场景视图(SceneView),它负责保存和执行筛选访问器(CullVisitor)。CullVisitor 负责遍历并裁减场景,同时在遍历过程中构建对于场景绘制至关重要的渲染树和状态树;生成的状态树以 StateGraph 为根节点和各级子节点(其中保存场景树的渲染状态 StateSet 数据),以 RenderLeaf 为末端叶节点的内容(其中保存场景树中的几何体 Drawable 对象);渲染树则以 RenderStage 为根节点,RenderBin 为各级子节点,根据渲染顺序和方法的设定,状态树中的节点和渲染叶(RenderLeaf)被记录到 RenderStage 和各级 RenderBin 中;SceneView 负责保存和维护状态树和渲染树。

绘制场景时,渲染树中的各级节点将取出保存的渲染叶数据,传递给 OSG 状态机(State)。后者是 OpenGL 状态机制的封装和实现,也是场景绘制的核心元件。状态机取得渲染叶中的几何数据之后,再向根部遍历状态树,取得该几何体绘制相关的所有渲染状态设置,并亲自或者交由 StateAttribute 派生类完成渲染状态的实际设定,以及场景元素的实际绘制工作。此时用到的就已经是我们耳熟能详的各种 OpenGL 函数了。

最后部分我们来探究一下osg的多线程渲染模式。

原文链接 http://www.3wwang.cn/html/article_70.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值