quake3源码大致结构

发布时间:2026/9/2 19:26:06

quake3源码大致结构
quake3的源码的大致结构2017年 3月1日我再次看了我以前写的这个博客感觉错误之处极多过去没有能够领悟的东西现在领悟了很多从quake3引擎中我学到了不少的东西先做出一番改进改动common文件包通用文件基本上各个部分都需要调用的Vector的定义点积叉积法线归一化基本的数学函数matrix矩阵的定义全局矩阵转化为了局部矩阵 平面的定义 等等quake3中各种文件的定义例如模型md3文件md4模型的定义bsp文件的定义3ds文件的定义对于线程操作的函数例如线程挂起sleep函数等polygon多边形的分解与组合在关卡编辑以及引擎中可以使用的shader文件的定义等等 以及lcc脚本使用的c语言的函数等等了mesh的定义对于模型md3模型或者md4模型的作用1Radiant文件夹主要包括比如对于xz,yz,xy等对话框的windows对话框的程序mfc的对话框xy,xz,yz等等对话框继承了这个的纹理图片的对话框以及还有控制台的对话框quake3的这个关卡编辑相对还是比较的简单的……在关卡编辑器外面乃是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来进行生成组合hollowcsgadd,csgsub等等patch的生成组合可以用来做曲面的等等model,m3模型加载模型 设置角度位置放在关卡中了即可light,作为entity的一种在编辑器中表示光源半径一般300可以调节surface继承的mfc的对话框主要有面的类型wave水面岩浆梯子等等以及fit等等对于纹理进行uv的调整hl方向的平移等等了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文件 经过场景管理bsppvs等等处理包括生成碰撞检测数据预先烘焙光照等编译各种处理...这个其实属于关卡编辑器地图的编译部分生成bsp文件过程在doom3代码中dmap增加了比如 对于阴影体的判断预先计算出来那些物体是有阴影体了。等等了其他的比如 cm,proc等等文件doom3进行了再次处理分为了好几个文件了.aas这个文件夹主要保存的乃是地图中地区的属性等以及可以通过facearea等属性生成对应的路径的算法等等2. botlib文件内则生成了 Bot机器人运动时会所用到的东西比如bot的名字性格模型在运行时候会加载。文件夹中包含了初始化bot的性格脚本文件加载表示bot性格的权重文件使得每个bot的性格不同........以及机器人的说话文件chat谈论文件屏幕上方的红色机器人说话文字等等机器人 的ai包括了比如 1 移动的ai 导航寻路 追逐目标寻路根据不同的地形选择不同的运动方式 遇见物体如弹药生命值如果缺少就拿取拿上后健康加值子弹加倍2 谈话ai同一队的可以互相谈话3 武器ai,例如机器人选择威力最强的weapon等等例如bot运动时经过的房间行走的路径顶点等等设置机器人行走的速度等参数例如在水中跳得多高游的多快。这样使得bot(机器人)遍历face时采取对应的行动方式在游戏运行的时候会根据aas里的area结构体face类型进行运动方式Quake3 寻径是在face里寻路face的类型乃是在关卡编辑的时候可以指定的可以决定玩家遇到了梯子能够的上墙的遇到了水面可以切换成 了游泳的方式了4client文件包的代码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中

相关新闻

TabActivity、TabHost、NavController

TabActivity、TabHost、NavController

2026/9/2 19:26:06

1.TabActivity 继承自Activity&#xff0c;其内部定义好了TabHost&#xff0c;可以通过getTabHost()获取TabHost。 TabHost 包含了两种子元素&#xff1a;一些可以自由选择的Tab&#xff0c;及 与这些tab对应的内容tabContent&#xff0c;在layout的<TabHost>下它们分别对…

UI交互动画从概念到实战:提升产品演示质感的关键技术

UI交互动画从概念到实战:提升产品演示质感的关键技术

2026/9/2 19:26:06

先聊一个真实场景&#xff1a;同样是一套 SaaS 控制台&#xff0c;静态稿看起来功能齐全、界面干净&#xff0c;但一到产品演示阶段&#xff0c;按钮点击有没有反馈、页面切换是否平滑、模块出现有没有节奏&#xff0c;会直接决定观众对“产品完成度”的判断。很多时候功能差异…

懂交互的产品演示:交互动画设计原理与前端实现指南

懂交互的产品演示:交互动画设计原理与前端实现指南

2026/9/2 19:26:06

懂交互的产品演示&#xff0c;不是把界面做得好看&#xff0c;而是在正确的时间点&#xff0c;让用户看到正确的变化。这个变化可能是按钮按下后的微反馈&#xff0c;可能是卡片展开时的转场节奏&#xff0c;也可能是数据加载过程中的引导动画。很多团队做产品演示时&#xff0…

