闫令琪图形学入门笔记(矩阵变换篇)

article/2025/9/15 6:01:09

整个坐标变化过程贯穿管线渲染,它与光栅化、着色一同构成GPU完整的渲染过程。所以理解三维世界的坐标与矩阵变换是首要的学习内容
在这里插入图片描述

1.1 向量的点乘与叉乘

  • 点乘

向量的点乘可以求得一个数,利用点乘可以进一步计算两向量的夹角大小,或者一个向量在另一向量的投影长度。这一运算可用于路径判断中

  • 叉乘

叉乘的含义决定,计算结果是一个向量。结果向量方向上垂直于参加叉乘的两向量,因此称之为法向量,根据右手螺旋定则(先将两向量移动到同一起点,右手四指从a转到b,则拇指所指方向,即为结果向量的方向)确认计算结果的方向,将多边形各边与某一点向量依次做叉乘,可以判断某点是否位于多边形内部,这在光栅化中极为重要。
在这里插入图片描述

1.2 左乘矩阵

矩阵描述的是运动,是线性变换,向量左乘矩阵即代表该向量进行某种线性变换后产生新的向量。当然只有线性变化不足以表示图形学中的所有图像操作,因此可大致分为以下几种矩阵变换

1.2.1 线性变换

线性代数限制在一种特殊类型的变换上,即线性变换。如果一个变换拥有以下两个性质,我们就称它为线性的变化:

  1. 直线在变换后仍保持直线,不能有所弯曲。

  2. 原点保持固定

我们熟知的线性矩阵变化包括

缩放
[ s 0 0 s ] ∗ [ x y ] = [ s ∗ y s ∗ x ] \begin{bmatrix} s & 0 \\ 0 & s \end{bmatrix} \quad * \begin{bmatrix} x \\ y \end{bmatrix} = \quad \begin{bmatrix} s*y \\ s*x \end{bmatrix} \quad [s00s][xy]=[sysx]
在这里插入图片描述
在这里插入图片描述

推移(切变)

[ 1 a 0 1 ] ∗ [ x y ] = [ x + a y y ] \begin{bmatrix} 1 & a \\ 0 & 1 \end{bmatrix}* \quad \begin{bmatrix} x \\ y \end{bmatrix} = \quad \begin{bmatrix} x+ay \\ y \end{bmatrix} \quad [10a1][xy]=[x+ayy]
在这里插入图片描述
在这里插入图片描述

旋转
[ c o s θ − s i n θ s i n θ c o s θ ] ∗ [ x y ] = [ c o s θ ∗ x − s i n θ ∗ y s i n θ ∗ x + c o s θ ∗ y ] \begin{bmatrix} cosθ & -sinθ \\ sinθ & cosθ \end{bmatrix}* \quad \begin{bmatrix} x \\ y \end{bmatrix} = \quad \begin{bmatrix} cosθ *x - sinθ*y \\ sinθ *x+cosθ*y \end{bmatrix} \quad [cosθsinθsinθcosθ][xy]=[cosθxsinθysinθx+cosθy]
在这里插入图片描述

1.2.2 平移与仿射变换

平移的矩阵表示与线性变换格格不入,涉及到了矩阵的加法,实际上平移不是线性变换
在这里插入图片描述
在这里插入图片描述
而仿射变换实际就是线性变换+平移,那么十分有必要将平移写成矩阵形式,为此引入齐次坐标
在这里插入图片描述
将向量维数加1,且新加一维的数值为0(根据向量的平移不变性,三维空间类推),就可以把平移用矩阵左乘写出来。同样线性变化也可以在齐次坐标下表示出来
在这里插入图片描述
继续引出仿射变化,例如下图的转换
在这里插入图片描述
直接左乘旋转矩阵无法得到右图,因为旋转是绕原点进行的,所以需要经过先旋转后平移(变换的复合)实现:
在这里插入图片描述
在这里插入图片描述
这里有两点注意:

  • 平移后再旋转已经构成个仿射变换
  • 矩阵变换的顺序不可调换,否则影响最终结果
