程序的天空

我的学习心得

导航

Quake2源码分析(1)

Posted on 2008-08-13 01:34  帕托  阅读(2635)  评论(3)    收藏  举报

简介:

      Quake2游戏是著名的Id Software公司的第一人称视角游戏,在网上的源代码是开放的(也有Quake3),这些代码使用的某些技术也许已经过时(如那时的GPU编程技术还不完备),但出自著名的FPS游戏之父John Carmark的Quake游戏源代码使我们今天在研究游戏框架,游戏引擎设计,C/S通信等方面都有着难得的借鉴和学习价值,更重要的是,这是一款商业程序的开源,在此我们也能领悟到John Carmark的高超的编程技术.以下就是我学习Quake2源码的一些心得.闲话说到这,Let's Begin!

 

研究目标:

     Quake2工程分为6个部分:ctf(组队作战),game(游戏逻辑部分),quake2(游戏引擎部分),Radar(雷达系统),ref_gl(OpenGL图形支持),ref_soft(软件图形支持).我们首先需要着重分析的是游戏引擎部分,也就是quake2工程.

 

打开quake2工程,我们先看它的头文件:


      cdaudio: CD音频支持
      client: 定义了客户端状态和桢数等一些重要的数据结构,全局变量还有客户端一些重要的实现引擎功能的函数,我们在后面会详细分析client.
      conproc: 实现一个类似控制台的功能
      console: 实现控制台的输入
      game: 定义了game模块的输入和输出函数,也就是定义了quake2引擎和上层的游戏逻辑部分如何交互
      init: 实现一个简单的dll加载回调函数
      input: 输入子系统,和引擎交互(鼠标,键盘和游戏杆)
      keys: 键盘支持
      q_shared: 共享的数学库,数据结构定义和枚举变量
      qcommon: 相当于引擎中的一个通用库,它实现了引擎其他部分需要的一些通用功能,我们将在后面详细分析.
      qfiles: 游戏中的文件格式的定义和解析.
      qmenu: 菜单界面支持
      ref: 定义了引擎和图形模块(ref_gl和ref_soft)部分的交互,输入和输出函数
      screen: 屏幕操作的一些支持
      server: 游戏引擎的服务器端,这也是很重要的部分,我们后面会详细分析.
      snd_loc: 定义了本地的底层音频处理函数
      sound: 声音系统的支持
      vid: 视频系统的一些函数
      winquake: 和windows系统相关的一些函数

 

     quake2的注释很少,这也给分析源代码带来了很大的难度,不过抽象出游戏引擎的主要逻辑,分析出游戏引擎的主要架构和一些重要功能的算法还是有可能的.为了不深没在代码中,我会试图清晰的把游戏引擎的各个部分的相互关系的主要功能说明开来.