天天看點

寫一個自己的引擎

以下是我的一點看法,另外推薦一些學習的資料

[ps:小弟才搞3d一年的時間,還是cn,高手不要笑話,還請大家多多指點 ;) ]

       首先是語言方面,這個問題沒有太多的選擇的餘地,基本上隻有用C++(現在還在堅持用純C來寫引擎的估計隻有卡馬克同學了),語言的功底是特别重要的了;大規模項目的編寫能力也是很重要的,推薦看<<大規模C++程式設計>>

       軟體工程方面,你可能要了解一些單元測試,系統級設計的方法;但是流行的軟體方法,比如靈活,我覺得,如果是你一個人得工程,用處可能不大,但是了解一點總沒有壞處.最重要的地方就是設計和測試了.

       圖形方面,你需要了解至少一種圖形api(比如openGL或者DirectX),建議開始還是不要寫多個api的渲染器,現完成一個,以後有時間再寫另外的版本.在設計的時候多花一點時間,設計良好的純虛類,這樣可以很友善的被不同的圖形api渲染器繼承,當然,開始你要作的隻是實作其中一個派生類.

       如果以前都沒有接觸過3D圖形方面的程式設計,建議你還是花較多的時間學習一種API,記住,隻是一種!不管是openGL還是DirectX,寫好了一種再學另一種都是很簡單的.但是就遊戲引擎的要求來看,這方面要有比較高的水準了,因為渲染器部分是遊戲引擎品質的直接展現.

       實體方面,基本上你可以放棄了,這不是程式員能夠搞得定的事.你可能還可以抄一下别人的算法,但是這對實體和數值計算方面的理論知識要求也比較高,是以還是建議,用别人的實體庫比較好.個人覺得Novodex比較強,有免費的個人版;其他開源的引擎比如ode等等也是比較好的選擇.實體方面的虛拟技術馬上會有爆炸式的發展,可互動性,是其中比較熱的技術,因為這可以讓玩家的感覺更真實.

       網絡方面,這個我一點都不了解,是以不多說了.但是強調一下,現在的遊戲引擎如果沒有網絡功能,就是失敗的遊戲引擎.而且網絡和實體一樣,在引擎編寫的初期就要設計好,現在最後再整合是特别難的事情了.

       還有很多關鍵的技術.腳本技術,可以看一下<<game scripting mastery>>,看完這本書基本上可以自己設計一個腳本解析器了(我還沒看完,呵呵);地形,<< focus on 3d terrain >>,也有開源的地形引擎,比如gaia,這方面的資料特别多;模型和動畫,<<focus on 3d models>>和<<advanced animation with directx>>是入門最好的書了,但是這兩本書都隻能幫你入門,書中的技術用在現在的遊戲還算可以,以後的引擎肯定不會還用這些技術,最好了解一下現在前沿的技術(在unreal 2, 3,  doom3,quake4中我們已經看到了這方面最新的研究成果的應用);還有,最好可以了解HLSL或者Cg,這樣你就可以看得懂别人寫出來得shaders,自己也可以嘗試寫一些特效了,sm 4的新标準可能成為引擎的又一挑戰,是以shaders的進階語言會越來越重要.

       如果隻想寫一般的小引擎,上面說的東西,你完成一半已經很不錯了,但是如果要寫出商業品質的引擎,這些還是遠遠不夠的.你需要了解到,現在的技術每天都在發展,很多都可以應用到你的引擎中,但是這些技術都來自于論文,比如Siggraph報告會,GDC開發大會和IEEE的期刊.馬上是vista和64位的時代,sm4.0和direct10引入了光線跟蹤的高效實作,圖形晶片飛速發展的神話還在繼續,實體晶片的引入也令人側目......所有這些都是可以讓你的引擎脫穎而出的特性.

太難了,不是?因為遊戲引擎幾乎不可能一個人寫得出來的.除非你是卡馬克那樣的天才.

不過不要太難過,堅持不懈的努力,每個人都可以超越卡馬克的.

Don't think you are.Know you are!

繼續閱讀