quake3源码大体结构

 这个没全部整理好,先发表了,慢慢改动,雷神的代码比较复杂,我不知道会改动到几时,就先发表了,以后慢慢改动

1   雷神编辑器 ->map文件

      格式如下

      运用地图编辑器的功能来实现编辑房间,地形的功能者也,最后保存格式为map文件,建议下载一个雷神地图编辑器

 2  生成bsp文件过程

     1,加载map文件数据到内存中,建立一棵二叉树,将entity中的brush的每个面的值赋给node节点,再给每个每个节点将patch镶嵌上

     2   遍历二叉树,在每个节点中根据brush选出平面,进行bap树分割,将数据根据bsp树进行场景处理

     3   遍历二叉树,根据node是否有两个子节点,判断是否该节点为一个叶子节点,如是则表明为一个protrol入口。

     4  遍历二叉树, 根据入口生成pvs

     5  生成网格,存储光照的值,最后在渲染部分运用光照贴图加上这些值,表示光照。

3   生成aas文件过程

     1. bspc文件夹内根据bsp文件的brush类型例如火山,梯子,传送门,来生成行对应的运动方式,例如机器人接触水面就开始游泳

     再设置速度等参数,例如在水中跳得多高,游的多快。      

    2. botlib文件内则生成了Bot运动时所用到的东西,例如bot运动时经过的房间,行走的路径,顶点等等

 4   渲染阶段

  render->根据配置文件的来配置opengl->设置视口大小->加载bsp文件->根据 玩家位置->找到玩家所在的房间及邻居房间->表示房间及物体的多边形数目,光源数目等等

                      静的直接渲染->  多边形根据类型    例如mesh,triangles,patch等等,再增加多边形数目,

                      动的物体则要计算它的几何位移,其余跟静态物体没区别,例如  水波计算它的波动率,而怪物,则要根据更新动画来显示出来,光源的移动,旋转,缩放等等

                      在确定完玩家潜在能看到的多边形后,将多边形进行排序,进行透明的先渲染,再对不透明的多边形渲染

                      当对于多边形阶段完了后,进行纹理映射部分

                     对于纹理图片,分格式加载bmp,jpg,tga等等格式,进行加载,根据纹理对应的参数进行对应的纹理混合方式

                      然后再渲染阴影,

                      渲染天空,使用的天空盒进行渲染

                      backend后置阶段,则对于幁缓存区进行操作,比较深度测试,模板测试,颜色测试等等

                     对投影方式进行改为正投影,使得用于渲染2D的文字,图片,按钮之类,例如生命值,弹药数

                                                                                                     加载bsp,渲染器阶段

                                               

 5. 游戏阶段                           game.dll       

 windows->load库文件{    检测机器的类型,如什么显卡,什么cpu之类,生成配置文件    ,等等,篇幅太小,难一写全                                    

                                                 render.dll

                               单人游戏 —》加载bsp,aas文件玩游戏{

    game   {                                                                                 加载aas地图,进行机器人的人工智能阶段

                          多人游戏—>配置ip或ipx协议,联网玩游戏

  单人阶段  

        初始化bot 数量,根据bsp的entity,将表示bot,物体的md3模型加载到内存中,根据bsp文件存放的中的位置数据,在屏幕中显示出来。

        游戏类型分为team,ctF等类型,类型不同游戏形式也不同,

        在同一类的队员可以互相通信,设置一个领队

        主要是人工智能的代码,例如导航,

         追逐目标,对于一个组队来共同追逐一个目标等等

         武器选择,设置武器的子弹速度等等,push传送门的使用等等 ,武器的发射速度,及碰撞检测   

                                                                    导航,寻路

               机器人使用的有限状态机  -{    遇见敌人,打!   打不过,逃! 

                                                                    遇见物体,如弹药,生命值,如果缺少就拿取

原文地址:https://www.cnblogs.com/zengqh/p/2614929.html