Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2170.00元

逆矩阵计算及性质

--------------------------

特性

M 变化之后 可以用 M^(-1) 变化回去;

(M^(-1))^(-1) = M;

I^(-1) = I;

(M^T)^(-1) = ( M^(-1) )^T;

(AB)^(-1) = B^(-1) A^(-1);

(M_1 M_2 ... M_n)^(-1) = (M_n)^(-1) (M_(n-1))^(-1) ... (M_1)^(-1);

[展开全文]
百里奚 · 2019-04-14 · 0

正交矩阵

--------------------------

定义:MM^(T) = I 

如果 M 是正交矩阵,那么 MM^(T) = I 

结合之前的 M(M^(-1)) = I

那么 M^(T) = M^(-1)

===========

验证一个矩阵是否为正交矩阵,推导

1) 展开 M M^(T) = I

2) 计算 I 的值

3) 替换M 为三个向量 r_1, r_2, 和 r_3

4) 根具 1)、2) 和 3) 可得,再找出重复和特殊的

5) 得出结论

      a. 只有当 r_1, r_2 和 r_3 为单位向量时,点积才为1

      b. r_1 ⊥ r_2 ⊥ r_3

      c. 矩阵每行为单位向量

      d. 矩阵所有行互相垂直

 

[展开全文]
百里奚 · 2019-04-12 · 0

在shader中进来少使用if else

嵌套尽量不要去使用

[展开全文]
jhchn · 2020-12-15 · 0

正交基与标准正交基

--------------------------

一组正交基:基矢量直接互相垂直

标准正交基:给个基矢量长度为1

正交矩阵是一组标准正交基

如果使用一组正交基构建矩阵,不一定是正交矩阵

===========

施密特正交化

施密特正交化(Schmidt orthogonalization)是求欧氏空间正交基的一种方法。从欧氏空间任意线性无关的向量组α1,α2,……,αm出发,求得正交向量组β1,β2,……,βm,使由α1,α2,……,αm与向量组β1,β2,……,βm等价,再将正交向量组中每个向量经过单位化,就得到一个标准正交向量组,这种方法称为施密特正交化。

Reference:

百度百科, 2018, 施密特正交化, Link: https://baike.baidu.com/item/%E6%96%BD%E5%AF%86%E7%89%B9%E6%AD%A3%E4%BA%A4%E5%8C%96/756386?fr=aladdin [Accessed Date: 2018/04/12]

 

[展开全文]
百里奚 · 2019-04-12 · 0

齐次空间

--------------------------

对于一个2D的点 ( x, y ),在齐次空间中表示为 (x, y, w),那么2D点的真实表示发生为 2D(x/w, y/w )

在2D中 如果w = 0, 那么表示无限远的一个点

对于一个3D的点 ( x, y, z ),在齐次空间中表示为 (x, y, z, w),那么3D点的真实表示发生为 3D(x/w, y/w, z/w)

在3D中 如果w = 0, 那么表示无限远的一个点

 

======

目的:为了之后做平移点变换

[展开全文]
百里奚 · 2019-04-12 · 0

平移矩阵

--------------------------

2D齐次坐标 (x, y, w) 3x3阶

3D齐次坐标 (x, y, z, w) 4x4阶

==================

4x4 阶平移矩阵

1) 一般三维坐标

2) 加入 w 变为齐次坐标

3) 转换矩阵为单位矩阵并加入 Δx, Δy和Δz来实现平移

 

[展开全文]
百里奚 · 2019-04-12 · 0

三维任意轴N缩放K的缩放矩阵:

(K-1)*Nx*Nx+1  (k-1)*Ny*Nx     (K-1)*Nz*Nx

(K-1)*Nx*Ny     (K-1)*Ny*Ny+1  (K-1)*Nz*Ny

(K-1)*Nx*Nz    (K-1)*Ny*NZ     (K-1)*Nz*Nz+1

[展开全文]
huiyue · 2019-04-02 · 0

旋转矩阵与平移矩阵结合

--------------------------

1) 已知旋转矩阵 R 和平移矩阵 T

2) 根据公式,可得矩阵

3) 如果把 [Δx, Δy, Δz] = t, 那么可得

