寫乙個自己的遊戲引擎

2021-06-08 11:28:41 字數 1583 閱讀 2351

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

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

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

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

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

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

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

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

還有很多關鍵的技術.指令碼技術,可以看一下<>,看完這本書基本上可以自己設計乙個指令碼解析器了(我還沒看完,呵呵);地形,<< focus on 3d terrain >>,也有開源的地形引擎,比如gaia,這方面的資料特別多;模型和動畫,<>和<>是入門最好的書了,但是這兩本書都只能幫你入門,書中的技術用在現在的遊戲還算可以,以後的引擎肯定不會還用這些技術,最好了解一下現在前沿的技術(在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!

乙個自己寫的PHP模板引擎

這是乙個自己寫的編譯型的模板引擎 不包括快取部分 貼上 有問題可以隨時跟帖。單檔案版 jtemplate.class.php templatedir templatedir this templatecompiledir templatecompliedir 顯示模板方法 param string ...

基於Dx11寫乙個自己的遊戲引擎 5

d2d初始化時,需要 id2d1factory 型別的物件,也就是d2d工廠介面,這個介面是所有d2d程式的起始點,幾乎所有的d2d資源都是由這個介面建立 render target,在d2d中有多種型別的render target,這裡我們選擇id2d1hwndrendertarget型別,用來在...

自己寫乙個LIST

pragma once forward declarations templateclass clistnode templateclass clist template class clistnode void insertafter t data template void clistnode ...