1.2.3 投影变换(正交投影与透视投影)

三维图形从制作到显示到屏幕上需要经历MVP+视口变换四个步骤

  • M 模型变换:即将计算机世界中的物体模型放置到规定的世界坐标系位置中 ,对应OpenGL中的world space
  • V视图变换:调整摄像机的位置、方向以及摄像机的向上调整最终将其放到世界坐标系的原点(实际按照相对运动原理,一切关于摄像机的移动同时作用在物体之上,就可以确保两者相对位置的固定), 对应OpenGL中的eye/camera space
    在这里插入图片描述
  • P 投影变换: 包括正交投影与透视投影,他们的最终目的都是把复杂的三维图形”挤压“到一个立方体中,而最终成像(光栅化)时从立方体的一个面看过去都是一张标准的二维图(其中深度信息会用于遮挡检测)。
    透视变换具有近大远小的特点,更符合人眼对于三维物体的平面成像。透视投影其实是分成两步:首先将视锥体挤压成长方体,再做一次正交投影得到最终的立方体, 对应OpenGL中的eye/camera space。具体步骤下面会展开来看

OpenGL中的还有一个透视除法,得到归一化设备坐标 ,即NDC space

  • 视口变换: 上一步压缩会让最终得到的XY二维图的比例失调,且实际显示器的宽高比也是不同的,所以视口变换就是将二维图形的比例进行依次转换而已. 对应OpenGL中的screen space:
    在这里插入图片描述整个变换流程如下图:
    在这里插入图片描述

重点来看投影变换的细节,以下内容可以认为是线性变换(不包括旋转)与平移在三维中的表示

正交投影
在这里插入图片描述
一般的正交变换并没有得到最终的二维图,而是将原先位于认为规定的长方体内的物体挤压到一个位于原点的立方体(所有轴的范围均位于-1 到1)中,因此正交投影只涉及平移与缩放
在这里插入图片描述
我们定义原长方体的尺寸如下:
在这里插入图片描述
根据推导可以得出最终的变换矩阵(缩放+平移)
在这里插入图片描述
透视投影
在这里插入图片描述
在这里插入图片描述
视锥体的远近平面包含了要显示的所有物体,摄像机相当于人眼,那么我们如何得到远大近小的效果呢?其实如果把远平面进行挤压,越靠近远平面的物体变小的越严重,那么相比来说越靠近近平面的物体就会变得更大,最终大小相等的两个物体会出现远大近小的效果。具体透视投影也分为两步

  1. 仅平面保持不变,缩小原平面

这一步的变换中,xy轴为缩放,很容易得出,而z轴需要依赖两个人为假设

  • Near clip plane上的任意点,设为(i,j,n),它的z值不变依旧为 n。
  • Far clip plane上的任意点,设为(k,l,f),它的z值不变依旧为 f。
  • 常量k != 0,通过其次坐标我们可以知道,(x,y,z,1) 是等价于 (kx,ky,kz,k)
    推导后得到挤压矩阵是(引入齐次坐标原因是z其实有向远平面的位移,必须使用齐次坐标来表示)
    在这里插入图片描述
    上式中,前两列代表xy轴的缩放,而第3、4列则是有上面三个假设得到
    详细推导过程

1.3 其它矩阵性质

相似矩阵
一句话:相似的矩阵是同一个线性变换在不同基/坐标系下的的不同描述。
线性变换若粗略看成一个刚体的特定运动。刚体的特定运动是同一个,
但坐标系改变的话这个运动的描述函数就会不一样,如果这个函数可用矩阵等价替代的话,
一个坐标系就对应着一个矩阵,因此这些矩阵就不同,但这些矩阵必有关系,这个关系就是相似

1.3.1 正交矩阵

这种矩阵就是保持两点的欧式距离不变的线性变换,类似于把一个方方正正的立方体变成斜的

1.3.2 对称矩阵

