您当前的位置: 首页 >  数学

野奔在山外的猫

暂无认证

  • 1浏览

    0关注

    85博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Shader笔记】Shader数学基础(一)

野奔在山外的猫 发布时间:2021-04-27 19:57:52 ,浏览量:1

参考书籍:UNITY SHADER入门精要

一、笛卡尔坐标系 Cartesian Coordinate System 1.1 二维笛卡尔坐标系

一个二维笛卡尔坐标系包含两个部分信息:

  • 一个特殊的位置——原点(整个坐标系的中心)
  • 两条经过原点且互相垂直的矢量(x/y轴),也称为基矢量。

在这里插入图片描述

1.2 三维笛卡尔坐标系

在三维笛卡尔坐标系中

  • X轴、Y轴、Z轴为该坐标系的基矢量。
  • 3个坐标轴之间互相垂直,且长度为1,即为标准正交基。
  • 3个坐标轴之间互相垂直,但长度不为1,即为正交基。

正交:互相垂直 与二维笛卡尔坐标系相似,无固定方向的坐标轴。导致出现两种不同类型的坐标系。即左手坐标系和右手坐标系,如下图所示: 在这里插入图片描述

上图两种坐标系具有旋向性

1.3 Unity的坐标系

提供了模型空间、世界空间共两种。对这两种空间,Unity选择使用的是左手坐标系。

对于观察空间(通过以摄像机为原点的坐标系观察),Unity选择是引用的是右手坐标系。

1.4 练习题
  • (1) 建模软件3D Max的默认坐标轴方向是:X轴正方向指向右方,Y轴正方向指向前方,Z轴正方向指向上方。那它是左手坐标系还是右手坐标系? 答:左手坐标系。
  • (2) 有一点坐标(0, 0, 1),在左手坐标系中,将其绕Y轴正方向旋转+90°,旋转后坐标为什么?同理在右手坐标系中,将其绕Y轴正方向旋转+90°,旋转后的坐标是什么? 答:左手坐标系中(1, 0, 0) 右手坐标系(-1, 0, 0)
二、点和矢量

点:n维空间中的一个位置(主要出现于二维、三维场景)。 矢量:n维空间中包含了 模-magnitude、方向-direction的有向线段。

具体:

  • 矢量的模 = 矢量的长度(非负数)
  • 矢量的方向:描述该矢量在空间中的指向

注:矢量常被用于表示相对某个点的偏移。

2.1 区别

矢量有两点组成。任何一个点可以表示成一个从原点出发的矢量。

其他:表示方向的矢量称为方向矢量。

2.2 矢量运算 2.2.1 矢量和标量的乘法、除法

乘法:k v v v= (k v x v_{x} vx​, k v y v_{y} vy​, k v z v_{z} vz​) 除法: 1 k \frac {1}{k} k1​ v v v = ( 1 k v x \frac {1}{k}v_{x} k1​vx​, 1 k v y \frac {1}{k}v_{y} k1​vy​, 1 k v z \frac {1}{k}v_{z} k1​vz​)

2.2.2 矢量的加减法

加法:a+b= ( a x + b x a_{x}+b_{x} ax​+bx​, a y + b y a_{y}+b_{y} ay​+by​, a z + b z a_{z}+b_{z} az​+bz​) 减法:a-b= ( a x − b x a_{x}-b_{x} ax​−bx​, a y − b y a_{y}-b_{y} ay​−by​, a z − b z a_{z}-b_{z} az​−bz​)

2.2.3 矢量的模

∣ v ∣ = v x 2 + v y 2 + v z 2 |v|=\sqrt {v_{x}^2+v_{y}^2+v_{z}^2} ∣v∣=vx2​+vy2​+vz2​ ​

2.2.4 单位矢量

解释:多数情况下,我们只关心矢量的方向而不是模。例如 计算光照模型,需要得到顶点的法线方向和光源方向。矢量的长度丝毫不需关心。故此类情况下,需要计算单位矢量。

单位矢量:模长为1的矢量(也称“归一化的矢量(normalized vector)”) 归一化:将任意非零矢量转换成单位矢量的过程。

