用于3D(游戏)引擎编程的数学

27

我想了解3D游戏引擎编程通常需要哪些数学知识?是否需要特定的数学知识(例如向量几何)或计算算法(例如快速傅里叶变换),或者是否通过DirectX/OpenGL进行抽象处理,使高度复杂的数学知识不再必要?


4
3D图形编程需要对线性代数有相当的了解。针对3D计算机图形学的向量数学教程是迄今为止学习向量和矩阵的最佳资源。此外,每个章节结束时都会有一道测试问题来验证和巩固该主题的理解,这也是一个交互式的学习方式。 - legends2k
这个问题应该被移动到其他的 Stack Exchange 网站,比如游戏开发或数学(不确定是否正确,因为这个问题涉及编程)。 - Andreas detests censorship
4个回答

22

线性代数!大量的线性代数!

以下是需要它们的课程和示例情况:

  • 向量 - 位置、速度、法向量
  • 矩阵 - 变换
  • 四元数 - 旋转(非常适合骨骼动画)
  • 光线 - 投射物碰撞检测
  • 平面 - 投射物碰撞检测
  • 视锥体 - 渲染剔除
  • 球体 - 渲染剔除,快速碰撞测试
  • 轴对齐包围盒 - 剔除、碰撞测试、空间划分
  • 定向包围盒 - 碰撞测试
  • 凸包 - 碰撞检测、空间划分
  • 等等。

你应该从Vector和Matrix开始学习,因为它们将在引擎的各个方面中使用(图形、物理、AI等)。


看起来主要是移动和碰撞检测。 - Ian Warburton

21

6
向量,很多很多的向量! - Marius
事实上,您可以摆脱向量,并且这样做有某些重要的优点。张量更易于处理。 - ima
7
向量是一阶张量——不能将它们移除以取而代之张量。 - duffymo
我没有提到向量,因为在C++中的向量(即矩阵)和物理向量以及几何向量之间有些混淆。 - Martin Beckett
1
摆脱矩阵和向量,转而使用更抽象的张量和算子。最重要的是,它允许在基本变换下不变地定义操作。当你将一些物理学引入到3D引擎中时,它可以极大地简化问题。 - ima
三角函数需要多精确?我打算用C语言来实现,但是C的三角函数并不是非常准确。[希望我能找到一些库,我真的不想自己编写三角函数]。 - Shambhav Gautam

6
大多数情况下与线性代数和计算几何有关; 四元数被广泛使用,如果您正在开发物理引擎,则需要进行数值分析。
每天使用这些知识的程度取决于您所从事的工作。如果您是图形程序员,因此正在构建3D图形引擎本身,则很可能正在实现或维护实际执行数学计算的类库和函数的实现,因此了解详细信息非常重要。如果您将库用作客户端或正在处理游戏引擎的其他部分(AI,音频,UI,相机等),则需要在概念上理解数学,但您肯定可以不知道如何在白板上手写矩阵逆。
图形API并不消除某人需要了解这种数学的必要性; 它们仅限于绘制,因此所有场景管理和世界模拟都需要在图形API之外实现。当然,也有中间件选项,但许多工作室会自己开发系统。
针对这个市场有相当数量的资源。例如,在亚马逊上有书籍,如“3D Math Primer For Graphics and Game Development”,在线上也可能有很多内容。

2
复杂的数学会涉及到,但最重要的是理解数学背后的概念,而不仅仅是数学本身。只要你了解它们如何结合起来,通常会有许多辅助方法可以用于所需的许多计算。当然,这很大程度上取决于你使用的开发平台。

你有没有关于学习概念以及如何将其应用于游戏编程的建议?我发现大部分材料都直接教授数学计算,而不是告诉你在什么情况下应该使用它。 - TheGeoff
@TheGeoff: 3D 图形编程需要相当不错的线性代数理解。在学习向量和矩阵方面,《三维计算机图形学中的向量数学教程》(http://chortle.ccsu.edu/vectorlessons/vectorindex.html) 是目前为止最好的资源。而且该教程还具有交互性,每节课结束时都会有一个测试问题来验证和巩固对该主题的理解。 - legends2k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接