(因為這個引擎是商業引擎,所以,我不會粘貼“原始碼”像這樣:class OoXx{ public ...};但是我會這樣:
So, technically, technically, I don't breaking any laws here. But IF you want fuck me, go ahead, I don't give a shit. )
(另:引用請註明出處 blog.csdn.net/xjyhust,以及聲明:全部資料來自互連網,如果對文章內容有意見,請e-mail我: xjyhust@gmail.com;否則管我鳥事,I just come to buy some sauce. )
gamebryo有很多的工程,大概是這樣組織的:
核心的庫:CoreLib,引擎的核心運行時,包括了這樣幾個項目:
看名字就知道這些模組的功能。其中NiDXRenderer其實就是NiMain中渲染類的實現。看裡面的宏定義就知道,gamebryo其實是設計成支援ps3的(至少是這樣),但是我沒有找到ps3的渲染器,也許是因為我用的這個版本是win32的sdk.
應用程式和協助工具功能庫:
這個工程就是對核心的一些輔助,包括:製作遊戲編輯器的時候需要的一些基礎組件、內建的可視化效能監控工具等等,好像還支援將log輸出到網頁上面,非常直觀。
還有一些工程,我這裡就打不開了,因為我沒有弄到完整的代碼,只有核心庫的代碼是全的。最為關鍵的Shader系統的代碼暫時沒有找到(也許只是工程沒有裝,代碼也許是有的)。編輯器的代碼應該也是沒有的。。。可惜了。。。
總體來看gamebryo的架構設計,也是一層一層的裹起來的(大型程式都應該是這樣的),因為是跨平台的引擎設計,感覺裡面簡單的使用宏定義的地方比較多,當然這樣比較有效率,但是後面維護修改起來可能就麻煩一些。跨平台比較方便的就是大範圍的替換,比如渲染器,xbox、ps3、wii上的渲染器結構差別都比較大,當然用繼承的方式實現功能的差異是最好的選擇。基礎的部分,因為差異不是很多,用宏定義就是比較好的選擇,而且效率肯定高。
但是有一點,ps3和xbox上面的記憶體那麼小,不知道這個跨平台引擎怎麼設計記憶體管理系統和資源管理系統的,這個和pc上面的差別比較大,用繼承來實現可能會簡單一些,比如:memsysPS3, memsysXB。。。我完全沒有非pc平台的開發經驗,但是感覺這些平台上面的記憶體管理原則就是和pc有很大的不同。id tech 5的主要技術亮點也是這個地方:他們的引擎可以同時跑三個平台,而美工不用做任何修改(zero-delta), 這點太了不起了。Unreal 好像都不能做到這點,有些關卡還需要修改才行(比如貼圖大小啦,指令碼大小了。。。)。
剛剛弄到的原始碼,準備好好看看,畢竟我手頭的商業代碼裡面,這個算是最正規的。(有誰還知道除了電驢和google搜種子以外,還有哪些方法可以找到這些資源的。。。;) )