quake3源码大致结构

 quake3的源码的大致结构

   (2017年 3月1日,我再次看了我以前写的这个博客,感觉错误之处极多,过去没有能够领悟的东西,现在领悟了很多,

从quake3引擎中,我学到了不少的东西,先做出一番改进改动)

     common文件包

     通用文件,基本上各个部分都需要调用的,

      Vector的定义,点积叉积,法线归一化,基本的数学函数

      matrix矩阵的定义,全局矩阵转化为了局部矩阵 ,

       平面的定义, 等等

      quake3中各种文件的定义,例如,模型md3文件,md4模型的定义, bsp文件的定义,3ds文件的定义,

       对于线程操作的函数,例如线程挂起,sleep函数等

       polygon多边形的分解,与组合,在关卡编辑以及引擎中可以使用的,

      shader文件的定义等等  ,以及lcc脚本使用的c语言的函数等等了

      mesh的定义,对于模型,md3模型或者md4模型的作用

   

 1   Radiant文件夹主要包括

   比如对于xz,yz,xy等对话框的windows对话框的程序,mfc的对话框,xy,xz,yz等等对话框

   继承了这个的,纹理图片的对话框,以及还有控制台的对话框  

    quake3的这个关卡编辑,相对还是比较的简单的,并不同于ce3引擎中具有首先的terrian编辑,

       和 udk中的还是有着相似之处,但在虚幻3中引擎,代码中完全的

   

      在关卡编辑器外面,乃是baseq3文件包,来进行加载shader文件的模型,

         shader表示的纹理,以及entity定义的模型,来用在了关卡之中了

      

   在doom3中,由于关卡编辑器和exe文件在一块,公用的这个游戏资源,来进行编辑加载

    加入了一些新的东西,

   例如       material材质脚本,以及这些资源完全和游戏资源在一块了

          关卡地图 map  主要由brush(一般六个面的立方体),patch 和模型构成的,通过操作brush来建立房间。

         与很多的mmorpg关卡编辑器不同,这个没有地形的生成,在gtkradient中有,有这个glsurf插件,来生成地形的,

         其他物体例如怪物,灯,门,传送门,跳台model等等都是由3d max等等软件,

   shader文件包含了对于这些模型将要关联的图像名字,以及一些脚本文件等等

  

    模型可以先用3d max之类做好,再转化为md3模型, 加载到了关卡中,

可以在entity对话框中进行属性的设置,例如角度,还有这个名字等等的处理等等

         先做成,最后在加到了编辑器中了

       在Quake3 地图编辑器中,使用地图编辑器的功能来实现编辑房间,设置物体摆放的位置,

       触发器位置,重生点位置,路径点,最后保存格式为map文件,建议下载一个雷神地图编辑器看一下。

   

    quake3的地图编辑源码

    radiant

       主要包含了mfc的这个对话框的继承,例如照相机的对话框,xy,yz,z,控制台对话框等等

      command控制台,用来编辑器的各项操作,比如文件有没有加载成功,bsp的结果怎么样子,有没有什么错误等等了

      对于错误的检验最为重要,有没有加载文件,生成bsp文件中的错误等等

   

      quake3主要使用的特有的brush来进行生成,组合,hollow,csgadd,csgsub等等跟ue,半条命等等很是类似,

      patch的生成,组合,可以用来做曲面的等等

      model,m3模型,加载模型 ,设置角度,位置,放在关卡中了即可

      light,作为entity的一种,在编辑器中表示光源,半径一般300,可以调节

      surface继承的mfc的对话框,主要有面的类型,wave水面,岩浆,梯子,等等,以及fit等等对于纹理进行uv的调整,h,l方向的平移,等等了

      texture文件框,显示用到的纹理,一般按下n即可了  ,加载shader文件,

 来进行解析了者也将会显示出来图像的一个对话框来,从中可以选择材质图像,

来添加使用到关卡中

   

     entity,在q3中,表示物体的属性的设置,比如位置,角度,物体的名字,类型,属于第几个number Entity的号码,等等

  

 对于所有的实体,为了进行删除,选择等操作,  

q3基本上一个双向链表存储的 物体可以用来 插入,删除,撤销,以及进行查找,

比如经常要查找某个物体就可以找到它了

  

    bsp菜单,分为快速 bsp,+vis,+light,等等命令,下放到q3map阶段处理了,

生成游戏实体的包围盒,包围球 用于碰撞检测,

 在quake3的多人游戏中,服务器必须加载bsp文件,来用于碰撞检测。

 在doom3游戏中,直接的生成了cm文件,我认为可以选择的在一个服务器上选择加载不加载cm碰撞检测文件了。