零矢量:即(0,0,0,0) 不可被归一化。

2.2.5 矢量的点积

矢量的乘法:分为点积和叉积(即对应内积、外积)

公式一: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_{x}, a_{y}, a_{z})*(b_{x}, b_{y}, b_{z}) =a_{x}b_{x}+ a_{y}b_{y}+ a_{z}b_{z} (ax​,ay​,az​)∗(bx​,by​,bz​)=ax​bx​+ay​by​+az​bz​

注:矢量的点积满足交换律

点积的几何意义很重要,其几乎应用到图形学的各方面。最有意义的如投影。如下图所示: 在这里插入图片描述

点积具有以下性质:

  • 点积可以几何标量乘法: ( k a ) ∗ b = a ∗ ( k b ) = k ( a ∗ b ) {(ka)*b=a*(kb)=k(a*b)} (ka)∗b=a∗(kb)=k(a∗b)
  • 点积可以结合矢量加减法: a ∗ ( b + c ) = a ∗ b + a ∗ c {a*(b+c)=a*b+a*c} a∗(b+c)=a∗b+a∗c
  • 一个矢量和本身进行点积的结果,是该矢量的模的平方: v ∗ v = v x ∗ v x + v y ∗ v y = ∣ v ∣ 2 {v*v=v_x*v_x+v_y*v_y=|v|^2} v∗v=vx​∗vx​+vy​∗vy​=∣v∣2

公式二:a ∗ * ∗ b=|a||b| cos ⁡ θ {\cos θ} cosθ

记斜边b的模长为1,如图所示 : 在这里插入图片描述

  • a ∗ * ∗ b = 直 角 边 斜 边 \frac{直角边}{斜边} 斜边直角边​ = cos ⁡ θ {\cos θ} cosθ
  • θ = arcsin ⁡ {θ = \arcsin} θ=arcsin(a ∗ * ∗ b)
2.2.6 矢量的叉积

【理解】矢量的叉积结果是一个矢量。

  • 叉积的表示符号 “x”

公式: a x b = ( a x , a y , a z ) {(a_x, a_y, a_z)} (ax​,ay​,az​) X ( b x , b y , b z ) = ( a y b z − a z b y , a z b x − a x b z , a x b y − a y b x ) (b_x,b_y,b_z)=(a_yb_z-a_zb_y,a_zb_x-a_xb_z,a_xb_y-a_yb_x) (bx​,by​,bz​)=(ay​bz​−az​by​,az​bx​−ax​bz​,ax​by​−ay​bx​)

如下图所示为理解图: 在这里插入图片描述 更多注意:

  • 叉积不满足交换律,即a x b ≠ b x a
  • 叉积满足反交换律,即a x b ≠ –(b x a)
  • 叉积不满足结合律,即(a x b)x c ≠ a x (b x c)

叉积的应用:判断三角面片的朝向或计算矢量。

三、矩阵

特点:网格结构,具有行列之分。即行矩阵、列矩阵。

如下图所示: M = [ a 1 a 2 a 3 a 1 a 2 a 3 a 1 a 2 a 3 ] M=\begin{bmatrix} a_1&a_2&a_3&\\ a_1&a_2&a_3&\\a_1&a_2&a_3&\\ \end{bmatrix} M=⎣⎡​a1​a1​a1​​a2​a2​a2​​a3​a3​a3​​​⎦⎤​

3.1 与矢量的关系

答:矩阵由多个或至少一个矢量组成。

3.2 矩阵运算 3.2.1 矩阵与标量的乘法

与矢量类似,矩阵与标量的乘积是一个相同维度的矩阵。

