代码之家  ›  专栏  ›  技术社区  ›  Tom Kidd

当你试图理解3D游戏引擎的代码(比如ID-Tech 3)时,你是如何开始的?

  •  9
  • Tom Kidd  · 技术社区  · 15 年前

    大多数情况下,我是一个C开发人员。回到大学时,我上了C/C++课程,所以我“知道C”,这也是我是C开发者的一个很好的原因。

    然而,我从来没有机会在C/C++中进行专业编码,我想研究现代游戏引擎是如何工作的,以及工业级C/C++应用程序是如何运行的。

    问题是,我不知道从哪里开始。如中所述,我下载了Quake 3引擎 source code (已追溯到 id Tech 3 )我甚至不知道从哪里开始。

    一个隐蔽的C/Winforms应该如何攻击一个庞大的C代码库,比如ID-Tech 3或其他大型AAA引擎?

    6 回复  |  直到 15 年前
        1
  •  12
  •   Inshallah    15 年前

    尝试执行最简单的3D“Hello World”程序,该程序使用引擎最基本的子集。这可能会教你很多东西。

    对于大代码库,最好不要尝试 学习 所有事情都同时发生。只需潜入一个非常具体的问题,你需要回答自己(或可以在互联网上搜索),或一个非常具体的任务,你需要完成。这种方法为您提供了实际进行编程所需的目的和动机。学习会自己来的。

        2
  •  4
  •   aib    15 年前

    写一个mod将是一个很好的起点。

    从图表区域开始:普通游戏。换衣服。看看手榴弹弹跳代码。让它弹得更远。添加客户端预测(非弹跳弹丸已经有)。

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

    有几个关键功能可以处理大部分游戏:引擎导出、陷阱调用。在打开引擎代码并查看它们的实现之前,了解mods对它们的具体操作可能会有很大帮助。

    例如,它可能会告诉您更多关于引擎的信息,以了解每次实体移动或不更新其在游戏BSP树中的位置时需要调用LinkEntity,随后的引擎调用可能会忽略它,而不是确切了解如何存储和访问该树。

        3
  •  3
  •   unwind    15 年前

    这听起来像是个笑话,但是:找到 main() 功能。这是程序执行的定义良好的起点,您应该能够从那里跟踪所有的事情。

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

    你还应该能够找到进入游戏主循环的方法,并且理解在循环得到控制之前需要什么。

        4
  •  1
  •   catit    15 年前

    如果您正在寻找其他3D游戏引擎,可能希望将它们相互比较,请参阅dim3:

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

        5
  •  1
  •   ReaperUnreal    15 年前

    安德烈·拉莫斯几乎教会了我所有关于游戏编程的知识。一旦你读完这两本书,你就会知道你需要知道的关于3D引擎的一切。

    1. Tricks of the Windows Game Programming Gurus
    2. Tricks of the 3D Game Programming Gurus - Advanced 3D Graphics and Rasterization

    否则,只需试着编写自己的小引擎,看看你能达到什么程度,你缺少什么,你很快就会明白你所看到的其他代码的目的,

    也可能想看看 NeHe Gamedev Tutorials .

        6
  •  0
  •   Aleks    15 年前

    我从来都不喜欢读大的成品。尤其是地震代码库。你可以从中学到很多东西,但这不应该是你的起点。你需要先学习一些游戏编程中使用的新概念。

    我建议把C++加上一点(如果你想做游戏,你真的需要在某个时候回到它),但是现在安装XNA。它和所有的.NET一样是一个很好的框架。有很多关于游戏xna的教程。