读书人

quake3源码大体结构

发布时间: 2012-06-25 18:37:39 作者: rapoo

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传送门的使用等等 ,武器的发射速度,及碰撞检测

导航,寻路

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

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

.......

读书人网 >其他相关

热点推荐