3D图形学中的矩阵变换及证明(一)

article/2025/9/14 17:02:29

文章同时发布于: 王鹏飞的个人网站。

3D图形学中的矩阵变换

从这个月开始,我打算系统的去学习计算机图形学的知识了,一方面是因为兴趣,另一方面是之前自己也写过一些二维图形相关的程序,有一些数学的基础。图形学在软件开发中的地位很高,市面上所有的建模软件都与图形学相关,即使是photoshop这种设计软件也会涉及图形学的知识。而现在由于webgl的发展,未来图形软件在浏览器的比重也会越来越大。
废话不多说了,直接进入正题。本篇文章主要是为了证明图形学中的几种变换矩阵。首先要知道到学习图形学肯定要与向量、矩阵打交道。如果对线性代数不熟,可以先系统的学习下线性代数,要看懂本篇文章,至少你要有矩阵和向量的基础,会矩阵的数乘和乘法。

一. 点和向量

这部分我先简单的介绍下点和向量等基础概念。

平面中任意一个点可以用一个二元数列表示,在笛卡尔坐标系中(0, 0)点表示原点,(1, 1)表示原点往x轴方向移动1步,往y轴方向移动1步得到的点,而向量就形象的表示了这一过程,(0, 0)至(1, 1)点的向量就是(1 - 0, 1 - 0),即(1, 1)。向量是一个表示方向和大小的概念,在物理中可以用来表示力和速度。在三维中,点和向量用三元数列表示(x, y, z),任意一组xyz值可以唯一确定一个点和一个向量。

二. 变换矩阵

在图形学中,在做平移,旋转和缩放时,经常会用到矩阵,有缩放矩阵、平移矩阵和旋转矩阵。在三维空间中,变换矩阵都是一个四维矩阵,每一行分别表示x, y, z, w。为什么是四维的而不是三维的呢?请继续往下阅读。

1. 缩放矩阵(scale)

image-20210521105821765

上面的公式,左边的第一个操作数(四维矩阵)就是一个缩放矩阵,s1表示x轴的缩放倍数,s2表示y轴的缩放倍数,s3表示z轴的缩放倍数。第二个操作数表示空间中(x, y, z)点, w分量在缩放矩阵中没有用到,我们将其设为1。由右边的结果,可以看出(x, y, z)点经过缩放矩阵变换后,x、y、z分量都各自缩放了s(s1、s2、s3)倍。需要注意的是矩阵的乘法不具有交换律,这里点是用一维列矩阵表示的,作为矩阵乘法的右操作数。如果将其转换到乘法的左边,那么点应该用一维行矩阵表示:

image-20210521110937589

缩放矩阵比较简单,不需要证明,只需要会简单的乘法,就可以看出x,y,z经过缩放矩阵的变换确实被缩放了。

2.平移矩阵(translation)

image-20210521111108645

平移矩阵也称位移矩阵,平移矩阵用到了第四列(w列),这也是为什么三维空间变换矩阵为什么是四维的。平移矩阵也比较容易理解,因为可以通过结果看出想x 、y、z确实各自平移了T步。

3. 旋转矩阵

旋转矩阵,相对难一些,也不是那么容易理解,我们先看最基础的绕x、y、z轴旋转的旋转矩阵。

沿x轴:

image-20210521111545555

沿y轴:

image-20210521111559180

沿z轴:

image-20210521111610922

引入了三角函数,我们无法从结果看出旋转矩阵是否正确,所以我们需要证明。下面我给出沿z轴旋转的变换矩阵证明过程,其他轴同理可证。

image-20210521112417466

假设有如图的点p1,因为绕z轴旋转,点的z值是不变的,我们将其设为0,这样可以将其模拟成二维平面xy中旋转。假设p1绕原点旋转b角度,初始角度为a。整个证明过程如下:

// 经过旋转后向量的长度不变为L(原点到p1和p2的距离相同)
// 由三角函数得到sin(a + b), cos(a + b)的值
cos(a + b) = x2 / L;
sin(a + b) = y2 / L;// 展开sin(a + b)和cos(a + b)
cos(a) * cos(b) - sin(a) * sin(b) = x2 / L;
sin(a) * cos(b) + cos(a) * sin(b) = y2 / L;// 用x和y表示cos(a)和sin(a)
x / L * cos(b) - y / L * sin(b) = x2 / L;
y / L * cos(b) + x / L * sin(b) = y2 / L;// 等式两边同时乘以L
x * cos(b) - y * sin(b) = x2;
y * cos(b) + x * sin(b) = y2;

将x2和y2的结果与上面z轴旋转矩阵结果比较,发现是完全一样的。

按照上面的方法同理可证绕x轴旋转和绕z轴旋转的矩阵。

那么绕任意轴旋转的矩阵呢?learnOpengl_cn官网直接给出了绕任意轴旋转的矩阵,(Rx, Ry, Rz)表示任意轴,θ表示旋转的矩阵。这个矩阵证明比较复杂。

image-20210521115236594

我就不去给大家证明了,我给出证明的思路,大家可以自己尝试去证明。

first,我们可以将绕任意轴旋转转换成绕x,y,z轴旋转。所以先将轴(Rx, Ry, Rz)转换成某一个轴,例如转换成z轴。如图将轴绕Y轴旋转θ角度至yz平面。

image-20210521115839075

