《unity shader 入门精要》读书笔记3 - 数学基础

一 笛卡尔坐标系

三维笛卡儿坐标系中,我们需要定义3个坐标轴和一个原点,
在这里插入图片描述
这3个坐标轴也被称为是该坐标系的基矢量( basis vector)
通常情况下,这3个坐标轴之间是互相垂直的,且长度为1,这样的基矢量被称为标准正交基( orthonormal basis)

笛卡尔坐标系分为:左手坐标系和右手坐标系

如图:
在这里插入图片描述
左右手坐标系之间是可以进行互相转换的。最简单的方法就是把其中一个轴反转,并保持其他两个轴不变。
Unity使用的是左手坐标系

二 矢量:

矢量不能和标量做加减运行,可以做乘除运算。

公式非常简单,我们只需要把每个分量做对应的运算即可:
乘法:
在这里插入图片描述
除法:
在这里插入图片描述

矢量的加法和减法:

我们可以对两个失量进行相加或相减,其结果是一个相同维度的新矢量
我们只需要把两个矢量的对应分量进行相加或相减即可。公式如下:
在这里插入图片描述

矢量的模:

∣ v ∣ = v x 2 + v y 2 + v z 2 |v| = \sqrt{v^2_x}+\sqrt{v^2_y}+\sqrt{v^2_z} v=vx2 +vy2 +vz2

单位矢量:

单位矢量指的是那些模为1的矢量。单位矢量也被称为被归一化的矢量( normalized vector)
对任何给定的非零矢量,把它转换成单位矢量的过程就被称为归一化( normalization)