对称矩阵定义的主要目的是因为它有一系列良好的性质。
比如对称矩阵如果可对角化,那么一定可被正交对角化。
几何上来看,这意味着对称矩阵的本征向量是正交的

1.3.3 正交对角化

正交矩阵是一个在三维坐标系中歪着摆的立方体。
对角化就是把这个立方体摆正来(也就是让它某一个顶点放在原点上,同时这个顶点的三条边正好对在三维坐标系的xyz三条轴上)
所以这个定理的意思就是,任何歪着摆的立方体劳资都能把它摆正了。这定理还是蛮直观的。

1.3.4 正定矩阵

对称的矩阵,而且是某个二次型方程的矩阵表示时的矩阵,二次型如果恒大于0,那么二次型为正定的,这个矩阵也是正定的
这个矩阵用在求二次型极值很有意义

1.3.5 矩阵的特征值与特征向量

矩阵是运动,是变换,那么矩阵的特征向量是就矩阵的各个变换方向,而特征值就是该变化的重要程度
方阵可以分解为相似矩阵与特征值矩阵的乘积,那么就很容易找到方阵的主要变化特征
马同学知乎

1.3.6 卷积

一个函数效果被另一函数翻转与平移(卷)后在一定时间内影响的叠加(积)结果
https://www.zhihu.com/question/22298352
https://blog.csdn.net/liuxiangxxl/article/details/84836164
https://blog.csdn.net/weixin_39124778/article/details/78411314
https://blog.csdn.net/kilotwo/article/details/88403079


http://chatgpt.dhexx.cn/article/m5ErMSOf.shtml

相关文章

点云矩阵变换

点云矩阵变换 变换矩阵工作原理 : |-------> 变换矩阵列| 1 0 0 x | \| 0 1 0 y | }-> 左边是一个3阶的单位阵(无旋转)| 0 0 1 z | /| 0 0 0 1 | -> 这一行用不到 (这一行保持 0,0,0,1)要进行点云旋转,需要对3阶矩阵进行赋值 如何赋值参考&#xf…

OpenGL矩阵变换

参考内容: 1. 这次,彻底搞懂 OpenGL 矩阵转换 2. Article - World, View and Projection Transformation Matrices 模型变换的基本流程图: 1. 模型变换 模型变换解决的是,把物体在世界坐标系下的位置拆分成平移、缩放、旋转的…

MATLAB矩阵变换

目录 对角阵与三角阵 1、对角阵 (1)提取矩阵的对角线元素 (2)构造对角阵 2、三角阵 (1)上三角阵 (2)下三角阵 矩阵的转置与旋转 1、矩阵的转置 2、矩阵的旋转 3、矩阵的左右翻转 4、矩阵的上下翻转 矩阵的逆与伪逆 1、矩阵的逆 2、矩阵的伪…

Cesium 矩阵变换

