天天看點

Ogre 渲染過程

最近工作在研究OGRE渲染引擎,也學到了很多東西,工作也算是忙碌充實,壓力與挑戰并存吧,今天斷斷續續看了一下OGRE裡面對Pass的應用,加上之前對RenderOperation的了解,算是OGRE中Render過程最主要的兩個部分,在此整理一下,以備以後的檢視。

了解Pass主要是為了今後能夠在渲染過程中将頂點和索引意外的資訊,全部通過Pass來進行管理,兒不用自我過多的考慮細節,目前已經參照RenderOperation進行了改造,則下一步就是對Pass的構造,相對來說,Pass主要是對材質,光照,霧,混合,紋理,GPU等狀态的一個管理清單, 一言以蔽之,RenderOperation存儲渲染對象的資料,兒Pass則存儲了渲染風格。

回到本文的正文,主要集中在SceneManager類中,由于我們自身的原因或問題,不能直接使用SceneManager類來進行管理,則場景部分需要自我管理,是以需要了解OGRE的渲染過程,而我們則在邏輯上進行學習和參考。渲染過程大緻如下:

1.    _renderScene

OGRE的渲染起點,每一幀都會調用改函數開啟渲染之旅

2.    _updateSceneGraph、_findVisibleObjects

場景管理,沒有深究,這個目前不是工作的重點,在以後需要的時候在深入研究,大緻上就是常見的場景管理的一套,将目前相機視角下的所有Node準備更新,形成最終需要渲染的RenderQueue,(Overlay有自己的find函數)

3.    _renderVisibleObjects

此時經過場景管理已經組織好渲染隊列(RenderQueue)開始渲染,采用觀察者模式, 每一個RenderablePass分解成Pass和RenderOperation,逐個周遊渲染,

a)    _setPass

設定Pass屬性給RenderSystem,該函數裡面的内容非常豐富,材質、紋理、GPU等都在此設定給渲染引擎,準備後續的渲染

b)     _ renderSingleObject

在經過一系列準備後,開始渲染

a、b之間的界限并不清晰,很多相關屬性在這兩者之間都有一些重疊,最後在renderSingleObject函數中實作了最終的render,完成一幀的渲染。

轉載于:https://www.cnblogs.com/nafio/p/9137639.html