[展开全文]
百里奚 · 2019-04-12 · 0

变换分类

--------------------------

线性变换

F(a + b) = F(a) + F(b)

F(ka) = kF(a)

============

F(a) = am        // m为任意方阵

F(a + b) = (a + b) m

              = am + bm

              = F(a) + F(b)

 

F( ka ) = (ka) M

           = k (am)

           = k F(a)

 

============

如果 F(0) = a, 且 a ≠ 0, 那么 F不可能是线性变换

F(k0) = a          F(k0) ≠ kF(0)

 

线性变换不会出现平移,因为原点位置上不会变化

============

反射变换

反射变换是指线性变换后接着平移

Vector V

Matrix M

V' = VM + b        //反射变换 

============

可逆变换

{F}^{-1}\, (F(a))\, =\, a

V' = VM               V = V'M^(-1)

============

等角变换

变换前后夹角大小方向不变

============

正交变换

============

刚体变换

============

[展开全文]
百里奚 · 2019-04-12 · 0

向任意向量投影的投影矩阵

1-Nx*Nx    -Ny*Nx

-Nx*Ny       1-Ny*Ny

向任意平面投影的3D投影矩阵

1-Nx*Nx        -Ny*Nx        -Nz*Nx

-Nx*Ny          1-Ny*Ny      -Nz*Ny

-Nx*Nz          -Ny*Nz         1-Nz*Nz

 

 

[展开全文]
huiyue · 2019-04-02 · 0

一般仿射变换

--------------------------

当做 绕不通过原点的轴旋转 或 沿不穿过原点的平面缩放 等类似的题目时

 

1) P向量使用平移矩阵T移到原点

2) P向量使用矩阵R进行线性变换

3) P向量使用矩阵T的逆矩阵T^(-1)移到之前位置

 

P T R T^(-1)

平移只影响到了4x4阶矩阵的最后一行的元素,而对它的其他的旋转矩阵或者线性矩阵没有任何影响

==============

判断矩阵是否可逆: |M| ≠ 0

奇异矩阵/不可逆矩阵:一个不可逆矩阵 |M| = 0

 

[展开全文]
百里奚 · 2019-04-13 · 0

平面投影

--------------------------

结合初中知识 小孔成像 得出结论

当物体在原点前,投影平面在原点后,距离为d

 

       ┌   x   ┐                ┌   x   ┐      ┌   -dx/z   ┐   

p  = │   y   │ = >   p' = │   y   │  =  │   -dy/z   │

       └   z   ┘                └   z   ┘      └     -d      ┘

 

当投影平面也在原点前,距离为d时

 

        ┌   x   ┐      ┌   -dx/z   ┐   

 p' = │   y   │  =  │   -dy/z   │

        └   z   ┘      └     -d      ┘

[展开全文]
百里奚 · 2019-04-13 · 0

本节课需要牢记,漫反射公式。

灯光颜色*物体基本颜色*数值在0到1范围大小的{世界空间坐标下并归一化的(法线向量与光源向量的 点乘积)}

 

[展开全文]
pilishen000 · 2020-03-12 · 0

Unity中透视投影矩阵

--------------------------

[展开全文]
百里奚 · 2019-04-13 · 0

渲染透明物是需要关闭深度写入,保留深度测试

渲染循序为,先渲染不透明物体,开启深度写入,再渲染透明物体,关闭深度写入

 

 

[展开全文]
冯天翔 · 2019-09-02 · 0

学数学头大啊,不想学啊,但是又不能不学,TAT

 

1/r   0    0    0

0    1/t    0    0

0    0   -2/fn  (-f+n)/(f-n)

0    0    0    0

[展开全文]
百里奚 · 2019-04-13 · 0

1.有几个顶点就跑几个顶点着色器。

2.顶点着色器的数据来源于显存中。

3.顶点着色器功能,坐标变换以及顶点光照。

5.消耗性能低。

6.可以有一些储存,例如算法线,会在顶点着色器中算。

 

模型空间转到齐次裁剪空间有三个步骤,

1.坐标由中心坐标转为世界坐标

2.转到观察空间,以摄像机为原点

