quake3源码分析(1)
quake3(雷神之锤3) 是一个血腥暴力,疯狂发泄射击游戏!
雷神之锤3,是一个血腥暴力,疯狂刺激的游戏!打中敌人后血会乱溅,一片血雾。此乃是我本人的暴力血腥 发泄游戏,
只是刚极易折,强极易辱,刚不可久,柔不可守,这游戏对抗性太强,打的现在烦了,现在玩的少了。
在id公司的另一个游戏doom3游戏中,可以把僵尸的头一枪打下来!id的游戏我认为13岁以下的小朋友不适合玩,但是绝对适合暴力发泄! quake3和doom
3游戏乃是我玩的最多的游戏,我不喜欢那些清纯的要死的游戏,这种暴力,血型游戏但是非常的喜欢了
游戏公司id软件是一个我非常佩服的公司。具体经历可以参见《doom启示录》,强烈建议阅读 ;
下面先发一些值得记忆的图片
doom3的
曾经的id 公司软件成员,左面前方两人为卡马克和约翰罗梅洛
底下的英语翻译是 我们下面什么都没有穿!
卡马克!
quake3源码的一个下载地址
quake3包含了渲染部分,人工智能,网络部分等
quake3 游戏demo演示版,没有玩过quake3游戏的或想了解quake3画面的 , 可到此处下载,
这两个任意都可直接下载,点击直接下载,50M,下载极快。
这个引擎源码乃是10几年前的技术了,在我看来,很多地方根本毫无用处,前向光照,不支持延迟渲染,光源有限
,甚至没有光照,引擎很多都是人物底下一个图片而已,跟今天的次时代游戏不可以同日而语了,但是贵在简单,适合初学者阅读,
一些代码的思想,仍然有用,quake3的现代版本quakelive仍然运行在网页的浏览器中,quake3引擎的改进版,xreal,ioquake3,很多改进版本很多。
doom3代码超级复杂了,我后来又自己下载了很多的游戏引擎源码,但是都没有耐心坚持下来,深信一点,百样精不如一样通,
由于这个代码少,也就这个源码还看的多一点 。
cryengine3,unreal3,4,orge,cocos2d, klayGE,Torque的源代码都下载了一批,但是cryengine,unreal代码众多,根本上不适合
初学者阅读,而且代码的难度太大,即使是doom3的代码,也难度不小。在我看完quake3有了一定的寄出以后,再去看,ce,虚幻4的代码
还是感觉难度很大,不适合初学者阅读,很难有一个游戏引擎的框架在心中.而quake3代码,在我看来,还是能够阅读完的,对于fps游戏有
一个清晰的了解。
即使使用unity3d,没有源代码级别的领悟,对于3d引擎远离没有了解,做出来的东西就有瓶颈。我深信对于3d引擎代码有着了解会更有助于自己做游戏;
个人感觉从头到尾做一个3d引擎代码绝不简单,对于引擎分析这么庞大的领域我看见到书籍实在太少,自己摸索过来,也有不少的
而且doom,quake1,2,doom3,doombfg代码全部的开源,基本上每一代的引擎全部的继承了前一代的大部分的源代码,代码具有 连贯性
再者由于quake3的武器,游戏性设计的极好,我相信即使一万年以后,照样有人会玩,我相信一个好的代码分析,有助于他们来阅读源代码,
改进源代码;
quake3的关卡编辑器,跟使命召唤,iw的关卡编辑器操作,界面是相同,使命召唤的关卡 编辑器,使用外部的编译器,来进行编译,
有一部分代码一定是继承了quake3的代码,将来如果要是开源的话,也可以看一看了。
value 的cs给予quake1,这个hd半条命的代码我看过,跟quake3照样有相同之处,将来如果这个Source代码开源 ,也可以看懂一部分。
Epic跟id乃是同一个时代的产品,具有brush的csg ,bsp场景管理,光照 贴图生成,在我阅读过程中,如果不是看过quake3的代码,我根本上不知道
这个代码的结构如何。
从网络上面,中文的关于quake3,bsp的文章也不少,关于这个代码如何编译的,读者可以自己搜索。
quake3的关卡编辑器更是简单,跟udk,ce3的沙盒有天大的区别了,c语言写的,不是c++的结构,比orge要简单的多了,
只有一样好处,简单!
使命召唤4,5的关卡编辑器跟quake3,的关卡编辑器,这个基本上没有太大的区别
主要代码文件如下(我自己大致的分法)
工具部分的代码
lcc文件包是用来编译quake 代码里面的game,cgame,ui的代码,卡马克对开源的lcc进行了改写,
再使用qasm来进行编译成为了qvm文件,在游戏时候调用
qasm 文件夹将game.cgame.ui等等文件夹里的东西汇编为机器码,形成一个虚拟机,执行速度快,也可跨平台。
、
radiant编辑地图,生成这个地图map文件
q3map场景处理部分,那是将.map文件经历bsp树分割,生成入口pvs,光照贴图生成等等处理
引擎代码
code内是雷神之锤3引擎主要的代码,
分为客户端和服务器端了
客户端
botlib是用于机器人部分,用于单人模式的一部分,其中包括加载BSP文件,加载机器人模型,脚本,机器人AI部分的生成等。
AAS文件包,其实是关卡编辑器编辑路径用的。
q3ui是quake3的用户界面部分。
cgame 部分是用于客户端程序的逻辑部分,
调用client的函数代码
client主要键盘,有鼠标驱动的实现方式,以及键盘键值的绑定,输入输出 ,套接字以及控制台代码的使用等等
Render渲染器主要是 将视频,2dui,字体,3d模型,地图进行显示了
sound加载wav部分代码,解码进行播放
服务器端
sever 网络部分,一个游戏运行时1 单人时运行时仿照多人部分的服务器端 2,LAN或者Internet部分这个服务器部分实现
game 是用于服务器端的逻辑部分,分两部分,1单人时运行时的人工智能部分,模拟网络连线对战。2网络连线时,运行网络部分代码。