加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Quake3源代码分析(1)(转)

(2007-02-06 16:45:11)
分类: 编程
Quake3,伴我度过了快乐的大学时光(呵呵,当然,还有星际)。而Quake的缔造者,John Carmack也是我的偶像(与李小龙并列,呵呵)。

秋去冬来,日月如梭,如今Quake3的全部源代码已经公布。作为如我般喜欢Quake的玩家,自然欣喜万分。虽然Id Software公布Quake3的源代码就已经表明其所使用的技术已经过时,然而,在处处实施技术保密的今天,能够得到如此一份引领了5年左右的3d技术发展方向的源代码,其意义自不言而喻。更何况,在我看来,Quake3所代表的技术并未过时,至少,其为方便Mod制作而设计的框架、高效的算法等,都有很值得我们借鉴。

说起来,我还算不上游戏产业中的一员(要算,也仅仅是一个普通消费者而已)。但是,作为小小的普通人,目睹国内一些游戏公司“一切向钱看”的作风,以圈钱为目的,不断的以粗制滥造的游戏来“骗取”广大消费者兜里的银子,同时又把大把的钞票扔给国外的引擎制造商,心痛之余,则希望我们能够有自己的核心技术,有自己的一流引擎。其实,我坚信,只要我们能够潜下心来做研究,少谈一点名与利,完全可以把任何事情做好。当年的“两弹一星”就是一个很好的例子。

我写此文章的目的,仅仅希望能够对大家有所帮助。如果有人能从中获取哪怕是一点点的“营养”,吾愿已矣。

言归正传。先介绍一下Quake3的组成。正如大家所看见的,我们的安装目录下面有一个Quake3.exe,然后有一个叫做“BaseQ3”的文件夹,其中有一些.PK3文件。我们运行游戏时,Quake3.exe被系统加载,然后Quake3.exe使用BaseQ3中的.PK3文件,为我们展现一个精彩的世界。正如大家所了解的,.PK3其实是一个压缩包,可以通过修改扩展名为“.zip”,用WinRar、WinZip之类的解压缩软件解压缩。.PK3文件中存放了Quake3所需要的配置信息、地图、模型、声音、贴图、demo、图标、光标等资源文件。

Quake3的主程序,也就是我们安装目录下面躺着的Quake3.exe,是Quake3的入口(呵呵,好像有点废话)。就是这个可执行程序,我们可以将它称为“引擎”。它负责了几乎所有的与游戏内容无关的任务,比如渲染、网络通讯、用户IO、物理和碰撞检测等。

在Pak0.pk3中一个比较有意思的东东就是vm目录下面三个文件:cgame.qvm、qagame.qvm和ui.qvm。这几个文件的扩展名为.qvm,就是所说的“Quake Virtual Machine”,即Quake虚拟机(文件)。它们负责了游戏的所有“实质性”的东西,比如武器系统、伤害计算等等。它们由Quake3.exe进一步编译后执行。

好了,大家现在已经知道,Quake3由以下部分组成:Quake3.exe(引擎)、.qvm文件(游戏逻辑)、游戏资源。有的朋友可能会问,为什么不把引擎和游戏逻辑放到一起,还能够节约Quake3.exe对于.qvm文件的编译过程。对于这个问题,我的答案:还不是为了方便我们广大玩家!有了这样一个结构,我们就可以很方便的修改或者制作自己的Mod。大家所熟悉的CS,就是在HalfLife的基础上修改而来的,而HalfLife,采用的正是Quake2的引擎。由此可见,这种框架所带来的方便性。事实上,如果大家乐意,完全可以基于Quake3制作出一个CS的,修改游戏逻辑、替换游戏资源就是了,至于渲染等比较“苦闷”的活儿,交给Quake3.exe好了

作用

路径

作用

目标文件

引擎相关

\botlib

有关bot的信息

(lib)

\bspc

bsp计算程序

(exe)

\client

客户端相关

()

\renderer

渲染器

(lib)

\server

服务器相关

()

\splines

样条曲线

(lib)

游戏相关

\cgame

客户端游戏逻辑

(qvm)

\game

服务器端游戏逻辑

(qvm)

\q3_ui

界面(Quake3)

(qvm)

\ui

界面(Team Arana)

(qvm)

平台相关

\null

平台无关代码

 

\macosx

MAC系统相关

 

\unix

UNIX系统相关

 

\win32

Windows系统相关

 

外部库

\jpeg-6

jpeg编码/解码

 

通用

\qcommon

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有