首页/新闻资讯/正文详情

QUAKE 3源代码评测:架构

发布时间:2026/9/27 2:57:57 来源:云帆数科 栏目:资讯中心
QUAKE 3源代码评测:架构
QUAKE 3源代码评测架构第1部分共5部分由于我在下一个合同翻译可能有误前一个星期我决定完成我的“循环ID”。DoomDoomiPhoneQuake1Quake2中德军iPhone和毁灭战士我决定读最后一个代码库我还不审查idTech3的3D引擎Quake III,quakelive引擎主要是idTech2的演变但有一些有趣的新奇。重点可归纳如下第2部分新的双核渲染器与基于物料的着色器构建在OpenGL固定管道上。第3部分基于快照的新的网络模型。第4部分新型虚拟机在引擎中扮演重要角色将Quake1 可移植性/安全性与 Quake2速度 此处翻译可能有误……相结合。第5部分机器人的新人工智能。我特别印象深刻虚拟机的系统 和 相关的工具链 总共占发布的 代码 的 30。在这种观点下idTech3是一个小型操作系统可以提供三个进程的系统调用。基于快照和内存自省的优雅网络系统。像往常一样我写了许多笔记我已经清理并合成了图纸。我希望能节省时间给一些人但也鼓励别人的代码成为更好的工程师。第一次联系由于最近ftp.idsoftware.com最近退役代码可以在id的GitHub帐户中找到 git clone https://github.com/id-Software/Quake-III-Arena.git当谈到一个巨大的 代码库我更喜欢使用 XCodeSpotLight速度Command-click 查找 定义和字符串 高亮使得 该工具 比 Visual Studio 更强大。但是打开Quake III项目表明代码腐烂 并不总是 关于代码还涉及到 这些工具XCode 4.0无法 打开 Quake III XCode 2.0项目。最后我在 Windows 8 上 使用 Visual Studio 2010 Professional安装Visual Studio 2010生产力电动工具后 工具集实际上很愉快。第一个引人注目的是Visual Studio工作区不是由一个项目组成的而是八个。如果构建是DEBUG或RELEASE特别game是cgame和q3_ui虚拟机项目则不是全部使用它们。一些项目永远不会使用splines和ui。一个表格最好总结什么项目对哪个模块做出贡献项目类型DEBUG构建RELEASE构建注释botlib静态库botlib.libbotlib.libAI在CGame动态的Libary / Bytecodecgamex86.dll-game动态的Libary / Bytecodeqagamex86.dll-q3_ui动态的Libary / Bytecodeuix86.dll-QUAKE3可执行文件quake3.exequake3.exerender静态库renderer.librenderer.lib基于OpenGL的splines样条曲线静态库Splines.libSplines.lib使用NOWHEREUI动态的Libary / Bytecodeuix86_new.dll-用于Quake III Arena。琐事idTech3的工作题目是“三位一体”。由于idTech4被称为“Neo”我认为它是从“Matrix”专营权...电影中 取得 灵感 但是id软件在接受firingsquad.com的采访时指出它以“达拉斯的三一河”命名约翰就研究而言我有几件引擎的事情正在进行中。FS那是三位一体呢我认为“三位一体”有点混乱。约翰我从来没有真的确定这是如何像所有人…………此处有待进一步考察原文和重新翻译 何时我开始使用新的渲染技术和一切 每个人都称之为“下一个引擎” 不用太在意 。迈克尔·阿布拉斯Michael Abrash建议 我们只是采取英特尔在一条河附近命名您的下一个项目 您。 我们在达拉斯拥有三一河地名所以就像“三位一体引擎”一样下一步。约翰就研究而言我有几件引擎的事情正在进行中。FS那是三位一体呢我认为“三位一体”有点混乱。约翰我从来没有真的确定这是如何像所有人一样混乱。震后此处翻译可能有误…… 何时 我开始使用新的渲染技术和一切每个人都称之为“下一个引擎” 不用太在意。迈克尔·阿布拉斯Michael Abrash建议 我们只是采取英特尔在一条河附近命名您的下一个项目 您。我们在达拉斯拥有三一河所以就像“三位一体引擎”一样下一步。编辑2012年7月7日Jeremiah Sypult在发表本文后联系了我他用“XCode 4.0”项目为“Quake3”Mac OS X构建“不动”。此处 可能有误……我已经进一步修复了你可以在github上得到它。您将需要Quake III Arenabaseq3而不是演示版并确保 使用参数set vm_game 0 set vm_cgame 0 set vm_ui 0以使用dylib虚拟机。打开/code/quake3.xcworkspace它建立在一个点击架构了解架构的一个方便的方法是首先将软件视为 接收输入左上箭头和生成输出底部箭头的 黑盒子然后查看输入如何以白盒方式与6个模块流向输出quake3.exerenderer.libbot.libgamecgame和q3_ui的交互如下两个重要的事情要理解设计每个单个输入键盘win32消息鼠标UDP套接字都转换成一个event_t集中的事件队列sysEvent_t eventQue[256]。这允许其他事情记录记录每个输入以重新创建错误。1998年10月14日在约翰·卡马克的“计划”中详细讨论了这一设计决策。客户端和服务器的显式拆分我在John Carmack的QA中概述了Fabien Sanglard您认为如何总结idTech3的主要创新之外 - 机器人IA - 虚拟机结合QuakeC可移植性和Quake2 dll速度。 - SMP着色器渲染器。 - 新的网络代码。约翰·卡马克明确将网络划分为客户端演示端和服务器逻辑端 这是真的对要做的事。 我们退出了在Doom3和大部分 Rage 但我们正在迁移回去。 所有的Tech3 许可证持有者被迫做更多的工作 以分析 架构实现单人效应 但事实证明 执法纪律确实有一个有价值的回报。Fabien Sanglard您认为如何总结idTech3的主要创新之外 - 机器人IA - 虚拟机结合QuakeC可移植性和Quake2 dll速度。 - SMP着色器渲染器。 - 新的网络代码。约翰·卡马克明确将网络划分为客户端演示端和服务器逻辑端这是真的对 要做的事。我们退出了在末日3和大部分愤怒但我们正在迁移回去。所有的Tech3 许可证持有者被迫做更多的工作以分裂架构实现单人效应但事实证明 执法纪律确实有一个有价值的回报。服务器端负责维护游戏状态确定客户需要什么并通过网络传播。它是静态联系的bot.lib因为它是一个单独的项目因为它的《doom启示录 》第275页提到的混乱的发展历史更糟糕的是游戏的一个基本要素 - 漫游器 - 失踪了。bot 机器人 是由电脑控制的字符。一个好的机器人会与动作和 模型 相融合像机器人的额外的场景以及与玩家的互动。对于Quake III终结 只有游戏机器人是单人游戏动作所必需的。它们是隐含的复杂因为它们 不得不像“游戏中玩家”一样行事。卡马克决定第一次将创建这些机器人的工作委托给另一个机器人程序员在公司。但他没有跟进。卡马克再次错了每个人都像自己一样自我激励和擅长。他错了当Graeme努力控制工作时发现机器人完全无效。他们根本不喜欢人类。他们的行为基本上就像机器人一样。工作人员开始恐慌。到1999年3月他们有理由害怕。[..]最后机器人已经被种植到荷兰知名的模具制造商英国人带来了这个制造商 他们生活Fab的注释这是Mr.ElusiveJan Paul van Waveren。客户端负责预测实体在哪里延迟补偿并呈现视图。它与renderer项目静态链接一个单独的项目允许Direct3D甚至软件渲染器被非常容易地插入。代码从代码的角度来看这是一个部分展开的循环用于说明客户端和服务器的事件生产和消耗int WinMainHINSTANCE hInstanceHINSTANCE hPrevInstanceLPSTR lpCmdLineint nCmdShow { Com_Init NET_Init 而1 { //通用代码 IN_Frame //将Win32操纵杆和鼠标输入作为event_t添加到统一的事件队列中。 { IN_JoyMove IN_ActivateMouse IN_MouseMove } Com_Frame { //通用代码 Com_EventLoop //将win32消息UDP套接字和控制台命令的泵送到队列sysEvent_t eventQue [256] Cbuf_Execute //服务器代码 SV_Frame { SV_BotFrame //在bot.lib中跳转 VM_CallgvmGAME_RUN_FRAMEsvs.time //在游戏虚拟机中跳转执行游戏逻辑 SV_CheckTimeouts SV_SendClientMessages //向连接的客户端发送快照或增量快照 } //通用代码 Com_EventLoop Cbuf_Execute //客户端代码 CL_Frame { CL_SendCmd //泵送事件队列并发送命令到服务器。 SCR_UpdateScreen VM_CallcgvmCG_DRAW_ACTIVE_FRAME; //发送消息到客户端虚拟机做预测。 要么 VM_CalluivmUI_DRAW_CONNECT_SCREEN; //如果菜单可见则会将消息发送到UI虚拟机。 S_Update //更新声音缓冲区 } } } }这是一个完全展开的循环我在挖掘源代码时使用了一个地图。一个有趣的事情要注意到这完全说明了虚拟机的重要性没有任何地方可以看到RE_RenderScene执行剔除和发出OpenGL命令的功能。相反发生的是Quake3.exe向 客户端VM 发送 消息CG_DRAW_ACTIVE_FRAME哪个表示需要刷新。虚拟机执行一些 实体剔除 和 预测然后通过Quake3系统调用CG_R_RENDERSCENE调用OpenGL再现。Quake3.exe接收系统调用实际调用RE_RenderScene。OpenGL Quake3.exe客户端虚拟机 -------- ---------- ---------------------- | | | | | | | VM_CallCG_DRAW_ACTIVE_FRAME----------------- CG_DrawActiveFrame | | CG_DrawActive | | trap_R_RenderScene | | 系统调用CG_R_RENDERSCENEfd | RE_RenderScene -------------------------------------- | | | | | ---------------------- | | | | |统计这里有一些来自cloc的统计资料-------------------------------------------------- --------------------------------------------- 文件空白评论代码 -------------------------------------------------- --------------------------------------------- cloc-1.56.exe代码共享559 48630 73501 233952 cloc-1.56.exe lcc 116 2270 1513 28067 cloc-1.56.exe q3asm q3map 44 4987 5565 22877 cloc-1.56.exe q3radiant 206 11870 13113 54922 -------------------------------------------------- --------------------------------------------- 共计919 68293 95509 341994 -------------------------------------------------- ---------------------------------------------在 饼图上我们可以生动地看到这个比例是多么 的不寻常因为30的代码库专门用于工具部分原因是 因为idtech3具有ANSI C编译器开源Little C CompilerLCC用于为虚拟机生成字节码。内存分配两个定制分配器在这里工作区域分配器负责运行时小型和短期内存分配。Hunk分配器负责从pak文件几何地图纹理动画的级别负载大型和长期分配。更美好的明天有了这个代码审查似乎我跑出了伟大的3D引擎源代码阅读。但是CG世界正在走很多伟大的事情。我特别期待着Occulus Rift VR工具包构建编码和 理解测试台将会很有趣。它应该在7月下旬直到那时止快乐的技巧