自动化测试面试高频问题与实战解答:从UI到接口框架

自动化测试面试高频问题与实战解答:从UI到接口框架

2026/9/2 20:16:08

自动化测试在软件测试面试里几乎躲不掉。西安这边12k左右的测试岗&#xff0c;面试官不会只问你“什么是自动化测试”&#xff0c;更常问的是“你做过哪些自动化”“脚本怎么写的”“框架怎么搭的”“出了问题怎么排查”。这些问题的共同点是&#xff1a;看起来是概念题&#x…

小米YU7提车验车全攻略:从外观到交付单,避开签字后扯皮

小米YU7提车验车全攻略:从外观到交付单,避开签字后扯皮

2026/9/2 20:16:08

提完车再发现问题&#xff0c;是所有人都不想面对的场景。群里有个朋友提小米YU7&#xff0c;等车等了大半年&#xff0c;交付当天心情激动&#xff0c;围着车转了一圈&#xff0c;觉得“看起来没毛病”&#xff0c;签完字就把车开走了。第二天洗车时&#xff0c;才发现引擎盖边…

自动化测试面试高频考点全解析:从概念到工程实践

自动化测试面试高频考点全解析:从概念到工程实践

2026/9/2 20:16:08

最近有准备跳槽的测试同学问我&#xff1a;面一个西安 12k 左右的测试岗&#xff0c;面试官怎么总爱揪着自动化测试问&#xff1f;这其实不是什么个别现象。自动化测试在软件测试面试中早就是高频考点&#xff0c;尤其是薪资到了 10k 以上&#xff0c;如果你只会点点点&#xf…

Gradle 5.6.4下载失败?镜像加速与手动放置全攻略

Gradle 5.6.4下载失败?镜像加速与手动放置全攻略

2026/9/2 20:16:08

简介&#xff1a;Gradle 5.6.4 完整发行包&#xff08;all 版&#xff09;是面向 Java 与 Android 开发者的构建工具资源&#xff0c;适合需要离线安装、快速搭建开发环境或学习新版特性的用户。压缩包共两千个文件&#xff0c;主要包含 Java 源码、HTML 帮助文档、Gradle 与 K…

自动化测试面试高频考点:Selenium、接口自动化与Pytest实战解析

自动化测试面试高频考点:Selenium、接口自动化与Pytest实战解析

2026/9/2 20:16:08

1. 为什么自动化测试问题总被面试官反复追问最近不少测试同学反馈&#xff0c;在西安面试 12k 左右的软件测试岗位时&#xff0c;功能测试、数据库、Linux 这些基础题还好&#xff0c;一旦聊到自动化测试&#xff0c;就容易卡壳。有的被问到“Selenium 的显式等待和隐式等待到底…

Tesseract 5.0 Windows源码编译指南:打造完整本地OCR识别环境

Tesseract 5.0 Windows源码编译指南:打造完整本地OCR识别环境

2026/9/2 20:06:07

简介&#xff1a;OCR-Tesseract 5.0编译后完整版本&#xff0c;面向需要快速集成OCR能力的软件开发者、算法工程师及科研人员。该资源基于Google维护的开源OCR引擎Tesseract 5.0编译生成&#xff0c;借助深度学习模型和LSTM/CNN网络&#xff0c;可高效识别中文、英文等百余种语…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学&#xff0c;看到最多的状态就是&#xff1a;简历上写着“熟悉 MySQL”“了解索引优化”&#xff0c;一碰到数据库管理工程师的笔试卷&#xff0c;却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事&#xff1a;时间参数到底在约束什么你翻过数字电路教材&#xff0c;一定见过这两个词&#xff1a;建立时间&#xff08;Setup Time&#xff09;和保持时间&#xff08;Hold Time&#xff09;。它们常被并列写在触发器&#xff08;Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起&#xff1a;从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目&#xff0c;我至今记忆犹新。它没有直接给出一个花哨的名字&#xff0c;而是用“超声波测距机”这个朴实无华的功能描述&#xff0c;精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景&#xff1a;用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务&#xff0c;标题写得很直白&#xff0c;但背后其实是一整套可以复用的技术流程&#xff1a;字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵&#xff0c;却总希望语音助手偶尔“不正经”一点&#xff0c;不用官方腔回答问题&#xff0c;而是张口就接几句搞笑段子&#xff0c;会是什么体验&#xff1f;我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱&#xff0c;而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具&#xff0c;而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置&#xff1b;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…