调试最长的一帧(第16天)

本文介绍了OSG(OpenSceneGraph)的场景渲染过程,包括用户APP阶段、筛选cull阶段和绘制DRAW阶段的具体职责。文章还探讨了多线程渲染机制下的效率提升策略,以及针对OSG四种线程模型的渲染机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

终于到达绘制了,先看总体流程阶段

然而,从并行堆栈上看,已经有渲染线程开启了

 

跟着电子书走,先是介绍,抄一抄,加深印象。

osg的场景渲染过程可以简单地分为三个阶段:用户APP阶段,更新用户数据、负责场景对象的运动和管理等;筛选cull阶段,负责对场景中的对象进行筛选裁剪,略过那些不会被用户所见(因而不必渲染)的物体,并根据渲染状态的相似性对即将进入渲染管线的对象排序(从而避免OpenGL状态量的频繁切换);绘制(DRAW)阶段,执行各种OpenGL操作,将数据送入OpenGL渲染管线及显示系统处理。

如果有多个图形设备(渲染窗口)时,需要分别为每个窗口的每个摄像机执行相应的筛选和绘制工作,因为各个摄像机的投影矩阵和观察矩阵均可能不同;不过用户APP阶段不需要被执行多次,因为用户数据应当是被各个图形设备所共享的。

对于单线程运行的系统来说,用户/筛选/绘制这三个阶段在每一帧中都应当是顺序执行的;而对于多线程运行,以至多CPU的系统来说,则可以将前后两帧的工作稍微有所交叠。用户更新和场景筛选,以及场景筛选和绘制的工作互相不能重叠;但是我们可以允许在上一帧的绘制没有结束之前,就开始下一帧的用户数据更新工作;我们还可以允许由不同的cpu执行不同图形设备的筛选和绘制工作,从而提高整体渲染的效率,实现实时渲染的目的。

接下来要针对OSG的四种线程模型,讲解osg的渲染机制。

 

启动渲染线程

几个多线程渲染的变量

 

而现在,开始单线程

开始跟踪

筛选和绘制是重点,由于电子书后面有,所以不展开。

在renderingTraversals()中,多线程渲染也是同函数,只是设置相应的_startRenderingBarrier,_endRenderingDispatchBarrier,_endDynamicDrawBlock阻塞

先到这里吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值