OGRE 渲染流程

一丶 准备渲染列表

Root::OnFrameMove() 里面去调用_updateAllRenderTargets()

每一个 active renderTarget 会调用 itarg->second->update(swapBuffers);

不同的update()会调用到 updateImpl()

updateImpl() 里面会调用 ViewPort的update() 里面会mCamera->_renderScene(this, mShowOverlays);

ViewPort会_renderScene() 里面其实是SceneManager->_renderScene()

_renderScene() 会调用prepareRenderQueue() 去SceneManager准备取数据

接下来回到_renderScene(), 在_findVisibleObjects() 里面会根据 1. SceneManager的类型 2. 相机来查找可视物体

比如我选择的是OtcTreeManager 那么OctreeSceneManager::_findVisibleObjects 会被调用

然后是根据 每个overlay 来做渲染列表

_queueOverlaysForRendering

和天空盒的渲染列表

_queueSkiesForRendering

之后便是我们熟悉的

beingScene和 endScene 了 中间 _renderVisibleObjects便是渲染列表里面所有可见物体

二丶渲染

_renderVisibleObjects 里面会根据渲染列表的排序

    enum RenderQueueGroupID
    {
        /// Use this queue for objects which must be rendered first e.g. backgrounds
        RENDER_QUEUE_BACKGROUND = 0,
        /// First queue (after backgrounds), used for skyboxes if rendered first
        RENDER_QUEUE_SKIES_EARLY = 5,
        RENDER_QUEUE_SKIES_LATE = 95,
        RENDER_QUEUE_OVERLAY = 100, 
     };

调用每个RenderQueue的_renderQueueGroupObjects()

比如 SceneManager::renderBasicQueueGroupObjects 这个是最基础的渲染(没有阴影也没有pass)

里面会对每个RenderPriorityGroup进行下列操作

1。 Sort

2。 渲染每个RenderPriorityGroup的每个QueuedRenderableCollections

然后走啊走啊走啊走.. 终于走到了renderSingleObject() 在这里面进行灯光 材质 pass等等的设置 (未完成)

终于开始render 了mDestRenderSystem->_render(ro);

到这里Ogre的渲染流程基本上就走完了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值