研究ogre會發(fā)現(xiàn),整個渲染流程是放到了scenemanager里面實現(xiàn),而不是放到具體的渲染物里面。這樣做的好處是:所有渲染物在場景中統(tǒng)一了渲染流程,而且比放到渲染物內(nèi)更靈活。舉個例子,假如渲染物要在某個特定環(huán)境(假如是某個rendertarget)下渲染,而且慢慢旋轉。這時沒有場景,沒有場景結點,但渲染物的渲染流程卻寫在了渲染物內(nèi)部,因此,所有的矩陣變換對渲染物都起不了作用。這時怎么辦呢?是要修改渲染物的渲染函數(shù),還是為這個rendertarget添加一些場景的屬性,能讓這個渲染物走正常的流程呢?所以問題就產(chǎn)生了,把渲染流程寫死在渲染物內(nèi)是不好的。
根據(jù)研究看到,ogre的整個渲染流程寫在scenemanager就避免了上述的問題的產(chǎn)生。所以在引擎設計時,盡量把所有的渲染物的渲染流程提取到外面進行,而不要寫死在里面。
渲染流程大概如下:
1、設置世界矩陣。
2、提取渲染物的材質(zhì),走多pass流程。
3、設置渲染物的紋理等。
4、設置渲染物在當前pass的渲染狀態(tài)。(包括光照,gpu program等)
5、提交頂點數(shù)據(jù)(SetStreamSource)。
6、渲染(Draw)。