在将轴绕x轴旋转a角度至z轴重合。

image-20210521120215298

现在物体绕该轴旋转,就是绕z轴旋转了。旋转完成后,我们还需要将旋转轴恢复至最初的位置,即将上面的步骤逆操作一遍,先绕x轴旋转-a角度,再按照y轴旋转-θ角度。这一系列变换最后得到的矩阵就是绕任意轴旋转的矩阵。

继续阅读: 3D图形学中的矩阵变换及证明(二)、3D图形学中的矩阵变换(三)。

(完)。


http://chatgpt.dhexx.cn/article/1M9jRVxY.shtml

相关文章

【线性代数】理解矩阵变换及行列式的本质

参考:行列式的本质是什么? 这篇文章的结构是: 线性变换的几何直观 实现线性变换的矩阵 行列式 一、线性变换的几何直观 线性变换的几何直观有三个要点: 变换前是直线的,变换后依然是直线 直线比例保持不变 变换前…

三维空间矩阵变换

二维旋转推导 假如有一个矢量(ρ,θ),那么在二维直角坐标系中可以得到xρ*cosθ y ρ*sinθ; 现在把这个矢量旋转β度,直角坐标系下变换后的矢量为(ρ,θβ)其坐标值为x ρ*cos(θβ) y ρ*sin&#xf…

2.2 matlab矩阵变换(对角阵、三角阵、矩阵的转置、矩阵的旋转、矩阵的翻转和矩阵求逆)

1、对角阵 (1)提取矩阵的对角线元素 >> a [1:3;4:6;7:9]a 1 2 3 4 5 6 7 8 9 >> diag(a)ans 1 5 9 >> diag…

计算机图形学【GAMES-101】1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影)

快速跳转: 1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影) 2、光栅化(反走样、傅里叶变换、卷积) 3、着色计算(深度缓存、着色模型、着色频率) 4、纹理映射(重心坐标插值、透视投影矫正、双线性插值MipMap、环境光遮蔽AO) 5、几何(距离函数SDF、点…

Tensorflow之矩阵变换

----------------------- 摘自 【维基百科】----------- 变换矩阵是数学线性代数中的一个概念。 在线性代数中,线性变换能够用矩阵表示。如果T是一个把Rn映射到Rm的线性变换,且x是一个具有n个元素的列向量,那么 {\displaystyle T({\vec {x}}…

three.js中的矩阵变换(模型视图投影变换)

文章目录 1. 概述2. 基本变换2.1. 矩阵运算2.2. 模型变换矩阵2.2.1. 平移矩阵2.2.2. 旋转矩阵2.2.2.1. 绕X轴旋转矩阵2.2.2.2. 绕Y轴旋转矩阵2.2.2.3. 绕Z轴旋转矩阵 2.3. 投影变换矩阵2.4. 视图变换矩阵 3. 着色器变换3.1. 代码3.2. 解析 4. 其他 1. 概述 我在《WebGL简易教程…

矩阵变换及其数学原理

矩阵变换及其数学原理 矩阵变换及其数学原理引子各种变换 平移矩阵缩放矩阵旋转变换 引子 推荐这篇文章线性代数的本质,这篇文章挺不错的,揭示了矩阵和向量的内涵。首先概要性的提一下 向量刻画的是线性空间中的对象。矩阵刻画的是向量在线性空间中的运…

计算机图形学之矩阵变换的深度理解

对于图形学来说,矩阵计算不可避免,既直观又方便。而如果线性代数学的不透彻的话,那么基本上是做不到应用的,这里推荐看一下3Blue1Brown的线性代数的视频,可以对矩阵计算有深刻的认识。 之后就是应用阶段,我…

图像处理-矩阵变换

Android中通过矩阵来处理图像问题是非常常见的。 图像中的每一个像素点都是一个颜色矩阵分量,然后我们让这两个矩阵相乘就能得到一个新的矩阵(新的颜色矩阵分量),这就是矩阵变换对图像中的每一个点的处理,使得对整个图…

shader中的常用矩阵变换

unity shader 矩阵学习 矩阵运算法则(1)矩阵和标量的乘法(2)矩阵和矩阵的乘法矩阵相乘的条件 和 结果的行数和列数 变换的基本概念(1)变换(2)线性变换(3)平移变换(4)仿射变换(5)齐次坐标 2D 矩阵变换&#…

【Matlab】矩阵变换与矩阵求值

矩阵变换与矩阵求值 对角矩阵:只有对角线上有非零元素的矩阵。 数量矩阵:对角线上的元素相等的对角矩阵。 单位矩阵:对角线上的元素都为1的对角矩阵。 diag函数 提取矩阵的对角线元素 diag(A):提取矩阵A主对角线元素&#x…

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

整个坐标变化过程贯穿管线渲染,它与光栅化、着色一同构成GPU完整的渲染过程。所以理解三维世界的坐标与矩阵变换是首要的学习内容 1.1 向量的点乘与叉乘 点乘 向量的点乘可以求得一个数,利用点乘可以进一步计算两向量的夹角大小,或者一个…

点云矩阵变换

点云矩阵变换 变换矩阵工作原理 : |-------> 变换矩阵列| 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语言》,欢迎各位大佬或新手在这里和平讨论,如果我有错误请各位不吝赐教,提前感谢各位捧场! 何为矩阵变化&#…