3.做一个投影变化,转到齐次裁剪空间(相当于长宽高为1的立方体的空间)

 

裁剪

在齐次裁剪空间内进行裁剪

如果完全在视野内的就不用管,直接到下个流程。

如果外圈在视野外的就舍弃掉。

如果部分在视野内,部分在视野外的,则需要进行裁剪。在视野范围外的给裁剪掉。

 

屏幕映射:

将裁剪后的齐次坐标转换到屏幕坐标,屏幕坐标是一个二位坐标

在映射过程中Z轴是不做处理的,屏幕坐标系和Z轴构成了窗口坐标系,然后进行下一步的光栅话处理。

OpenGL和direcX的坐标是不一样的。

[展开全文]
jhchn · 2020-02-21 · 0

矩阵知识总结

--------------------------

矩阵乘法特点:

      1) MI = IM = M       //矩阵乘以单位矩阵 等于 单位矩阵乘以矩阵

      2) AB ≠ BA           //矩阵不满足交换律

      3) (AB)C = A(BC)   //矩阵满足结合律

      4) (kA)B = k(AB) = A(kB) //矩阵满足线性运算律

      5) (vA)B = v(AB)     //满足向量运算的结合律

      6) (AB)^T = B^T A^T // 矩阵AB的转置 等于 矩阵B的转置乘以矩阵A的转置

      7) (M_1 M_2 ... M_n)^T = (M_n)^T (M_(n-1))^T ... (M_1)^T

==========================================================

向量与矩阵相乘

      1) 行向量只能左乘矩阵      //适用于DX

      2) 列向量只能右乘矩阵      //适用于OpenGL

==========================================================

矩阵旋转

      二维旋转矩阵

                       ┌ p' ┐  ┌ Cosθ   Sinθ  ┐

            R(θ) = └ q' ┘  └ -Sinθ   Cosθ ┘

      三维旋转矩阵

 

           X轴旋转

                            ┌ p' ┐  ┌  1            0           0   ┐

                 R(θ) = │ q' │  │  0       Cosθ     Sinθ  │

                            └ r'  ┘  └  0       -Sinθ     Cosθ ┘

 

           Y轴旋转

                            ┌ p' ┐  ┌ Cosθ     0      -Sinθ ┐

                 R(θ) = │ q' │  │   0          1            0 │

                            └ r'  ┘  └  Sinθ      0     Cosθ ┘

 

           Z轴旋转

                            ┌ p' ┐  ┌ Cosθ   Sinθ      0 ┐

                 R(θ) = │ q' │  │ -Sinθ   Cosθ     0 │

                            └ r'  ┘  └    0          0        1 ┘

 

           任意n轴旋转矩阵

                                ┌ p' ┐      ┌   (n_x)^2(1-Cosθ)+Cosθ        n_xn_y(1-Cosθ)-n_zSinθ      n_xn_z(1-Cosθ)+n_ySinθ ┐

                 R(n,θ) =  │ q' │  =  │ n_xn_y(1-Cosθ)+n_zSinθ     (n_y)^2(1-Cosθ)+Cosθ         n_yn_z(1-Cosθ)-n_xSinθ  │

                                └ r'  ┘      └  n_xn_z(1-Cosθ)-n_ySinθ      n_yn_z(1-Cosθ)+n_xSinθ      (n_z)^2(1-Cosθ)+Cosθ    ┘

==========================================================

矩阵缩放

      二维沿轴缩放矩阵

                                    ┌ k_x      0    ┐ 

              S(k_x, k_y) = └   0      k_y  ┘

 

      三维沿轴缩放矩阵

 

                                          ┌ k_x      0        0    ┐ 

            S(k_x, k_y, k_z) = │   0      k_y      0    │

                                          └   0        0      k_z  ┘

      二维沿任意方向缩放矩阵

                          ┌ p' ┐      ┌ 1 + (k-1)(n_x)^2     (k-1)n_xn_y     ┐

            S(n,k) = └ q' ┘  =  └    (k-1)n_xn_y      1 + (k-1)(n_y)^2 ┘

            note:缩放系数k,缩放轴n;

      三维沿任意方向缩放矩阵

                          ┌ p' ┐      ┌ 1 + (k-1)(n_x)^2     (k-1)n_xn_y          (k-1)n_xn_z    ┐

            S(n,k) = │ q' │  =  │    (k-1)n_xn_y      1 + (k-1)(n_y)^2     (k-1)n_yn_z     │

                          └ r' ┘      └     (k-1)n_xn_z        (k-1)n_zn_y      1 + (k-1)(n_z)^2  ┘