k M = M k = k [ a 1 a 2 a 3 a 1 a 2 a 3 a 1 a 2 a 3 ] = [ k a 1 k a 2 k a 3 k a 1 k a 2 k a 3 k a 1 k a 2 k a 3 ] {kM=Mk=k \begin{bmatrix} a_1&a_2&a_3&\\ a_1&a_2&a_3&\\ a_1&a_2&a_3&\\ \end{bmatrix}= \begin{bmatrix} ka_1&ka_2&ka_3&\\ ka_1&ka_2&ka_3&\\ ka_1&ka_2&ka_3&\\ \end{bmatrix}} kM=Mk=k⎣⎡​a1​a1​a1​​a2​a2​a2​​a3​a3​a3​​​⎦⎤​=⎣⎡​ka1​ka1​ka1​​ka2​ka2​ka2​​ka3​ka3​ka3​​​⎦⎤​

3.2.2 矩阵与矩阵的乘法

已知A矩阵为 r x n 维,B矩阵为 n x c 维,则 A x B 矩阵为 r x c 维。

性质:

  • 矩阵乘法不满足交换律:AB ≠ BA
  • 矩阵乘法满足结合律:(AB)C = A(BC)
3.3 特殊矩阵 3.3.1 方块矩阵 square matrix

简称:方阵。指行、列数目相等的矩阵。三维渲染中常用3x3、4x4的方阵。

对角元素:行列号相等的元素(主斜对角元素)。 对角矩阵:除对角元素外的其他元素均为0的矩阵。

3.3.2 单位矩阵 identity matrix

简称:特殊的对角矩阵。主对角元素均为1。 符号表示: I n {I_n} In​ (n指维数)

如下所示为一个3x3的单位矩阵: I 3 = [ 1 0 0 0 1 0 0 0 1 ] {I_3= \begin{bmatrix} 1&0&0&\\ 0&1&0&\\ 0&0&1&\\ \end{bmatrix} } I3​=⎣⎡​100​010​001​​⎦⎤​ 注意:任何矩阵乘上单位矩阵的结果仍是其本身。

3.3.3 转置矩阵 transposed matrix

理解:对原矩阵的行列互换位置。

将原矩阵的第m行第n列置换至第n行第m列下。如下图所示: [ 6 2 10 3 7 5 4 9 ] T = [ 6 7 2 5 10 4 3 9 ] { \begin{bmatrix} 6&2&10&3\\ 7&5&4&9\\ \end{bmatrix}^T= \begin{bmatrix} 6&7\\ 2&5\\ 10&4\\ 3&9\\ \end{bmatrix} } [67​25​104​39​]T=⎣⎢⎢⎡​62103​7549​⎦⎥⎥⎤​ 性质:

  • 矩阵转置的转置等于原矩阵: ( M T ) T = M {(M^T)^T}=M (MT)T=M
  • 矩阵串接的转置,等于反向串接各个矩阵的转置: ( A B ) T = B T A T {(AB)^T=B^TA^T } (AB)T=BTAT
3.3.4 逆矩阵 inverse matrix

前提:该矩阵必须是一个方阵。

性质:

  • 单位矩阵的逆矩阵是单位矩阵: I − 1 = I {I^{-1}=I} I−1=I
  • 矩阵乘上自身的逆矩阵等于单位矩阵。
  • 所有元素均为0的矩阵没有逆矩阵。
  • 逆矩阵的逆矩阵是原矩阵本身(前提可逆): ( M − 1 ) − 1 = M {(M^{-1})^{-1}=M} (M−1)−1=M
  • 转置矩阵的逆矩阵是逆矩阵的转置: ( M T ) − 1 = ( M − 1 ) T {(M^{T})^{-1}=(M^{-1})^{T}} (MT)−1=(M−1)T
  • 矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵: ( A B ) − 1 = B − 1 A − 1 {(AB)^{-1}=B^{-1}A^{-1}} (AB)−1=B−1A−1

矩阵具有逆矩阵:可逆的/非奇异的 矩阵不具有逆矩阵:不可逆的/奇异的

3.3.5 正交矩阵 orthogonal matrix

正交是矩阵的一种属性。

