9

我大部分时间都是 C# 开发人员。回到大学时,我上过 C/C++ 课程,所以我“了解 C”,这也是我成为 C# 开发人员的很大一部分原因。

但是,我从来没有机会专业地用 C/C++ 编写代码,我想研究现代游戏引擎的工作原理,以及工业级 C/C++ 应用程序的运行方式。

问题是,我不知道从哪里开始。例如,我下载了 Quake 3 引擎源代码(已被重新命名为id Tech 3),我什至不知道从哪里开始。

受保护的 C#/WinForms 应该如何攻击像 id Tech 3 或其他一些大型 AAA 引擎这样的大型 C 代码库?

4

6 回答 6

12

尝试使用引擎的最基本子集来做最简单的 3d“Hello World”程序。这可能会教你负载。

对于大型代码库,最好不要尝试一次学习所有内容。只需深入了解您需要回答自己(或可以在互联网上搜索)的非常具体的问题,或者您需要完成的非常具体的任务。这种方法为您提供了实际进行一些编程所需的目的和动力。学习会自己来的。

于 2009-08-24T20:47:43.977 回答
4

编写一个模组将是一个很好的起点。

从图表开始:香草游戏。换东西。查看手榴弹弹跳代码。让它进一步反弹。添加客户端预测(非弹性射弹已经拥有)。

添加一个传送武器。它会告诉你更多关于碰撞检测的信息,而不是你想知道的。

有几个关键函数可以处理大部分游戏:引擎导出、trap_* 调用。在打开引擎代码并查看它们的实现之前,了解 mod 到底在做什么可能会有很大帮助。

例如,它可能会告诉您有关引擎的更多信息,以了解您需要在每次实体移动时调用 LinkEntity,否则它在游戏 BSP 树中的位置未更新并且后续引擎调用可能会忽略它,而不是确切地知道如何树被存储和访问。

于 2009-08-24T21:52:09.993 回答
3

这听起来像个笑话,但是:找到main()函数。这是程序执行的定义明确的起点,您应该能够从那里跟踪所有内容。

这应该可以帮助您确定哪些子系统依赖于哪些子系统,因为它们的初始化顺序通常是自下而上的。例如,一个典型的引擎会提前初始化它的内存、调试和跟踪子系统,因为大多数其他系统需要这些服务才能启动和运行。

您还应该能够找出进入游戏主循环的方式,并了解在循环获得控制之前需要什么。

于 2009-08-26T08:56:07.527 回答
1

以防万一您正在寻找其他 3D 游戏引擎并且可能想将它们相互比较,请参阅 dim3:

http://code.google.com/p/dim3/

于 2009-08-25T06:08:16.913 回答
1

Andre LaMothe 几乎教会了我所有关于游戏编程的知识。一旦你读完这两本书,你就会几乎知道你需要知道的关于 3d 引擎的一切。

  1. Windows 游戏编程大师的技巧
  2. 3D 游戏编程大师的技巧 - 高级 3D 图形和光栅化

否则,只是尝试编写自己的小引擎来获得乐趣,看看你能走多远,你缺少什么,你很快就会开始理解你正在查看的其他代码的目的,

也可能想尝试查看NeHe Gamedev 教程

于 2009-08-27T21:10:23.620 回答
0

我从来都不是阅读大型成品的忠实粉丝。尤其是 Quake 代码库。您可以肯定地从中学到一些好处,但这不应该是您的起点。您首先需要学习一些在游戏编程中使用的新概念。

我建议暂时搁置 C++(如果你想制作游戏,你真的需要在某个时候回到它)但现在安装 XNA。它与 .NET 一样出色的框架。那里有很多关于游戏 XNA 的教程。

于 2010-01-23T11:33:49.030 回答