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传送门的使用等等 ,武器的发射速度,及碰撞检测
导航,寻路
机器人使用的有限状态机 -{ 遇见敌人,打! 打不过,逃!
遇见物体,如弹药,生命值,如果缺少就拿取