包括在doom编辑器中可以指定很多pvs,很多设计师可以决定很多.....

    GtkRadiant也包含了 aas的命令了,生成路径以及玩家们的,调用了aas动态库,但在有的关卡编辑版本中,直接全部的编辑为了exe文件

    编辑好的地图数据保存在map文件中 , 主要是生成表示场景物体的几何部分

   2      生成关卡地图用的软件源码

    q3map

 这个文件夹中 包含了地图中的entity,通过建立bsp树来查入到了树中,

 然后对于在这个树中的节点生成碰撞检测所需要的数据比如,游戏中的,实体的包围盒,

包围球体,包括生成环境光照,还有预先烘焙的光照数据,存储起来,

 设计师设计好的 map文件 经过场景管理,bsp,pvs等等处理,包括生成碰撞检测数据,

预先烘焙光照等编译,各种处理...

这个其实属于关卡编辑器地图的编译部分

 生成bsp文件过程

 在doom3代码中,dmap增加了比如 对于阴影体的判断,预先计算出来那些物体是有阴影体了。

 等等了,

其他的比如 cm,proc,等等文件,doom3进行了再次处理,分为了好几个文件了.

  aas

  这个文件夹主要保存的乃是地图中地区的属性等,

  以及可以通过face,area等属性生成对应的路径的算法等等

  

  2.  botlib文件内则生成了 Bot机器人运动时会所用到的东西,比如bot的名字,性格,模型在运行时候会加载。

             

      文件夹中包含了初始化bot的性格脚本文件,加载表示bot性格的权重文件,

使得每个bot的性格不同........

    以及机器人的说话文件chat,谈论文件,屏幕上方的红色,机器人说话文字等等

机器人 的ai包括了比如    (1)  移动的ai  :  导航,寻路, 追逐目标,

 寻路根据不同的地形选择不同的运动方式 ,

 遇见物体,如弹药,生命值,如果缺少就拿取,拿上后,健康加值,子弹加倍

                                      (2)    谈话ai,同一队的可以互相谈话

                                      (3) 武器ai,例如机器人选择威力最强的枪支,等等

         例如bot运动时经过的房间,行走的路径,顶点等等

         设置机器人行走的速度等参数,例如在水中跳得多高,游的多快。

         这样使得bot(机器人)遍历face时,采取对应的行动方式

         在游戏运行的时候,会根据aas里的area结构体face类型进行运动方式,

      Quake3 寻径是在face里寻路,

    face的类型乃是在关卡编辑的时候可以指定的,可以决定玩家遇到了

梯子,能够的上墙的,遇到了水面可以切换成  了游泳的方式了

  4     client文件包的代码

 windows文件夹中包含了   对于windows的操作,音频,opengl render,网络的一层封装,有利于跨平台

 Linux文件夹中包含了linux系统中的画面,系统操作输入输出,网络 等的函数,

 cgame文件夹

中,主要乃是运行在了客户端的代码了

  根据cfg配置文件的内容,来配置客户端,cl的配置,

 其中包含了很多的文件,主要乃是加载游戏运行参数,例如画面的系数,声音和操作配置文件,

不断的遍历状态 

 网络的操作的话,对于套接字发来的信息文件的处理了

 游戏画面的更新,机器人ai的处理 等等文件了

                 

   将表示机器人物体的md3模型加载到内存中,根据bsp文件存放的中的位置数据,在屏幕中显示出来。

  server文件包的代码

     server文件夹里包含了游戏数据的下载处理,玩家所选的地图处理,命令的解析处理等等文件了。

     对于服务器端的一些函数的处理,比如玩家掉线,加入到了游戏中,对于玩家和地图的管理了。

             服务器与客户端的数据 要经过压缩,与解压,数据压缩的越短,传输的速度就快,到了另一段后再解压

             服务器端保存着每个玩家的信息,当一个玩家的信息到了,传输到所有的玩家上,广播之

  game部分

     对于联网游戏和单机的打bot的模式的游戏逻辑的处理了。

      游戏分为四种类型,死亡竞赛,夺旗模式,组队死亡竞赛,四种,各种具有不同的游戏逻辑

quake3ui的代码

 c语言写就的button,提供了一 

 基本上结构体定义的button,位置,menu菜单,标签,

  doom3的ui彻底的换掉了这个ui系统    ,使用了c++重新的改写了ui系统了,但是渲染部分的 

一部分代码仍然遗传在doom3中,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值