3D数学基础:图形和游戏开发(第2版)第6章笔记

本文深入探讨3D数学中的矩阵概念,包括行列式的计算、逆矩阵、正交矩阵及其在图形和游戏开发中的应用。讨论了4×4矩阵在透视投影中的作用,解释了如何通过矩阵实现三维空间的变换和平移,以及透视投影的几何原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


第6.1节介绍了矩阵的行列式。
第6.2节介绍了矩阵的逆。
第6.3节讨论正交矩阵。
第6.4节介绍了齐次向量和4 × 4矩阵,并展示了如何将它们应用于三维执行仿射变换。
第6.5节讨论了透视投影,并展示了如何使用4 × 4矩阵来进行透视投影。

6.1 矩阵的行列式

方型矩阵M的行列式记为| M |,在其他一些书中,记为“det M”。非方阵的行列式没有定义。

2 × 2矩阵的行列式
在这里插入图片描述
3 × 3矩阵的行列式
在这里插入图片描述
如果我们把一个3 × 3矩阵的行解释为三个矢量,那么这个矩阵的行列式就等价于这三个矢量的所谓“三重积”:
在这里插入图片描述

子矩阵行列式:假设M是一个r行c列的矩阵。考虑M中删除第i行和第j列得到的矩阵,这个矩阵显然有r - 1行和c - 1列。这个子矩阵的行列式记为 M { i j } M^{\{ij\}} M{ij},称为M的子矩阵。
在这里插入图片描述

矩阵的余子式:
C i j = ( − 1 ) i + j M { i j } C^{ij} = (−1)^{i+j}M^{\{ij\}} Cij=(1)i+jM{ij}
在这里插入图片描述

任意n × n矩阵的行列式(用第i行余子式计算n × n的行列式)
在这里插入图片描述

  • 任意维单位矩阵的行列式为1:| I | = 1
  • 矩阵乘积的行列式等于行列式的乘积:|AB| = |A||B|
  • 矩阵转置的行列式等于原来的行列式: ∣ M T ∣ = ∣ M ∣ |M^T| = |M| MT=M
  • 如果一个矩阵中的任何一行或一列都是0,那么这个矩阵的行列式为0:
    在这里插入图片描述
  • 交换任意行对,则行列式为反(同样的规则也适用于交换列。):

在这里插入图片描述

  • 将一行(列)的任意倍数添加到另一行(列)不会改变行列式的值(这解释了为什么错切矩阵的行列式为1。)
    在这里插入图片描述
    矩阵的行列式几何解释:在二维空间中,行列式等于平行四边形的带符号面积,在三维空间中,行列式是平行六面体的带符号体积。
    在这里插入图片描述
    行列式与由矩阵变换产生的大小变化有关。行列式的绝对值与用矩阵变换一个物体所产生的面积(二维)或体积(三维)的变化有关,行列式的符号表示矩阵中是否包含任何反射或投影。
    矩阵的行列式也可以用来帮助对矩阵所表示的变换类型进行分类。如果一个矩阵的行列式是零,那么这个矩阵包含一个投影。如果矩阵的行列式是负的,那么反射就包含在矩阵中。

6.2 逆矩阵

M ( M − 1 ) = M − 1 M = I M(M^{−1}) = M^{−1}M = I M(M1)=M1M=I
不是所有的矩阵都有逆矩阵。一个明显的例子是一个矩阵的一行或一列填满了0—无论你用这个矩阵乘什么,结果中相应的行或列也将填满0。
一个矩阵有逆矩阵,它是可逆的(invertible)或非奇异的(nonsingular)。
一个没有逆矩阵的矩阵被称为不可逆的(noninvertible)或奇异矩阵(singular)。
对于任何可逆矩阵M,只有当v = 0时,矢量vM = 0才成立。
此外,可逆矩阵的行是线性无关的,列也是。奇异矩阵的行(和列)是线性相关的。

经典伴随法求逆矩阵
经典伴随矩阵:
在这里插入图片描述
在这里插入图片描述
高斯消元法求逆矩阵(更少计算)

  • 一个矩阵的逆的逆是原始矩阵的逆:(当然,这里假设M是非奇异的):

在这里插入图片描述

  • 单位矩阵是它自己的逆矩阵(注意,还有其他矩阵是它们自己的逆矩阵。例如,考虑任何反射矩阵,或一个围绕任何轴旋转180度的矩阵):
    在这里插入图片描述

  • 个矩阵的转置的逆就是这个矩阵的逆的转置:
    在这里插入图片描述

  • 一个矩阵乘积的逆等于两个矩阵的逆的乘积,按相反的顺序取:
    在这里插入图片描述

  • 逆矩阵的行列式等于原矩阵行列式的倒数:
    在这里插入图片描述
    矩阵的逆在几何上是有用的,因为它允许我们计算一个变换的“反向”或“相反”——一个变换可以“撤销”另一个变换,如果它们按顺序执行。
    在这里插入图片描述

6.3 正交矩阵