在Cesium和其他三维开发中中经常用到矩阵变换。比如将一个物体移动、缩放、平移都可以用变换矩阵来计算。 再比如将三维场景中的物体转换为屏幕上显示的二维图形,需要用到透视投影(perspective projection)矩阵。 变换(tansform…

浅谈矩阵变换——Matrix

矩阵变换在图形学上经常用到。基本的常用矩阵变换操作包括平移、缩放、旋转、斜切。 每种变换都对应一个变换矩阵,通过矩阵乘法,可以把多个变换矩阵相乘得到复合变换矩阵。 矩阵乘法不支持交换律,因此不同的变换顺序得到的变换矩阵也是不相同…

变换矩阵

1、变换矩阵 变换矩阵可以分解为缩放,旋转,平移矩阵的乘积: M T * R * S - 右手坐标系 当均匀缩放时,旋转和缩放可以交换顺序 缩放和平移不可以交换顺序 2、子坐标系与父坐标系 由在父坐标系中的坐标位置P,和三…

矩阵基础与变换

矩阵基础 矩阵的基本概念 由 m n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m n矩阵(引用百度百科)。记作: 这mn 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列。 矩阵的加法 同型…

2.2 矩阵变换

写在前面:作者本人是纯纯的菜鸟,学习的内容来自于 中国大学MOOC 中南大学 《科学计算与MATLAB语言》,欢迎各位大佬或新手在这里和平讨论,如果我有错误请各位不吝赐教,提前感谢各位捧场! 何为矩阵变化&#…

线性代数学习笔记——第七十二讲——共轭矩阵

1. 本讲内容概要 2. 复数及其性质及复数的运算 3. 复共轭及模 4. 共轭矩阵的定义及性质

共轭矩阵 正定矩阵

https://blog.csdn.net/know9163/article/details/80551764

共轭 、 共轭转置、共轭矩阵、酉矩阵、正定矩阵、半正定矩阵

共轭复数 实数部分相同而虚数部分互为相反数的两个复数。 矩阵的共轭转置 把矩阵转置后,再把每一个数换成它的共轭复数。 自共轭矩阵 矩阵中每一个第i 行第j 列的元素都与第j 行第i 列的元素的共轭相等。 酉矩阵 AH 是A 的共轭转置 A叫做酉矩阵 正定矩阵 半正…

matlab-线性代数 对矩阵取共轭(不用函数)

由上图所示,可以得知:a是求矩阵的共轭转置,而a.是求矩阵的共轭。在数学中,共轭转置表示为在矩阵的右上角加上H。 如果矩阵是实数矩阵,那么a和a.的结果一样,都是求矩阵的转置,如下图所示&#xf…

我的矩阵学习

摘自矩阵(数学术语)_百度百科 定义 由 m n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m n矩阵。记作: 这mn 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i…

矩阵的共轭

The conjugate of a matrix(矩阵的共轭):矩阵元素中有复数(complex number),将矩阵中的复数求共轭,实数不变。矩阵的共轭记为。如:

旋转矩阵,矩阵,共轭矩阵

旋转矩阵,矩阵,共轭矩阵 1.旋转矩阵1. 旋转矩阵简介2. 性质3. 二维空间3.1 普通旋转3.2 复平面 4. 三维空间4.1 旋转4.2 角-轴表示和四元数表示4.3 欧拉角表示4.4 对称保持 SVD 表示 5 .其他5.1 旋转轴5.2 叉乘计算 2 矩阵2.1 定义2.2 矩阵的基本运算2.3…

矩阵的迹\矩阵的秩\伴随矩阵\共轭矩阵,基底、维数与秩,相对某个基底的坐标计算方法

矩阵的迹(Trace) n n n\times n nn的方阵A的n个对角线元素的和称为方阵A的迹,记作tr(A). A ( a 11 ⋯ a 1 n ⋮ ⋮ a n 1 ⋯ a n n ) A\begin{pmatrix}a_{11}&\cdots &a_{1n}\\\vdots&\ &\vdots\\a_{n1}&\cdots&a_…

共轭复数,共轭根式,共轭矩阵,共轭方向,共轭方向法,共轭梯度法,共轭分布,共轭函数,傅里叶变换的共轭对称

目录 1. 共轭复数 2. 傅里叶变换的共轭对称性 3. 共轭根式(radical conjugates) 4. 共轭矩阵(自共轭矩阵、Hermitian(埃尔米特)矩阵) 5. 共轭方向 6. 共轭方向法 7. 共轭梯度法 8. 共轭分布(conjugacy) 9. 共轭函数&…

Java关键字之Assert

参考博客来自:Assert断言语法与触发 一.assert关键字是什么? 在C和C语言中都有assert关键,表示断言。 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多,与之同理的就是if&#xff…

java关键字概念

1. 访问控制 1) private 私有的 private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明 private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言…

Java关键字—基本数据类型

Java关键字之—基本数据类型 byte、shout、int、long、float、double、boolean、char关键字 byte、shout、int、long、float、double基本数据类型中的数值型,且在保存数据时第一个bit要作为符号位进行整形符号的保存,0为正数,1为负数。 byte…