相关推荐

2026企业网盘怎么选?我的选型经历与真实体会
2026企业网盘怎么选?我的选型经历与真实体会

一、从个人工具到企业网盘:一个自然过渡2026年,远程办公和跨地域协作早已不是新鲜事,但团队内部文件流转的方式却依然值得反复审视。我身边不少初创团队起步时,习惯用各类免费个人网盘、微信传输或U盘拷贝来分享文件。起初确实方便… · 2026/9/26 4:21:02

SpeechAnalyzer API性能对比:iOS语音识别技术迁移与优化实践
SpeechAnalyzer API性能对比:iOS语音识别技术迁移与优化实践

在语音识别技术快速迭代的今天,Apple最新推出的SpeechAnalyzer API在性能测试中展现出了令人瞩目的表现。作为长期从事iOS开发的工程师,我们在实际项目中对SpeechAnalyzer、Whisper系列以及Apple旧版SFSpeechRecognizer进行了全面的横向对比测试&#xf… · 2026/9/24 13:24:31

转轴故障诊断与修复:从结构原理到工程实践
转轴故障诊断与修复:从结构原理到工程实践

你肯定遇到过这样的场景:刚买的设备用了没几天,或者用了很久的电子产品,一不小心摔了一下,外壳没碎,屏幕没裂,但就是某个关节处松动了,开合角度不对劲,甚至完全无法正常使用。这时候… · 2026/9/21 11:41:39