==========================================================

正交投影

      二维

            向X轴投影

                                                  ┌  1    0  ┐

                  p_x = S([ 0, 1 ], 0) =└  0    0  ┘

 

            向Y轴投影

                                                  ┌  0    0  ┐

                  p_y = S([ 1, 0 ], 0) =└  0    1  ┘

            

            向任意直线投影的2D矩阵

                                           ┌  1 - (n_x)^2    -n_x n_y  ┐

                  p(n) = S(n,0) = └   -n_x n_y      1 - (n_y)^2  ┘

      三维

            向XY平面投影

                                                      ┌  1    0    0  ┐

                  p_xy = S([0, 0, 1], 0) =│  0    1    0  │

                                                      └  0    0    0  ┘

            向XZ平面投影

                                                      ┌  1    0    0  ┐

                  p_xz = S([0, 1, 0], 0) =│  0    0    0  │

                                                      └  0    0    1  ┘

            向YZ平面投影

                                                      ┌  0    0    0  ┐

                  p_yz = S([1, 0, 0], 0) =│  0    1    0  │

                                                      └  0    0    1  ┘

            向任意平面投影的3D矩阵

                                           ┌  1 - (n_x)^2    -n_x n_y     -n_x n_z   ┐

                  p(n) = S(n,0) = │   -n_x n_y      1 - (n_y)^2    -n_y n_z  │

                                           └  -n_x n_z       -n_z n_y    1- (n_z)^2   ┘

==========================================================

切变

      2D切变矩阵

                           ┌  1    0  ┐ 

            H_x(s) = └  s    1  ┘

 

                           ┌  1    s  ┐ 

            H_y(s) = └  0    1  ┘

 

      3D切变矩阵

 

                                 ┌  1    0    0  ┐ 

            H_(xy)(s,t) = │  0    1    0  │

                                 └  s    t    1   ┘ 

 

                                 ┌  1    0    0  ┐ 

            H_(xz)(s,t) = │  s    1    t   │

                                 └  0    0    1  ┘ 

 

                                 ┌  1    s    t   ┐ 

            H_(yz)(s,t) = │  0    1    0  │

                                 └  0    0    1  ┘ 

 

==========================================================

行列式

      e.g.

                    |  m_11    m_12  | 

            |M| = |  m_21    m_22  |  =  m_11m_22 - m_12m_21

      e.g.2

                     |  m_11    m_12    m_13  | 

            |M| = |  m_21    m_22    m_23  | 

                     |  m_31    m_32    m_33  | 

       

            |M| = m_11m_22m33 +m_12m_23m_32 + m_13m_21m_32 - m_13m_22m_31 - m_32m_23m_11 - m_21m_12m_33 ;

 

[展开全文]
百里奚 · 2019-04-13 · 0

续矩阵知识总结-变换总结

--------------------------

行列式性质

1. 行列式与它的转制的值相等 D^T = D

2. 互换行列式两行(列),行列式变号

3. 行列式某一行(列)中所有元素都乘以同一数k,等于用k乘此行列式

4. 如果行列式中如果有两行(列)元素成比例,行列式D = 0 

5. 若行列式中某一行(列)的元素都是两数之和,可以把行列式分开写

6. 把行列式某一行(列)的各元素乘以同一数后加到另一行(列)对应元素上,行列不变

==========================================================

代数余子式

A = (-1)^(i+j) M_(ij)

一个n阶行列式,如果其中第i行所有元素除(i,j)元以外都是0,则这个行列式等于 a_(ij) 与它代数余子式的乘积。

D = a_(ij) A_(ij)

行列式等于它的任意一行(列)的各个元素与其对应的代数余子式乘积之和。

D = a_(i1) A_(i1) + a_(i2) A_(i2) + ... + a_(in) A_(in)     (i = 1,2, ... , n)

