程序员开发游戏引擎应了解哪些特定的数学,物理,人工智能和一般概念?[关闭]


9

作为以Web和DB为中心的应用程序的程序员,我对列表,树,图等数据结构有所了解。老实说,我在编码中很少使用这些数据结构算法,除了像对纯数组进行排序一样,几乎完全与内置所有核心功能的面向客户的框架一起工作。我知道C,PHP,Java,HTML,PL / SQL和MySQL。我目前正在学习Python。

我想开始游戏开发。我还看到了其他有关初学者游戏开发的建议,技巧和方法的问题。我理解这些要点,并且答案很明确。发布几天后,我读了《写游戏,不是引擎》一文,意识到在创建游戏引擎之前应该先实现游戏。不过,我还有问题。

我的目的是

  • 提高我的核心水平的编程技能,包括使用数据结构算法,数学和物理概念。
  • 实施一个好的游戏引擎,沉迷于核心级别的编码。
  • 为进入AI研究领域铺平道路。

程序员开发游戏引擎应了解哪些特定的数学,物理,人工智能和一般概念?

Answers:


11

数据结构:这当然是一个有效的问题。但是,尽管某些数据结构对于任何类型的游戏都是有用的(例如您已经提到的列表,树等),但还有一些非常具体。例如,Octrees在3D编程中可能非常有用,但是在纯2D环境中,您可能不需要这些。

算法:遵循相同的经验法则。例如,在纯2D环境中,碰撞检测的工作原理与3D截然不同。

重要的数学领域: THE一个引擎开发最重要的领域熟悉的线性代数和更先进的代数主题(四元)。确实很简单,如果您对线性代数感到满意(我的意思是超越简单的矩阵乘法),那么您将有一个良好的开端。

Next ist Geometry无论如何都可以很好地连接到Engine Dev中的线性代数,而且无论如何都不需要提及。

此外,对基础微积分有扎实的了解也无济于事。在处理物理引擎或更高级的着色主题时,这很方便。

其他感兴趣的主题应该是:组合统计学

物理:这不是强制性的,如果您打算制作简单的游戏。不会造成伤害,但是在这种情况下,您会精通高中物理。

如果您正在考虑编写物理引擎或实现现有的架构,那是必须的。但是不要担心,有很多专门针对Game-Devs编写的物理书籍。请记住,在开始用物理学编码游戏之前,请阅读这些内容。如果您的游戏应该具有物理特性,那么这些引擎将与您的核心架构紧密结合。

AI:老实说,如果AI是您的主要兴趣所在,那么我不会为编写整个引擎而烦恼。当您拥有现有架构可以使用时,人工智能将变得更加有趣。编写引擎会很痛苦,并且要花很长时间才能实现有趣的AI算法。

您希望开发哪种类型的游戏?也许我可以借助这些信息来详细说明这些要点。


感谢您的详尽回答。作为对您问题的答案。.目前,我还没有脑子,但是想开发一些3D游戏引擎。但是最好考虑从一些2D游戏开始并了解环境。在进行所有这些操作之前,我应该玩一些游戏,以了解游戏的外观和感觉(因为我从未玩过视频游戏:-))。这样我就很容易理解书籍的术语和其他内容。我发现以下内容非常有帮助,
droidsites 2011年

遗憾错过了我以前的评论的链接:gamedev.stackexchange.com/questions/8502/...
droidsites

过去,如果您要开发3D游戏,我会建议您先从2D游戏开始。但是,随着XNA等架构的兴起,我认为直接涉足3D会更有趣。您已经看过C#/ XNA吗?鉴于您的编程背景,这不应该成为问题
Michael Kissner

不,我没有检查过。是的...选择C#没问题。但是我对python很有兴趣:-)
droidsites 2011年

如果您对Python感兴趣,并且对构建游戏而不是构建游戏技术感兴趣,则可以查看Panda3D或Blender Game Engine。
肖恩·米德迪奇

1

尽管询问游戏开发中最常使用哪种数据结构可能是有效的,但询问特定问题使用哪种数据结构更为有效。我可以很容易地指出,哈希表在游戏中非常常见,但是就您何时何地在您自己的代码中使用(而不是使用!)哈希表而言,这并不能告诉您任何有用的信息。:)

在数学方面,您需要对线性代数(矢量,矩阵,线性系统求解等)有非常深刻的了解,对三角学也有非常深刻的了解,并且至少需要对微积分有基本的了解(简单的导数和积分) 。任何入门级的大学级线性代数课程都应该使您走上正确的道路,如果没有教会您有关开始使用通用3D图形原理的全部知识。我还会链接一本书,在下面您会发现很有帮助。

对于物理学,您会骑车。物理学可以分为两类:碰撞检测和碰撞响应。您绝对必须了解碰撞检测背后的数学原理,因为该数学原理与您需要做的图形工作(或多或少)完全相同(特别是用于构建遮挡所需的树和地图),并且您将使用这些东西进行图形处理。很多游戏逻辑。

碰撞反应的复杂程度可能从“简单”到荒谬,甚至是简单的东西一开始都不是直觉的。我强烈建议您将这些内容留给Bullet,Havok,PhysX等现有库(如果使用2D游戏,则为Box2D),直到并且除非您对现有的数学和算法感到满意为止知识,并决定您要学习物理引擎如何工作。然后,我建议您尝试构建一个非常简单的2D物理引擎。3D物理引擎是极其复杂的野兽,并且(无疑)是游戏编程中最复杂,最困难的部分,这就是为什么物理引擎是游戏中使用最普遍的第三方技术的原因。您只是看不到很多没有的游戏 尽管有多少游戏具有从头开始的自定义图形引擎和核心引擎代码,但在专业领域还是使用Havok或PhysX。即使是仅做游戏引擎而无所事事的公司也通常会获得物理引擎的许可,例如,虚幻引擎仅使用PhysX而不包括其自己的物理引擎。

我会推荐以下书籍来帮助您入门。第一本书是入门级入门书籍,介绍了您作为3D游戏程序员需要了解的基本数学知识:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

第二本书是一本针对碰撞检测算法(不是碰撞响应!)而检测的书,它将对您的图形编码和物理编码都有所帮助:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.