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

参考书籍: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} k1vx, 1 k v y \frac {1}{k}v_{y} k1vy, 1 k v z \frac {1}{k}v_{z} k1vz)

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} axbx, a y − b y a_{y}-b_{y} ayby, a z − b z a_{z}-b_{z} azbz)

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)=axbx+ayby+azbz

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

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

点积具有以下性质:

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

公式二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)=(aybzazby,azbxaxbz,axbyaybx)

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

  • 叉积不满足交换律,即a x bb x a
  • 叉积满足反交换律,即a x bb x a
  • 叉积不满足结合律,即(a x b)x ca 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=a1a1a1a2a2a2a3a3a3

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=ka1a1a1a2a2a2a3a3a3=ka1ka1ka1ka2ka2ka2ka3ka3ka3

3.2.2 矩阵与矩阵的乘法

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

性质:

  • 矩阵乘法不满足交换律:ABBA
  • 矩阵乘法满足结合律:(ABC = ABC

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=100010001
注意:任何矩阵乘上单位矩阵的结果仍是其本身。

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} } [672510439]T=621037549
性质:

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

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

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=M1
判断是否正交矩阵
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=[i1i2i3]i1i2i3=i1i1i2i1i3i1i1i2i2i2i3i2i1i3i2i3i3i3=I=100010001
由上式可得:
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=1i2.i2=0i3.i3=0

  • 矩阵的每一行,即 i 1 、 i 2 、 i 3 {i_{1}、i_{2}、i_{3}} i1i2i3都是单位矢量
  • 矩阵的每一行,即 i 1 、 i 2 、 i 3 {i_{1}、i_{2}、i_{3}} i1i2i3之间互相垂直
  • 如果 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} } [M33013t311w]

  • M 3 ∗ 3 {M_{3*3}} M33:用于表示 旋转 和 缩放
  • t 3 ∗ 1 {t_{3*1}} t31:用于表示 平移
  • 0 1 ∗ 3 {0_{1*3}} 013:零矩阵,即表示 [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} } 100001000010txtytz1xyz1=x+txy+tyz+tz1
使用矩阵乘法表示对一个方向矢量的平移变换
[ 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} } 100001000010txtytz1xyz0=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} } kx0000ky0000kz00001xyz0=kxxkyykzz0

  • 统一缩放(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} k1k2k3至少存在一对互不相等

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

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(θ)=10000cosθsinθ00sinθcosθ00001
把点绕着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θ0sinθ00100sinθ0cosθ00001
把点绕着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θ00sinθcosθ0000100001
辅助理解:绕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=MtranslationMrotationMscalePold

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

例如:

  • 情景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} } MrotateZMrotateXMrotateY=cosθsinθ00sinθcosθ000010000110000cosθsinθ00sinθcosθ00001cosθ0sinθ00100sinθ0cosθ00001
旋转的变换顺序: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>parentAchildren
    其中, 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>childrenBparent
    其中, 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数学基础(二)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值