当且仅当该方阵与其转置的乘积是单位矩阵时,方阵M正交的: M M T = I MM^T = I MMT=I
一个矩阵乘以它的逆矩阵是单位矩阵 M M − 1 = I MM^{-1} = I MM1=I),因此,如果一个矩阵是正交的,它的转置和逆是相等的: M T = M − 1 M^T = M^{-1} MT=M1
如果我们知道我们的矩阵是正交的,我们可以避免计算逆矩阵(直接使用转置矩阵即可)。

正交矩阵所满足的条件
在这里插入图片描述
九个条件(正交方程):
在这里插入图片描述
矢量都是单位矢量,矢量与自身的点积为1。
矢量两两垂直,矢量之间的点积才等于0。

在线性代数中,如果一组基矢量相互垂直,我们将它们描述为正交的。不要求它们有单位长度。如果它们有单位长度,它们就是标准正交基。因此,正交矩阵的行和列是标准正交的基向量。然而,从一组正交基矢量构造一个矩阵并不一定会得到一个正交矩阵(除非基向量也是正交的,也就是矢量都是单位矢量)。

对于矩阵的列也可以有类似的表述,因为如果M是正交的,那么 M T M^T MT也一定是正交的。

标准正交基满足正交矩阵的标准(单位矢量和两两垂直)。

还要注意,三个正交方程是重复的,因为点积是交换的。因此,这九个方程实际上只表达了六个约束条件。在一个任意的3 × 3矩阵中有9个元素,因此有9个自由度,但在一个正交矩阵中,6个自由度被约束去掉,只剩下3个自由度。值得注意的是,这三个也是三维旋转中固有的自由度数。(然而,旋转矩阵不能包含反射,所以在正交集合中有“稍微多一点的自由度”)

当计算一个矩阵的逆时,我们通常只会利用正交性,如果我们预先知道一个矩阵是正交的。如果事先不知道,检查可能会浪费时间。在最好的情况下,我们检查正交性并发现这个矩阵确实是正交的,然后我们对这个矩阵转置。但这可能会花费几乎和逆运算一样多的时间。在最坏的情况下,矩阵是不正交的,我们花在检查上的任何时间都是浪费。最后,即使是在抽象上正交的矩阵,在用浮点表示时也可能不是完全正交的,因此我们必须使用容差,并根据需要调整该容差。

矩阵的正交化
有时,我们会遇到一个稍微偏离正交的矩阵。我们可能从外部获取了错误的数据,或者我们可能积累了浮点误差(这被称为矩阵蠕变(matrix creep))。
对于用于凹凸映射的基矢量(见第10.9节),我们经常将基矢量调整为正交,即使纹理映射的梯度不是很垂直。

Gram-Schmidt正交化:基本的思想是按顺序遍历基矢量。对于每个基矢量,我们减去这个矢量中与前面的基矢量平行的那部分,这一定会得到一个垂直的矢量。(Gram-Schmidt算法是有偏差的,这取决于基向量列出的顺序)
例子:
在这里插入图片描述
在应用这些步骤之后,向量r1r2r3被保证是相互垂直的,因此将形成一个正交基。但是,它们不一定是单位矢量。我们需要一个标准正交基来形成一个正交矩阵,所以我们必须将这些矢量归一化。

三维另一种有效的矩阵的正交化:叉积
在这里插入图片描述

无偏差的递增正交化算法:我们选择一个因子k,不是减去所有的投影,我们只减去它的k倍。我们还减去到原始轴上的投影,而不是调整后的轴。这样,我们执行操作的顺序就不重要了,我们也没有维度偏差。
在这里插入图片描述
这个算法的一次迭代会产生一组基矢量,它们比原始向量稍微“更正交”,但可能不是完全正交的。通过多次重复这个过程,我们最终可以收敛于一个正交基上。为k选择一个适当的小值(比如1/4),并迭代足够多的次数(比如10次),这样我们就接近目标了。然后,我们可以使用标准的Gram-Schmidt算法来保证一个完全正交的基。

6.4 关于4×4齐次矩阵

二维齐次坐标,形式的(x, y, w)。想象一下,在三维中w = 1处的标准二维平面,实际的二维点(x, y)用齐次坐标表示为(x, y, 1)。对于那些不在w = 1平面的点,我们可以计算出相应的二维点通过将这个点投影到平面w = 1上,除以w,这就是齐次坐标
(x, y, w)映射到二维点(x/w, y/w)。
在这里插入图片描述
对于任何给定的物理二维点(x, y),齐次空间中有无穷多个对应的点,其形式为(wx, wy, w),前提是w != 0。这些点通过(齐次)原点形成一条直线。
当w = 0时,除法未定义,二维空间中没有对应的物理点。然而,我们可以将二维齐次点(x, y, 0)解释为“无穷远处的点”,它定义了方向而不是位置。当我们在概念上区分“点”和“矢量”,那么w != 0表示“点”,w = 0表示“矢量”