D = a_(1j) A_(1j) + a_(2j) A_(2j) + ... + a_(nj) A_(nj)     (j = 1,2, ... , n)

==========================================================

逆矩阵

M(M^(-1)) = M^(-1) M = I

逆矩阵计算公式

M^(-1) = ( adjM )/ ( |M| )

      note:adj M 表示 M的伴随矩阵

逆矩阵特性

      1) 如果M是非奇异矩阵,则该矩阵的逆的逆等于原矩阵:(M^(-1))^(-1) = M;

      2) 单位矩阵的逆是它本身:I^(-1) = I;

      3) 矩阵转置的逆等于它的逆的转置:(M^T)^(-1) = ( M^(-1) )^T;

      4) 矩阵乘积的逆等于矩阵的逆的相反顺序的乘积:(AB)^(-1) = B^(-1) A^(-1);

      5) 根据4) 可拓展到多个矩阵的情况:(M_1 M_2 ... M_n)^(-1) = (M_n)^(-1) (M_(n-1))^(-1) ... (M_1)^(-1);

==========================================================

正交矩阵

M 正交 <=> M M^T = I

M 正交 <=> M^T = M^(-1)

 

r_1 · r_1  =  1    r_1 · r_2  =  0    r_1 · r_3  =  0    

r_2 · r_1  =  0    r_2 · r_2  =  1    r_2 · r_3  =  0    

r_3 · r_1  =  0    r_3 · r_2  =  0    r_3 · r_3  =  1    

 

正交矩阵满足条件:

      1) 矩阵的每一行都是单位向量

      2) 矩阵的所有行相互垂直

正交基:

      如果一组向量互相垂直,这组向量就被称作正交基。

标准正交基:

      如果一组向量互相垂直并且所有向量都是单位向量,则称为标准正交基。

==========================================================

4 x 4 阶平移矩阵

                     ┌  1       0      0     0 ┐

[ x  y  z  1 ]  =│  0      1      0     0 │  =  [ x+Δx   y+Δy   z+Δz  1]

                     │  0       1      0     0 │

                     └  Δx    Δy    Δz   1 ┘

 

                ┌  r_11   r_12  r_13     0 ┐ ┌  1       0      0     0 ┐    ┌  r_11   r_12  r_13     0 ┐

M = RT  =│  r_21   r_22  r_23      0 │ │  0      1      0     0 │ = │  r_21   r_22  r_23     0 │ 

                │  r_31   r_32  r_33     0 │ │  0       1      0     0 │    │  r_31   r_32  r_33     0 │

                └    0        0       0        1  ┘ └  Δx    Δy    Δz   1 ┘    └   Δx      Δy     Δz      1 ┘

==========================================================

仿射变换

=========================================================

透视投影

        ┌   x   ┐      ┌   -dx/z   ┐   

 p' = │   y   │  =  │   -dy/z   │

        └   z   ┘      └     -d      ┘

 

                     ┌  1       0      0     0  ┐

[ x  y  z  1 ]  =│  0      1      0     0  │  =  [ x   y   z  z/d]

                     │  0       1      0    1/d│

                     └  0       0      0     0  ┘

=========================================================

变换分类

=========================================================

空间变换

=========================================================

Unity 中透视投影矩阵

┌  n/r       0            0                  0         ┐

│  0         n/t          0                  0         │

│  0          1      -(f+n)/(f-n)   (-2fn)/(f-n) │

└  0          0          -1                   0        ┘

 

存在Zfighting问题:

通过上述转换,得到的z值不是线性的,所以为了更精确的表达,所以希望远平面与近平面尽量接近

 

投影的FOV表达式

 

=========================================================

Unity 中正交投影矩阵

      ┌  1/r       0            0                  0        ┐

      │  0         1/t          0                  0         │

O = │  0          1       -2/(f-n)       (f+n)/(f-n) │

      └  0          0          -1                   0        ┘

改变成Unity的形式

[展开全文]
百里奚 · 2019-04-14 · 0

每个片元包含了很多信息,深度,屏幕坐标等。

[展开全文]
jhchn · 2020-02-21 · 0