如果一个方阵M和它的转置矩阵的乘积是单位矩阵,则说这个方阵是正交。反之成立。 M M T = M T M = I { MM^T=M^TM=I } MMT=MTM=I 如果一个矩阵是正交的,则其转置矩阵和逆矩阵是一样的。 M T = M − 1 { M^T=M^{-1} } MT=M−1 判断是否正交矩阵: M M T = [ i 1 i 2 i 3 ] [ i 1 i 2 i 3 ] = [ i 1 i 1 i 1 i 2 i 1 i 3 i 2 i 1 i 2 i 2 i 2 i 3 i 3 i 1 i 3 i 2 i 3 i 3 ] = I = [ 1 0 0 0 1 0 0 0 1 ] {MM^T= \begin{bmatrix} i_{1}&i_{2}&i_{3}\\ \end{bmatrix} \begin{bmatrix} i_{1}\\ i_{2}\\ i_{3}\\ \end{bmatrix} =\begin{bmatrix} i_{1}i_{1}&i_{1}i_{2}&i_{1}i_{3}\\ i_{2}i_{1}&i_{2}i_{2}&i_{2}i_{3}\\ i_{3}i_{1}&i_{3}i_{2}&i_{3}i_{3}\\ \end{bmatrix} =I= \begin{bmatrix} 1&0&0&\\ 0&1&0&\\ 0&0&1&\\ \end{bmatrix}} MMT=[i1​​i2​​i3​​]⎣⎡​i1​i2​i3​​⎦⎤​=⎣⎡​i1​i1​i2​i1​i3​i1​​i1​i2​i2​i2​i3​i2​​i1​i3​i2​i3​i3​i3​​⎦⎤​=I=⎣⎡​100​010​001​​⎦⎤​ 由上式可得: i 1 . i 1 = 1 , i 2 . i 2 = 0 , i 3 . i 3 = 0 {i_1.i_1=1,i_2.i_2=0 ,i_3.i_3=0} i1​.i1​=1,i2​.i2​=0,i3​.i3​=0

  • 矩阵的每一行,即 i 1 、 i 2 、 i 3 {i_{1}、i_{2}、i_{3}} i1​、i2​、i3​都是单位矢量
  • 矩阵的每一行,即 i 1 、 i 2 、 i 3 {i_{1}、i_{2}、i_{3}} i1​、i2​、i3​之间互相垂直
  • 如果 M {M} M是正交矩阵,同理 M T {M^T} MT也是正交矩阵

正交基:基矢量之间互相垂直 标准正交基:基矢量均为1的正交基

3.4 行矩阵与列矩阵

在Unity中,常规做法是将矢量放在矩阵的右侧。即把矢量转换成列矩阵进行运算。例如: C B A v = ( C ( B ( A v ) ) ) {CBAv=(C(B(Av)))} CBAv=(C(B(Av)))。 使用列向量的结果是,阅读顺序从右至左。

四、矩阵的几何意义:变换 4.1 什么是变换?

答:把一些数据(如点、方向矢量设置颜色等)通过某种方式进行转换的过程。

常见变换类型:

4.2 线性变换 linear transform

描述:可以保留 矢量加 和 标量乘 的变换。

条件一: f ( x ) + f ( y ) = f ( x + y ) {f(x)+f(y)=f(x+y)} f(x)+f(y)=f(x+y) 条件二: k f ( x ) = f ( k x ) {kf(x)=f(kx)} kf(x)=f(kx)

  • 缩放 scale 条件: f ( x ) = 2 x {f(x)=2x} f(x)=2x
  • 旋转 rotation
  • 错切 shear
  • 镜像 mirroring/reflection
  • 正交投影 orthographic projection
4.3 平移变换

f ( x ) = x + ( 1 , 2 , 3 ) {f(x)=x+(1,2,3)} f(x)=x+(1,2,3) 满足标量乘法,但不满足矢量加法。令 x = ( 1 , 1 , 1 ) {x=(1,1,1)} x=(1,1,1),则结果 f ( x + x ) = ( 3 , 4 , 5 ) f ( x ) + f ( x ) = ( 4 , 6 , 8 ) {f(x+x)=(3,4,5)}\\{f(x)+f(x)=(4,6,8)} f(x+x)=(3,4,5)f(x)+f(x)=(4,6,8) 由于两个运算的结果不一样,使得我们不能用一个3x3矩阵来表示一个平移变换。就出现了仿射矩阵。

