QUAKE 3源代码评测:架构

发布时间:2026/11/9 1:56:04

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/11/9 2:30:09

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

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

2026/11/9 3:16:56

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

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

2026/11/9 4:56:16

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

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

2026/11/9 6:08:39

有关电工证培训机构怎么选 官方报名入口在哪儿

有关电工证培训机构怎么选 官方报名入口在哪儿 之前考的证在外省能不能转过来?这是很多特种作业人员最头疼的问题,尤其是像你这样在洛阳涧西区从事水利工程的同事,频繁跨省作业,证书能否在不同省份使用直接影响着工作机会和职业发展。今天就从【有关电工…

2026/11/9 6:08:39

最新国网电工证查询多少钱 外省证能转过来吗

最新国网电工证查询多少钱 外省证能转过来吗 之前考的证在外省能不能转过来?这个问题你肯定问过,而且现在很多人都在问。别急,这篇文章就帮你把【最新国网电工证查询】和【多少钱】这两个关键词讲明白,告诉你怎么转、怎么查、怎么考,甚至还能帮你规划考…

2026/11/9 6:08:39

低压电工证备考方法怎么考,考前押题全攻略

低压电工证备考方法怎么考,考前押题全攻略 之前考的证在外省能不能转过来,这几乎是所有准备考证的朋友最关心的问题。特别是像郑州金水区的应届工程类毕业生,面对工作和考证的双重压力,不仅得了解低压电工证备考方法,还得搞清楚外省证件是否有效。好消息…

2026/11/9 6:03:39

盐城高压电工证考试怎么报名多少钱

盐城高压电工证考试怎么报名多少钱 工地太忙根本没时间复习考试,这是很多电工师傅的真实写照,尤其是那些在盐城、洛阳涧西区等工地一线干活的朋友们,高压电工证考试成了绕不开的门槛。但很多人不知道,其实考试并不像想象中那么难,关键在于怎么高效备考和…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/7 14:54:47

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