分享
 
 
 

Quake源代碼分析(草稿).1

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Quake是Id Software公司推出一款風迷全球的FPS遊戲.至今為止已經發展到了第三代,而且作為一個優良的遊戲引擎,它也被大量的運用到其他公司開發的遊戲當中.例如我們所熟知的CS,它就是在Quake2引擎上改良而來的.雖然裡面的代碼實現並不完全相同,但是整體框架還是Quake2的,只要是稍微接觸過Quake引擎的人都很容易看得出來.(它是那麼的經典,以至於一直沿用到今天,個人認為它是遊戲領域大型結構化設計最好的一個典範.現在很多遊戲已經改用面向對象的程序設計方法來編寫,但Quake的影響卻是深遠的.包括前段時間洩露CS2源碼,它的架構仍然保留著些許Quake的風貌.)

很多人告述我Id Software 很早之前就已經公開了 Quake 全部源碼.這裡我要告述你們,其實Id公開的並不是所有的源代碼,而僅僅是邏輯層代碼,你想想看哪個公司會笨到將自己的核心技術傾囊倒出,這些可是他們吃飯的本錢啊!邏輯層的代碼只包括了UI,AI等實現.像圖像渲染,網絡傳輸部分卻沒有給出.你看到的唯有函數的聲明部分.因此要徹底研究Quake就必須獲得這部分的源代碼,可上哪去找呢?令人興奮的是,早前已經有牛人通過逆向工程的方法將Quake核心代碼整理出來,做了一個仿Quake引擎.我下面的分析就是根據他的代碼來寫的,雖然跟真實的Quake引擎比較也許會有些出入,但我相信那並不影響我們去理解Quake.

類如大多數Win32應用程序,Quake的Win32部分也是從WinMain函數進入的.邏輯層被分成了cggame,ui兩個主要的模塊.(這兩個模塊被編譯成dll程序,然後由引擎載入它們,為了讓邏輯層的代碼能過訪問核心層的函數,引擎部分會將一個叫SV_GameSystemCalls的函數傳給cggame和ui內部使用.註:SV_GameSystemCalls管理著所有可能被邏輯層應用到的核心函數)在Quake引擎中dll之間,以及dll與exe之間的交互都是通過vmMain和dllEntry這兩函數完成的.dll引出這兩函數函數的用意是用vmMain作為其他dll或exe程序訪問這個dll的接口,只要提供訪問函數的索引號以及函數的原形,那麼你就可以獲得那個函數的實現.而dllEntry則是調用者給它所調用的dll一個接口,被調用的dll就能夠使用這個接口呼叫調用者的內部函數了.邏輯層的dll就是使用dllEntry來接收SV_GameSystemCalls的.以下是dllEntry函數的實現:

static int (CDECL *syscall)( int arg, ... ) = (int (CDECL *)( int, ...))-1;

void dllEntry( int (CDECL *syscallptr)( int arg,... ) ) {

syscall = syscallptr;

}

我們常見的trap打頭的函數實際上是調用了引擎代碼的,具體如下:

void trap_Printf( const char *fmt ) {

syscall( G_PRINT, fmt );

}

了解了上述的調用規則後,我們就可以比較輕鬆地跟蹤調試Quake源碼啦.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有