为了对矢量进行归一化,我们可以用矢量的模除以该矢量来得到。
公式如下:
在这里插入图片描述
零矢量(即矢量的每个分量值都为0,如v=(0,0,0) 是不可以被归一化的。这是因为做除法运算时分母不能为0。

矢量的点积

矢量的乘法有两种最常用的种类:点积( dot product.,也被称为内积, inner product)又积( cross product,也被称为外积, outer product)

点积公式一:

a   ⋅   b = ( a x , a y , a z )   ⋅   ( b x , b y , b z )   = a x b x + a y b y + a z b z a\,·\,b = (a_x,a_y,a_z)\,·\,(b_x,b_y,b_z)\,=a_xb_x+a_yb_y+a_zb_z ab=(ax,ay,az)(bx,by,bz)=axbx+ayby+azbz

矢量的点积满足交换律,即:

a   ⋅   b = b   ⋅   a a\,·\,b =b\,·\,a ab=ba

点积性质:

一:点积可结合标量乘法:
在这里插入图片描述
二:点积可结合矢量加减法:
在这里插入图片描述
三:一个矢量和本身点积的结果是该矢量的模的平方:

可以利用该性质求矢量的模在这里插入图片描述

点积公式二:

a ⋅ b = ∣ a ∣ ∣ b ∣ c o s θ a·b=|a||b|cos{\theta} ab=abcosθ

矢量的叉积

另一个重要的矢量运算就是又积( cross product),也被称为外积( outer product)
与点积不同的是,矢量叉积的结果仍是一个矢量,而非标量和点积类似,又积的名称来源于它的符号:a×b。同样,这个又号也是不可省略的。

那么,又积到底有什么用呢?
最常见的一个应用就是计算垂直于一个平面、三角形的矢量。
另外,还可以用于判断三角面片的朝向

公式如下:

公式一:

在这里插入图片描述
叉积不满足交换律和结合律,即:
在这里插入图片描述
在这里插入图片描述

公式二:

在这里插入图片描述

三 矩阵:

不幸的是,没有人能告诉你母体( matrix)究竟是什么。你需要自己去发现它。

一一电影《黑客帝国》(英文名: The Matrix

定义:

它是由m×n个标量组成的长方形数组。

如下就是一个 2X2 的矩阵:
[ 1 2 3 4 ] \begin{bmatrix}1 & 2\\\\3 &4\end{bmatrix} 1324

我们可以用矩阵来表示矢量。
矢量可以看成是n x 1列矩阵( columnmatrix)
1Xn行矩阵( row matrix),其中n对应了矢量的维度。

行矩阵:
[ 1 2 3 ] \begin{bmatrix}1 & 2 & 3\end{bmatrix} [123]
列矩阵:
[ 1 2 3 ] \begin{bmatrix}1 \\\\ 2 \\\\ 3\end{bmatrix} 123

矩阵运算:

1.矩阵和标量的乘法

矩阵也可以和标量相乘,它的结果仍然是一个相同维度的矩阵。
以3×3的矩阵为例,其公式如下:
在这里插入图片描述

2.矩阵和矩阵的乘法

一个r×n的矩阵A和一个n×c的矩阵B相乘,它们的结果AB将会是一个rXc大小的矩阵。
第一个矩阵的列数必须和第二个矩阵的行数相同,它们相乘得到的矩阵的行数是第一个矩阵的行数,而列数是第二个矩阵的列数。

例如,如果矩阵A的维度是4×3 矩阵B的维度是3×6,那么AB的维度就是4×6。

性质:
一:矩阵乘法不满足交换律。
A B ≠ B A AB\not=BA AB=BA
二:矩阵乘法满足结合律。
( A B ) C = A ( B C ) (AB)C=A(BC) (AB)C=A(BC)

特殊矩阵

1.方块矩阵

方块矩阵( square matrix),简称方阵,是指那些行和列数目相等的矩阵。在三维渲染里,最常使用的就是3×3和4×4的方阵。
对角元素( diagonal elements)。方阵的对角元素指的是行号和列号相等的元素。
如果一个矩阵除了对角元素外的所有元素都为0,那么这个矩阵就叫做对角矩阵( diagonalmatrix)

例如,下面就是一个4×4的对角矩阵
在这里插入图片描述

2.单位矩阵

一个特殊的对角矩阵是单位矩阵( identity matrix),用 I n I_n In 来表示。
一个3x3的单位矩阵如下:
在这里插入图片描述
任何矩阵和它相乘都等于它自身,
M I = I M = M MI=IM=M MI=IM=M

3.转置矩阵

**转置矩阵( transposed matrix)**实际是对原矩阵的一种运算,即转置运算。只需要把原矩阵翻转一下即可。 M T M^T MT表示。

M i j T = M j i M_{ij}^T=M_{ji} MijT=Mji

如:
在这里插入图片描述
性质:

  1. 矩阵转置的转置等于原矩阵:
    ( M T ) T = M {(M^T)}^T=M (MT)T=M
  2. 矩阵串接的转置,等于反向串接各个矩阵的转置。
    ( A B ) T = A T B T {(AB)}^T=A^TB^T (AB)T=ATBT

4.逆矩阵

不是所有的矩阵都有逆矩阵,第一个前提就是,该矩阵必须是一个方阵。
给定一个方阵 M M M,它的逆矩阵用 M − 1 M^{-1} M1来表示。
逆矩阵最重要的性质就是,如果我们把 M M M M − 1 M^{-1} M1相乘,那么它们的结果将会是一个单位矩阵,即:
M M − 1 = M − 1 M = I {MM}^{-1}={M}^{-1}M=I MM1=M1M=I
如果一个矩阵的行列式不为0,那么它就是可逆的

性质:

  1. 逆矩阵的逆矩阵是原矩阵本身
    ( M − 1 ) − 1 = M {(M^{-1})}^{-1}=M (M1)1=M
  2. 单位矩阵的逆矩阵是它本身。
    I − 1 = I I^{-1}=I I1=I
  3. 转置矩阵的逆矩阵是逆矩阵的转置。
    ( M T ) − 1 = ( M − 1 ) T {(M^{T})}^{-1}={(M^{-1})}^{T} (MT)1=(M1)T
  4. 矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵。
    ( A B ) − 1 = A − 1 B − 1 {(AB)}^{-1}=A^{-1}B^{-1} (AB)1=A1B1

5.正交矩阵

另一个特殊的方阵是正交矩阵( orthogonal matrix)。正交是矩阵的一种属性。
如果一个方阵M和它的转置矩阵的乘积是单位矩阵的话,我们就说这个矩阵是正交的( orthogonal)。反过来也是成立的。

M M T = M T M = I MM^T=M^TM=I MMT=MTM=I

一个重要的性质,即如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的。

M T = M − 1 M^T=M^{-1} MT=M1

在三维变换中我们经常会需要使用逆矩阵来求解反向的变换。

四 矩阵的几何意义(变换):

变换( transform) 指的是我们把一些数据,如点、方向矢量甚至是颜色等,通过某种方式进行转换的过程。

1.线性变换( linear transform )

线性变换 指的是那些可以保留矢量加和标量乘的变换,公式:
       f ( x ) + f ( x ) = f ( x + y ) \,\,\,\,\,\,f(x)+f(x)=f(x+y) f(x)+f(x)=f(x+y)
       k f ( x ) = f ( k x ) \,\,\,\,\,\,kf(x)=f(kx) kf(x)=f(kx)

线性变换包括:旋转,缩放 ,错切,镜像,正交投影

注意:平移不是线性变换

2.仿射変换( affine transform)

仿射変换 就是合并线性变换和平移变换的变换类型。

仿射变换可以使用一个4x4的矩阵来表示,为此,我们需要把矢量扩展到四维空间下,这就是齐次坐标空间( homogeneous space.)

3.齐次坐标(homogeneous coordinate)

由于3x3矩阵不能表示平移,所以为了计算方便,就把其扩展到4x4矩阵,并且还有把原来的三维矢量转换成四维矢量,也就是齐次坐标

分解基础变换矩阵
我们把表示纯平移,旋转,缩放的变换矩阵叫做基础变换矩阵 ,可以分解为:
在这里插入图片描述
其中,左上角的矩阵 M 3 × 3 M_{3×3} M3×3用于表示旋转和缩放, t 3 × 1 t_{3×1} t3×1用于表示平移, 0 1 × 3 0_{1×3} 01×3是零矩阵。

4.平移矩阵

把点 ( x , y , z ) (x,y,z) x,y,z在空间平移了 ( t x , t y , t z ) (t_x,t_y,t_z) tx,ty,tz个单位
在这里插入图片描述

5.缩放矩阵

把点 ( x , y , z ) (x,y,z) x,y,z 在空间缩放 k k k 倍。
如果缩放系数 k x = k y = k z k_x=k_y=k_z kx=ky=kz 我们称这样的缩放为 统一缩放,否则为非统一缩放

在这里插入图片描述

6.旋转矩阵

绕 X 轴旋转 θ \theta θ 度:
在这里插入图片描述

绕 Y 轴旋转 θ \theta θ 度:
在这里插入图片描述

绕 Z 轴旋转 θ \theta θ 度:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值