停车管理系统设计与实现:车牌识别入场与计费核心模块落地指南
停车管理系统设计与实现:车牌识别入场与计费核心模块落地指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:57:50

Context Menu Manager Plus按应用管理右键菜单:如何一键禁用某个软件塞进菜单的全部项目
Context Menu Manager Plus按应用管理右键菜单:如何一键禁用某个软件塞进菜单的全部项目

Context Menu Manager Plus按应用管理右键菜单:如何一键禁用某个软件塞进菜单的全部项目 【免费下载链接】ContextMenuMgr Context Menu Manager Plus 是一个强大的实用程序,它可帮助您管理 Windows 上的右键菜单,并避免第三方向你的右键菜单… · 2026/9/27 2:57:50

设计师做兼职的网站搭建避坑:3种建站报价方案对比
设计师做兼职的网站搭建避坑:3种建站报价方案对比

设计师做兼职的网站搭建避坑:3种建站报价方案对比 域名和服务器搞不懂,是90%设计师转兼职接单的噩梦。你画得再漂亮,网站打不开、加载慢如蜗牛,客户直接拉黑。更扎心的是,当你去问建站公司要报价时,对方甩来一份“高端定制”,价格让你肉疼,却不敢… · 2026/9/27 2:57:50

工厂宿舍无线覆盖方案:802.11AC高密组网与认证限速实战
工厂宿舍无线覆盖方案:802.11AC高密组网与认证限速实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 2:57:44