仿射矩阵:合并线性变换和平移变换的变换类型。使用4x4矩阵表示。

4.4 齐次坐标空间

四维空间,即为齐次坐标空间。

4.4.1 齐次坐标

是一个四维矢量。例如 (x,y,z,w)

  • 从三维转为四维只需设置w=1
  • 四维坐标对一个点进行变化,如旋转、缩放、平移。只需设置w=0。
4.4.2 分解基础坐标矩阵

基础变换矩阵:纯平移,纯旋转,纯缩放的变换矩阵。 [ M 3 ∗ 3 t 3 ∗ 1 0 1 ∗ 3 1 w ] { \begin{bmatrix} M_{3*3}&t_{3*1}\\ 0_{1*3}&1w \end{bmatrix} } [M3∗3​01∗3​​t3∗1​1w​]

  • M 3 ∗ 3 {M_{3*3}} M3∗3​:用于表示 旋转 和 缩放
  • t 3 ∗ 1 {t_{3*1}} t3∗1​:用于表示 平移
  • 0 1 ∗ 3 {0_{1*3}} 01∗3​:零矩阵,即表示 [0 0 0]
  • 1:标量1
4.4.3 平移矩阵

使用矩阵乘法表示对一个点的平移变换 [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 1 ] = [ x + t x y + t y z + t z 1 ] { \begin{bmatrix} 1&0&0&t_x\\ 0&1&0&t_y\\ 0&0&1&t_z\\ 0&0&0&1\\ \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 1\\ \end{bmatrix}= \begin{bmatrix} x+t_x\\ y+t_y\\ z+t_z\\ 1\\ \end{bmatrix} } ⎣⎢⎢⎡​1000​0100​0010​tx​ty​tz​1​⎦⎥⎥⎤​⎣⎢⎢⎡​xyz1​⎦⎥⎥⎤​=⎣⎢⎢⎡​x+tx​y+ty​z+tz​1​⎦⎥⎥⎤​ 使用矩阵乘法表示对一个方向矢量的平移变换 [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 0 ] = [ x y z 0 ] { \begin{bmatrix} 1&0&0&t_x\\ 0&1&0&t_y\\ 0&0&1&t_z\\ 0&0&0&1\\ \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 0\\ \end{bmatrix}= \begin{bmatrix} x\\ y\\ z\\ 0\\ \end{bmatrix} } ⎣⎢⎢⎡​1000​0100​0010​tx​ty​tz​1​⎦⎥⎥⎤​⎣⎢⎢⎡​xyz0​⎦⎥⎥⎤​=⎣⎢⎢⎡​xyz0​⎦⎥⎥⎤​ 注:平移矩阵并不是一个正交矩阵。

4.4.4 缩放矩阵

[ k x 0 0 0 0 k y 0 0 0 0 k z 0 0 0 0 1 ] [ x y z 0 ] = [ k x x k y y k z z 0 ] { \begin{bmatrix} k_x&0&0&0\\ 0&k_y&0&0\\ 0&0&k_z&0\\ 0&0&0&1\\ \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 0\\ \end{bmatrix}= \begin{bmatrix} k_xx\\ k_yy\\ k_zz\\ 0\\ \end{bmatrix} } ⎣⎢⎢⎡​kx​000​0ky​00​00kz​0​0001​⎦⎥⎥⎤​⎣⎢⎢⎡​xyz0​⎦⎥⎥⎤​=⎣⎢⎢⎡​kx​xky​ykz​z0​⎦⎥⎥⎤​

  • 统一缩放(uniform scale):缩放系数 k 1 = k 2 = k 3 {k_1=k_2=k_3} k1​=k2​=k3​
  • 非统一缩放(nonuniform scale): k 1 , k 2 , k 3 {k_1,k_2,k_3} k1​,k2​,k3​至少存在一对互不相等

注:缩放矩阵一般不是正交矩阵。