四维矢量有四个分量,前三个分量是标准的x、y和z分量。第四个分量是w,有时被称为齐次坐标(homogeneous coordinate)。
在w = 1时,三维点可以被认为生活在四维的超平面中。
一个四维点的形式是(x, y, z, w),我们将一个四维点投影到这个超平面上,得到相应的物理三维点(x/w, y/w, z/w)。
当w = 0时,四维点代表“无穷远处的点”,它定义了一个方向,而不是一个位置。
即:w = 1表示“点”,w = 0表示“矢量”

将3 × 3变换矩阵扩展为四维
在这里插入图片描述
当我们将[x, y, z, 1]形式的四维矢量乘以这种形式的4 × 4矩阵时,我们得到了与标准3 × 3情况相同的结果,唯一的区别是额外的坐标w = 1:
在这里插入图片描述
可以使用4 × 4矩阵进行三维中的平移
在这里插入图片描述
理解这个矩阵乘法仍然是一个线性变换是很重要的。矩阵乘法不能表示四维中的“平移”,四维零向量总是会被变换回四维零向量。这个技巧之所以能在三维中转换点是因为我们实际上是在错切四维空间(错切矩阵)。对应于物理三维空间的四维超平面在四维中不经过原点。因此,当我们错切四维空间时,我们能够在三维中平移。

当我们变换这种形式的点无穷远的矢量时[x, y, z, 0]由包含旋转,缩放等的变换矩阵,发生了预期的转换,其结果是另一个形式的矢量[x0, y0, z0, 0]。

6.5 关于4×4矩阵和透视投影

如果我们处理得当,我们可以用w除法非常简洁地概括透视投影(perspective
projection)的重要几何运算。

正交投影使用平行投影线
在这里插入图片描述
在透视投影中,投影仪在投影中心相交
在这里插入图片描述
因为投影的中心在投影平面的前面,投影机在撞击平面之前交叉,因此图像是倒过来的。
当我们将一个物体移离投影中心更远时,它的正投影保持不变,但透视投影会变小(近大远小)。这是一个非常重要的视觉提示,被称为透视透视缩短(perspective
foreshortening)。

透视投影在图形学中很重要,因为它模拟了人类视觉系统的工作方式。
在这里插入图片描述
在这里插入图片描述
让我们来研究一下针孔相机透视投影背后的几何结构。考虑一个以针孔为原点的三维坐标空间,z轴垂直于投影平面,x轴和y轴平行于投影平面。
在这里插入图片描述
我们看看能否计算出,对于任意点p, 计算 p ′ p' p的三维坐标, p ′ p' p是p通过针孔投影到投影平面上。首先,我们需要知道从针孔到投影平面的距离。我们将这个距离赋给变量d。因此,平面由方程z = −d定义。现在让我们从侧面看问题并解出y。
在这里插入图片描述
通过相似三角形,我们可以看到
在这里插入图片描述
注意,由于针孔相机会把图像颠倒过来, p y ′ p'_y py和p的符号是相反的, p x ′ p'_x px的计算方式类似:
在这里插入图片描述
所有投影点的z值相同:因此,将点p通过原点投影到z = −d的平面上的结果为:
在这里插入图片描述
在计算机内部的数学世界中,我们将投影平面移动到z = d,即投影中心的前面
在这里插入图片描述
在这里插入图片描述
透视投影矩阵
因为从四维到四维空间的转换意味着除法,我们可以在4 × 4矩阵中编码透视投影。基本的想法是为 p ′ p' p和x, y, z的公分母提取一个等式,然后建立一个4×4矩阵,使w等于这个分母。
我们假设原始点的w = 1。
在这里插入图片描述
即将 p ′ p' p的分子转换成[x y z],那么w = z / d

为了除以这个分母(即z / d),我们把分母代入w,所以四维点就是这种形式:
在这里插入图片描述
我们需要一个4 × 4的矩阵它乘以齐次向量[x, y, z, 1]得到[x, y, z, z/d]。所以这个的矩阵是:
在这里插入图片描述

  • 乘以这个矩阵实际上并不能实现透视变换,它只是将适当的分母计算为w。记住,当我们通过除以w从4D转换为3D时,实际上发生了透视除法(四维转换成三维)。
  • 这个矩阵有很多变化。例如,我们可以将投影平面放置在z = 0处,投影中心放置在[0,0,−d]处。这就产生了一个稍微不同的方程。
  • 为什么要用四维齐次空间:可以与其他的变换连接结合计算。
  • 真实图形几何管道中的投影矩阵projection matrix(也许更准确地称为“剪辑矩阵clip matrix”)不仅仅是将z复制到w中。它与我们导出的矩阵在两个重要方面有所不同:
    • 大多数图形系统应用标准化的比例因素,如w = 1在远剪辑平面。这确保了用于深度缓冲的值被适当地分配给正在渲染的场景,以最大限度地提高深度缓冲的精度。
    • 在大多数图形系统的投影矩阵也根据相机的视野缩放x和y值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值