我和朋友一塊在做游戲編輯器練手,鑒于大家以前都沒有經(jīng)驗(yàn),就會(huì)寫寫圖形。就照著開源的Ogitor學(xué)習(xí)罷。我首先負(fù)責(zé)的就是草體部分,考慮到哥是最弱的。。。所以寫到現(xiàn)在才完工。。。講下學(xué)習(xí)心得吧,只寫下思路,具體的過程懶得寫。(高手勿看了。。)
Ogitor的代碼寫的非常易讀,要是你能編譯次ogitor的話,跟著程序走一邊就能很快清楚其結(jié)構(gòu)。所以嘛,先提下編譯,ogitor的編譯其實(shí)還是有些麻煩的,尤其是對(duì)像我這種命令行菜鳥來說,ogitor的wiki上有詳細(xì)的教程,[url]http://wiki.ogitor.org/Building+Ogitor&structure=Development[/url]基本很完善了,不過我還是遇到許多麻煩,強(qiáng)烈建議裝vs2008,因?yàn)镼t有專門適用08的源碼包,而且記著一定按著Jacmoe寫的步驟來,別先過cmake那塊,先把QtPropertyBrowser弄好,設(shè)置環(huán)境變量的時(shí)候我出了個(gè)小白錯(cuò)誤,在PATH變量后面加Qt目錄前加了個(gè)空格,導(dǎo)致系統(tǒng)不接受后面的路徑。(。。。悲劇的很。。)然后的步驟就沒啥問題了。如果你在編譯的時(shí)候出現(xiàn)(vs08命令行下或者Qt Creator下,后者不建議,得改qt的編譯器,我反正沒找到在哪里改。。。)
[code]
Ogitor的草體也是借由PageGemotry庫(下面縮寫為PG)實(shí)現(xiàn)的,Ogre的 Addons fourm里有詳細(xì)介紹,這個(gè)庫相當(dāng)強(qiáng)大,而且使用輕便,簡(jiǎn)單的刷草體我們利用里面的GrassLoader即可,就是公告板。這塊代碼他們沒有寫在ogPageGeometry里,那塊別看了,否則你們會(huì)向我一樣給帶跑的。Ismail(Ogitor的主要開發(fā)人員)將這塊寫在TerrainGroupManager里,直接和地形刷交互,仔細(xì)想想,這也是最好的方法。(我走工廠方法的歪路想了4,5天才拐回來。。之前沒發(fā)現(xiàn)他寫在TerrainGroupManager里了。。。)由于PG實(shí)現(xiàn)草體的加載只有兩種,要么隨機(jī),要么通過加載密度紋理。不像treeLoader一樣,可以直接AddEntity。(想想為什么)所以要想實(shí)現(xiàn)草體刷,咱就得創(chuàng)建一張動(dòng)態(tài)紋理來實(shí)現(xiàn)了。我們修改每個(gè)TerrainPageObject(頁地形),向其加入GrassLayer。而在TerrainGroupManager里保留具體的更新者PagedGeometry和GrassLoader。這里不做具體解釋,建議去看看PG的源碼,10個(gè)文件左右,(一半Header,一半Source)代碼也很易懂。還有,Ogitor的工廠對(duì)象注冊(cè)機(jī)制很好,(我對(duì)設(shè)計(jì)模式?jīng)]什么研究不知道叫啥。。)新手這個(gè)一定得細(xì)看看,Ogitor在解耦上做的也近乎完美,面向?qū)ο蟮慕缑婢幊蘍t加上Ismail自己寫的很多基類,使得程序分離的很好,推薦看看OgitorsProperty類,里面就是照著Qt的信號(hào)機(jī)制寫的,這塊我也沒深看。我們用的是MFC,所以這塊沒有寫成純面向?qū)ο蟮?,用的還是離散型的單件。我兄弟說Ogitor那樣效率差點(diǎn),不過我覺得挺酷的,畢竟寫的漂亮。Ogitor的工廠對(duì)象的初始化部分是寫在CreateProperties里的,因?yàn)樵S多變量需要有用戶修改,所以構(gòu)造函數(shù)沒有初始化所有變量。
最后帶句:Ogitor的大哥們相當(dāng)熱情,有問題多去他們的forum里提,基本第二天就回了。(有時(shí)差)
Ogitor的代碼寫的非常易讀,要是你能編譯次ogitor的話,跟著程序走一邊就能很快清楚其結(jié)構(gòu)。所以嘛,先提下編譯,ogitor的編譯其實(shí)還是有些麻煩的,尤其是對(duì)像我這種命令行菜鳥來說,ogitor的wiki上有詳細(xì)的教程,[url]http://wiki.ogitor.org/Building+Ogitor&structure=Development[/url]基本很完善了,不過我還是遇到許多麻煩,強(qiáng)烈建議裝vs2008,因?yàn)镼t有專門適用08的源碼包,而且記著一定按著Jacmoe寫的步驟來,別先過cmake那塊,先把QtPropertyBrowser弄好,設(shè)置環(huán)境變量的時(shí)候我出了個(gè)小白錯(cuò)誤,在PATH變量后面加Qt目錄前加了個(gè)空格,導(dǎo)致系統(tǒng)不接受后面的路徑。(。。。悲劇的很。。)然后的步驟就沒啥問題了。如果你在編譯的時(shí)候出現(xiàn)(vs08命令行下或者Qt Creator下,后者不建議,得改qt的編譯器,我反正沒找到在哪里改。。。)
[code]
g++:
Documents\Programmer\Ogre\unstable-06e26a1bed18\qtOgitor\qtpropertybrowser-2.5\lib\libQtSolutions_PropertyBrowser-2.5d.a:
No such file or directory
mingw32-make[1]: *** [..\lib\QtSolutions_PropertyBrowser-2.5d.dll] Error 1
mingw32-make: *** [debug-all] Error 2
Exited with code 2.
Error while building project buildlib
When executing build step 'Make'
[/code]記著肯定是你裝了mingw,編譯得用vs的編譯器。Ogitor的草體也是借由PageGemotry庫(下面縮寫為PG)實(shí)現(xiàn)的,Ogre的 Addons fourm里有詳細(xì)介紹,這個(gè)庫相當(dāng)強(qiáng)大,而且使用輕便,簡(jiǎn)單的刷草體我們利用里面的GrassLoader即可,就是公告板。這塊代碼他們沒有寫在ogPageGeometry里,那塊別看了,否則你們會(huì)向我一樣給帶跑的。Ismail(Ogitor的主要開發(fā)人員)將這塊寫在TerrainGroupManager里,直接和地形刷交互,仔細(xì)想想,這也是最好的方法。(我走工廠方法的歪路想了4,5天才拐回來。。之前沒發(fā)現(xiàn)他寫在TerrainGroupManager里了。。。)由于PG實(shí)現(xiàn)草體的加載只有兩種,要么隨機(jī),要么通過加載密度紋理。不像treeLoader一樣,可以直接AddEntity。(想想為什么)所以要想實(shí)現(xiàn)草體刷,咱就得創(chuàng)建一張動(dòng)態(tài)紋理來實(shí)現(xiàn)了。我們修改每個(gè)TerrainPageObject(頁地形),向其加入GrassLayer。而在TerrainGroupManager里保留具體的更新者PagedGeometry和GrassLoader。這里不做具體解釋,建議去看看PG的源碼,10個(gè)文件左右,(一半Header,一半Source)代碼也很易懂。還有,Ogitor的工廠對(duì)象注冊(cè)機(jī)制很好,(我對(duì)設(shè)計(jì)模式?jīng)]什么研究不知道叫啥。。)新手這個(gè)一定得細(xì)看看,Ogitor在解耦上做的也近乎完美,面向?qū)ο蟮慕缑婢幊蘍t加上Ismail自己寫的很多基類,使得程序分離的很好,推薦看看OgitorsProperty類,里面就是照著Qt的信號(hào)機(jī)制寫的,這塊我也沒深看。我們用的是MFC,所以這塊沒有寫成純面向?qū)ο蟮?,用的還是離散型的單件。我兄弟說Ogitor那樣效率差點(diǎn),不過我覺得挺酷的,畢竟寫的漂亮。Ogitor的工廠對(duì)象的初始化部分是寫在CreateProperties里的,因?yàn)樵S多變量需要有用戶修改,所以構(gòu)造函數(shù)沒有初始化所有變量。
最后帶句:Ogitor的大哥們相當(dāng)熱情,有問題多去他們的forum里提,基本第二天就回了。(有時(shí)差)