4.4.5 旋转矩阵

把点绕着x轴旋转θ度: R x ( θ ) = [ 1 0 0 0 0 c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 ] { R_x(θ)= \begin{bmatrix} 1&0&0&0\\ 0&cosθ&-sinθ&0\\ 0&sinθ&cosθ&0\\ 0&0&0&1\\ \end{bmatrix} } Rx​(θ)=⎣⎢⎢⎡​1000​0cosθsinθ0​0−sinθcosθ0​0001​⎦⎥⎥⎤​ 把点绕着y轴旋转θ度: R y ( θ ) = [ c o s θ 0 s i n θ 0 0 1 0 0 − s i n θ 0 c o s θ 0 0 0 0 1 ] { R_y(θ)= \begin{bmatrix} cosθ&0&sinθ&0\\ 0&1&0&0\\ -sinθ&0&cosθ&0\\ 0&0&0&1\\ \end{bmatrix} } Ry​(θ)=⎣⎢⎢⎡​cosθ0−sinθ0​0100​sinθ0cosθ0​0001​⎦⎥⎥⎤​ 把点绕着z轴旋转θ度: R z ( θ ) = [ c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 0 0 0 0 1 ] { R_z(θ)= \begin{bmatrix} cosθ&-sinθ&0&0\\ sinθ&cosθ&0&0\\ 0&0&1&0\\ 0&0&0&1\\ \end{bmatrix} } Rz​(θ)=⎣⎢⎢⎡​cosθsinθ00​−sinθcosθ00​0010​0001​⎦⎥⎥⎤​ 辅助理解:绕X轴旋转则X轴数值不变化【cosθ=1】,YZ数值变化。

旋转矩阵的逆矩阵是旋转相反角度得到的矩阵变化。即旋转矩阵是正交矩阵。且多个旋转矩阵之间的串联同样是正交的。

4.4.6 复合变换

解释:将平移、旋转、缩放组合起来形成复杂变化的过程。

1.复合变换计算公式

P n e w = M t r a n s l a t i o n M r o t a t i o n M s c a l e P o l d {P_{new}=M_{translation}M_{rotation}M_{scale}P_{old}} Pnew​=Mtranslation​Mrotation​Mscale​Pold​

注意:阅读顺序从右至左。即先进行缩放变换,在进行旋转变换,最后进行平移变换。须注意的是,变换的结果以来于变换顺序。由于矩阵不满足交换律,结果将不一样。

例如:

  • 情景1:人前进一步然后左转,记录当前位置。
  • 情景2:人左转后再前进一步,记录当前位置。

经比较两种情景的位置是不一样的。

绝大多数情况下,约定变换顺序为 先缩放、再旋转、最后平移

2.旋转变换矩阵公式

M r o t a t e Z M r o t a t e X M r o t a t e Y = [ c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 0 0 0 0 1 ] [ 1 0 0 0 0 c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 ] [ c o s θ 0 s i n θ 0 0 1 0 0 − s i n θ 0 c o s θ 0 0 0 0 1 ] { M_{rotateZ}M_{rotateX}M_{rotateY}= \begin{bmatrix} cosθ&-sinθ&0&0\\ sinθ&cosθ&0&0\\ 0&0&1&0\\ 0&0&0&1\\ \end{bmatrix} \begin{bmatrix} 1&0&0&0\\ 0&cosθ&-sinθ&0\\ 0&sinθ&cosθ&0\\ 0&0&0&1\\ \end{bmatrix} \begin{bmatrix} cosθ&0&sinθ&0\\ 0&1&0&0\\ -sinθ&0&cosθ&0\\ 0&0&0&1\\ \end{bmatrix} } MrotateZ​MrotateX​MrotateY​=⎣⎢⎢⎡​cosθsinθ00​−sinθcosθ00​0010​0001​⎦⎥⎥⎤​⎣⎢⎢⎡​1000​0cosθsinθ0​0−sinθcosθ0​0001​⎦⎥⎥⎤​⎣⎢⎢⎡​cosθ0−sinθ0​0100​sinθ0cosθ0​0001​⎦⎥⎥⎤​ 旋转的变换顺序:zxy

