3D图形编程的数学主题


14

我了解3D图形编程需要以下数学主题。我已经在我的数学课程中开始其中一些学习。有人可以指出我的资源方向来解释它们如何应用吗?他们用来解决什么图形/游戏问题?

  • 向量数学
  • 矩阵数学
  • 四元数
  • 线性代数

据我所知,这些都是线性代数/矩阵主题。还需要其他主题吗?



@beardcp我可能会尽可能重复。
共产主义鸭子

Answers:


10

线性代数是3D图形编程最重要的学科,仅仅是因为它是描述空间几何的数学语言。您的其他三个主题实际上只是线性代数的子集:

  • 向量是思考空间点的一种方式
  • 矩阵是思考空间和对象转换的方法:翻译对象,缩放对象等。
  • 四元数是这些转换的特定子组(旋转)的自然表示
  • 等等等

至于3D图形编程的其他相关数学部分,我建议您不能获得足够多的关注的是计算几何。很多自然问题都归结为计算几何学的主题:

  • 从一组点定义音量的最自然的方法之一(例如,定义将播放特定背景噪声的音频音量或雾化音量等)是找到这些点的凸包 ; 有很好的算法可以在2维和3维中做到这一点,但是即使2d算法也不是立即显而易见的。
  • 能够确定哪些对象在给定点附近或彼此附近的问题(例如,减少必须检查的可能碰撞的对象数量,或弄清楚哪些敌人会注意到某个目标)给定的点)进入了几何查询问题领域,进入了空间划分方案(因此进入了BSP树和八叉树之类的结构)。相同的一般想法也用于回答“线描”查询(例如,“此激光束会击中什么?”)

之后,我鼓励您研究基本演算,尤其是微分方程的数值方法;它们与3d图形本身的相关性比与3d物理学的相关性小,但总的来说,这两个主题紧密联系在一起(即使对于运动学上的简单问题,例如对于角色动画等),并且两者都有一定的知识大大增强您对这两者的了解;如果没有与图形使用相同的核心线性代数知识,那么即使不是不可能也不可能操作相关的物理学,但是同时拥有物理知识也为理解图形中的主题提供了另一参考点。


史蒂文,这是一个了不起的答案,谢谢。我喜欢您对如何考虑矢量,矩阵和四元数的总结(可悲的是,比我现在的线性代数讲师要在2秒内提供更多信息),您还使我对3D图形程序员面临的各种建模挑战有了更好的了解。干杯!
凯瑟琳·里克斯



1

如果您熟悉笛卡尔坐标,那么上述主题在计算机图形学中的应用应该非常清楚。有一些针对OpenGL的教程,这些教程将有助于阐明数学在解决基本显示问题中的应用,例如,如何使线框模型看起来旋转。维基百科上有关透视图的文章可能会有助于您了解一些历史背景。

除此之外,还有许多展示主题可以从数学公式中受益。例如,3D实体通常由其表面的三角剖分表示。我们如何仅显示观察者“应该”看到的那部分表面(隐藏的表面/线算法)?如果要从特定的光源/方向照亮对象,该对象如何与透视交互以提供令人信服的表面渲染?

除此之外,还有各种各样有趣的建模主题,例如雾气或火焰的动画。但是,正如您的主题列表所关注的那样,坐标的转换是以后所有改进的主要内容。



1

它们不是全部必需的。矢量数学遍布3D图形,您可能无需知道矢量数学的精妙点就可以设置几何图形,但是凹凸贴图之类的东西将变得非常困难,您将陷入物理困境。

四元数只是为某些数学提供了一个不同的描述,可能会很不错,但是由于更传统的数学足以描述四元数可以进行的任何计算,因此四元数当然不需要。

矩阵数学和线性代数关系非常密切,最重要的是描述了数字集上的线性运算。但是,这又是另一种描述可以用矢量和代数描述的事物的方式。

我不知道您是否认为它只是基础数学的一部分,但是三角学当然也需要列出。


到目前为止,我已经提到了一些物理问题-您能告诉我您在这里指的是什么吗?十二年来(即高中以来)我从未接触过这个主题,坦率地说,我讨厌它。也许我会发现它的应用更容易接受。
凯瑟琳·里克斯

牛顿物理学,主要是碰撞解决。在高中时您可能没有学过这些东西,但是它们都是非常数学的,因此,如果您喜欢数学,那就应该不错。
aaaaaaaaaaaaaa
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.