茶企业网站建设模板避坑指南:一文搞懂安全加固
茶企业网站建设模板避坑指南:一文搞懂安全加固

茶企业网站建设模板避坑指南:一文搞懂安全加固 做茶企官网的朋友,是不是也被那种套壳模板坑过?看着页面花里胡哨,结果上线第一天就被挂马,或者后台密码直接裸奔在源码里。很多茶老板觉得“不就是放几张茶叶图片、写写品牌故事嘛”,这种天真想法就是最大… · 2026/9/27 2:57:44

【小游戏+GitHub开源】 我在B站上线发布了论坛游戏:微恐、民俗、悬疑、推理,9案卷,58中式民俗主题(附游戏链接 + GitHub免费开源)٩(ˊᗜˋ*)و
【小游戏+GitHub开源】 我在B站上线发布了论坛游戏:微恐、民俗、悬疑、推理,9案卷,58中式民俗主题(附游戏链接 + GitHub免费开源)٩(ˊᗜˋ*)و

引言 昨晚十一点四十,我在河边数灯。 六盏。 低头收好火柴,再抬头—— 水上有七盏灯。 多出来的那盏很旧,纸边泡得发白。 别的灯往下游走,只有它逆着水,停在旧泵房门口。 它没有灭。 我本来想走,手机却亮了… · 2026/9/27 2:57:44

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码