旋转使用的是坐标系,给定一个旋转顺序(如zxy),以及对应的旋转角度 ( θ x , θ y , θ z ) {(θ_x,θ_y,θ_z)} (θx​,θy​,θz​),有两种坐标系选择:

  • 纵坐标系E下的z轴旋转 θ z θ_z θz​,纵坐标系E下的y轴旋转 θ y θ_y θy​,纵坐标系E下的x轴旋转 θ x θ_x θx​,即进行一次旋转时不一起旋转当前坐标系。
  • 纵坐标系E下的z轴旋转 θ z θ_z θz​,在坐标系E下再绕Z轴旋转 θ z θ_z θz​后的新坐标系 E ‘ E^{`} E‘下的y轴旋转 θ y θ_y θy​,在坐标系 E ‘ ‘ E^{``} E‘‘下再绕y轴旋转 θ y θ_y θy​后的新坐标系 E ‘ ‘ E^{``} E‘‘下 的x轴旋转 θ x θ_x θx​,即在旋转时,把坐标系一起转动。
4.5 坐标空间 4.5.1 坐标空间的变换

实质:父空间与子空间之间对点和矢量的变换。

例如:现有父坐标空间P与子坐标空间C。已知父坐标空间中子坐标空间的原点位置与3个单位坐标轴。需求如下:

  • 子坐标空间下的点或矢量 A c h i l d r e n A_{children} Achildren​转换到父坐标空间下表示 A p a r e n t A_{parent} Aparent​ A p a r e n t = M c h i l d r e n − > p a r e n t A c h i l d r e n {A_{parent}=M_{{children->parent}} A_{children}} Aparent​=Mchildren−>parent​Achildren​ 其中, M c h i l d r e n − > p a r e n t M_{{children->parent}} Mchildren−>parent​表示从子坐标空间到父坐标空间的变换矩阵。

  • 父坐标空间下的点或矢量 B p a r e n t B_{parent} Bparent​转换到子坐标空间下表示 B c h i l d r e n B_{children} Bchildren​ B c h i l d r e n = M p a r e n t − > c h i l d r e n B p a r e n t {B_{children}=M_{{parent->children}} B_{parent}} Bchildren​=Mparent−>children​Bparent​ 其中, M p a r e n t − > c h i l d r e n M_{{parent->children}} Mparent−>children​表示从父坐标空间到子坐标空间的变换矩阵。

4.5.2 顶点的坐标空间变换 1.模型空间(对象空间/局部空间)

原点和坐标轴:由美术人员通过建模软件确定。通常位于模型的中心。

例如,某模型在游戏场景的坐标为(2,3,2)。扩展至齐次坐标系下为(2,3,2,1)。

2.世界空间 world space
  • 最大的空间坐标系(特殊),可以无限大。
  • 可被用于描述绝对位置-世界坐标系中的位置。
  • xyz轴固定

顶点变换的第一步:将顶点坐标从模型空间变换到世界空间中。(模型变换)

4.5.3 观察空间 view space
  • 又称"摄像机空间"(camera space),决定着我们渲染游戏所使用的的视角。
  • 位于观察空间中的坐标原点

注意:

  • 调用Camera.cameraToWorldMatrixCamera.worldToCameraMatrix等接口自行计算某模型在观察空间中的位置,需注意左右手坐标系间的差异。
  • 观察空间(三维)与 屏幕空间(二维)是不同的,需投影转换。

顶点变换的第二步:将顶点坐标从世界空间变换到观察空间中。(观察变化)

4.5.4 裁剪空间 clip space

又称"齐次裁剪空间"。用于变换的矩阵叫做裁剪矩阵(clip matrix),也叫投影矩阵(projection matrix)。

目标:由视椎体决定,便利化对渲染图源进行裁剪。

续文:【Shader笔记】 Shader数学基础(二)

关注
打赏
1659777066
查看更多评论
立即登录/注册

微信扫码登录

0.0691s