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