我想知道 3D 游戏引擎编程通常需要什么样的数学?任何特定的数学(例如矢量几何)或计算算法(例如快速傅立叶变换),或者这一切都被 DirectX/OpenGL 抽象出来了,因此不再需要高度复杂的数学?
4 回答
线性代数!很多很多线性代数!
这只是您需要它们的类和示例情况
- 矢量- 位置、速度、法线
- 矩阵- 变换
- 四元数- 旋转(非常适合骨骼动画)
- Ray - 弹丸碰撞检测
- 平面- 弹丸碰撞检测
- Frustum - 渲染剔除
- Sphere - 渲染剔除,快速碰撞测试
- Axis-Align Bounding Box - 剔除、碰撞测试、空间分区
- 定向边界框- 碰撞测试
- Convex Hull - 碰撞,空间分割
- 等等
您应该从 Vector 和 Matrix 开始,因为它们将在引擎中的任何地方使用(图形、物理、AI 等)
主要是矩阵、三角函数、几何和一些线性代数
大部分是线性代数和计算几何;四元数被广泛使用,如果您正在使用物理引擎,则需要进行数值分析。
你每天会使用多少东西取决于你在做什么。如果您是一名图形程序员,并因此构建 3D 图形引擎本身,那么您可能正在实现或维护实际执行数学运算的类库和函数的实现,因此了解血淋淋的细节相对重要。如果您将库用作客户端或在游戏引擎的另一部分(AI、音频、UI、相机等)上工作,那么您将需要从概念上理解数学,但您当然可以避免不知道如何实现头顶白板上的逆矩阵。
图形 API 并没有消除人们了解这个数学的需要;它们仅限于绘图,因此所有场景管理和世界模拟都需要在图形 API 之外实现。当然,也有中间件选项,但许多工作室推出自己的系统。
有相当数量的资源针对这个市场。例如,在亚马逊上有诸如3D Math Primer For Graphics and Game Development之类的书籍,网上可能也有很多东西。
复杂的数学发挥作用,但最重要的是理解这种数学背后的概念,而不是数学本身。只要您了解这一切是如何结合在一起的,通常会有许多您需要的计算的辅助方法。当然,这在很大程度上也取决于您使用的开发平台。