矩阵

1、形式

    矩阵就是以行和列形式组织的矩形数字块。
    用一种紧凑的方式来表达坐标转换所需的数学运算。
    用线性代数操作矩阵,是一种简单转换或导出更复杂转换的简便方法。

    记法:
        矩阵的维度被定义成行和列两个方向

    记录形式
        m X n 我们称为m行 n列矩阵

2、矩阵属性

方阵:

    行和列是相等的称为方阵
        我们只研究 2 X 2 、3 X 3 、4 X 4的方阵
    对角矩阵
        方阵的对角线上有非零数,其他成员都是零
    单位矩阵
        对角线上的元素都必须是1,其他都是0
        单位矩阵非常特殊,他和其他矩阵相乘后的结果都保持矩阵不变,也可以理解他就是原矩阵

向量和矩阵

    行向量
        一行三列的矩阵
    列向量
        三行一列矩阵

通过上述说明,向量也是可以和矩阵发生关系的

矩阵转置

    让矩阵的行变成列,让列变成行

转置记法: $$M^T$$

注意:对于单位矩阵来说,他的转置就是他本身

3、矩阵的运算

1、标量和矩阵的乘法
    让这个标量和矩阵中每个元素相乘,结果还是一个矩阵

2、矩阵和矩阵相乘
    矩阵和矩阵的乘法不是什么形式都可以,必须让乘数矩阵的列和被乘数矩阵的行保持一致,否则公式不成立

    矩阵与矩阵相乘后得到的结果是:用乘数矩阵的行与被乘数矩阵的列组合成了一个新矩阵;

注意:
    单位矩阵和别的矩阵相乘得到了原来的矩阵
    矩阵绝对不满足交换律:A X B != B X A
    满足结合律

3、向量和矩阵相乘
    行向量
        放在矩阵的左侧进行乘运算
    列向量
        放在矩阵的右侧

4、矩阵的几何意义

    一般我们需要使用方阵的特性来描述一个物体变换时的线性变换规律;
    前面的说明确认我们必须使用方阵来解决我们的3D数学计算。

    使用方阵解决的变化
        旋转
        缩放
        投影
        镜像
        仿射(一种特殊矩阵)

    矩阵和向量的几何关系
        我们可以把向量利用线性变换的规律转化成一个对角方阵,表达我们平移时的平移关系

5、仿射矩阵

概念

    方阵运算都是线性的,3X3方阵他的参照点就是(0, 0, 0)原点。
    对于不在原点的线性变换 3X3 方阵是表现不了的。所以我们需要构建 4X4 的方阵来表现参照点不在原点的线性变换。
    线性变换后接着自动平移了,这样的现象我们称为仿射变换。
    特点,就是在发生线性变换的同时也发生了平移,就是将一个3x3矩阵和一个平移综合在了一起,得到了一个 4X4的方阵

4x4齐次矩阵

    主要是配合我们的4维向量使用的矩阵

    4维矩阵的用途
        主要用于显示方面的,最后一个维度用于标明显像管的比例
        在图形图像编程中我们必须使用四维的向量,方便我们最后的显示

    4x4 矩阵形式
        m11, m12, m13, Nx
        m21, m22, m23, Ny
        m31, m32, m33, Nz
        0,     0,   0, 1

        m表示的是一个3x3的方阵,所以我们前面认识的所有方阵都可以放进去
        (Nx,Ny,Nz,1) 叫做增量变化,如果你没有增量那么你就传0就好了,但是最后一个维度一定是1

    说明
        齐次矩阵在和我们的向量发生关系后他并不会直接改变坐标,而是改变了4维向量的最后一个维度,这样的表现主要应用在我们的渲染当中,逻辑代码并不需要;

6、矩阵计算

概念

    矩阵计算我们只使用方阵在计算机科学中计算
    方阵的计算永远都是线性的
    必须按照步骤一步一步的走,不能随意颠倒或错乱步骤
    对于方阵我们使用矩阵乘法,这个时候你需要注意你的矩阵乘法的条件

    在计算机图形学中我们主要关注的是方阵和我们的向量发生的乘法关系
        列向量我们使用右侧乘 更加适用于计算机特性
        行向量我们使用左侧乘 适合人类的计算
    我们也研究方阵和方阵之间的乘法关系

旋转

    模型的顶点自己不能直接选择,他必须参照一个方阵实现在各个轴向上发生旋转。旋转绝对不可以同时发生,只能一步步选择
    旋转矩阵是固定一个轴,让顶点在这根轴上的平移没有发生变化,但是这根轴垂直的平面上的两个平移发生了变化, 所以我们的选择是不改变当前轴的坐标而改变垂平面上的坐标;

    绕X轴旋转A度
        1,     0,     0
        0,  cosA,  sinA
        0, -sinA,  cosA

    绕Y轴旋转A度
        cosA,   0,  -sinA
        0,      1,      0
        sinA,   0,   cosA

    绕Z轴旋转A度
        cosA,  sinA, 0 
        -sinA, cosA, 0
        0,        0, 1

    2D旋转
        2D坐标系只表现XY两个轴,只是一个绕着z轴旋转的表现;
        cosA,  sinA 
        -sinA, cosA

缩放

    缩放运算的方阵是一种特殊方阵:对角方阵

    缩放对角矩阵
        Sx, 0, 0
        0, Sy, 0
        0, 0, Sz
    缩放轴需要你填写,如果哪个轴不缩放,那么请你填写1
    注意:缩放绝对不可以是0

    2D
        Sx, 0
        0, Sy

镜像

    在某个轴上产生一个反转的关系
    从上翻到下,上下颠倒
    从左翻到右就是左右颠倒
    3D物体你需要注意,正反面的渲染问题,如果你反面没渲染,镜像后你就看不见了
    镜像是轴发生的翻转关系,镜像是线性的一次只能镜像一根轴
    镜像矩阵就是我们的缩放矩阵,只是他的缩放值必须是小于0的,而且每次只能镜像一次

投影

    投影矩阵非常重要,他是所有计算机图形学的最后部分,他可以将这个世界反映到你的屏幕上来
    投影矩阵分为两种
        正交投影:2D的投影
        透视投影:3D的投影

    投影是需要在一个平面上完成的,所以我们的计算都是根据平面来进行投影的

    xy平面投影
        1,0,0
        0,1,0
        0,0,0

    xz平面投影
        1,0,0
        0,0,0
        0,0,1

    yz平面投影
        0,0,0
        0,1,0
        0,0,1

注意:投影如果你想表达的比较真实,那么你的1的位置上就应该用 sin, cos来替代

7、方阵变化组合

  将多个变换矩阵按照次序组合(连接)成一个矩阵。这个新矩阵代表依次执行原变换的累加效果。

计算机的基本绘制
    1、有世界坐标系,用于给其他坐标系提供参考
    2、物体需要依靠自身坐标系发生旋转缩放,然后利用惯性坐标系产生平移
    3、物体的存在我们看见才有意义,这个时候我们需要借助摄像机来观察物体,摄像机就可以将物体投影到屏幕上,这个时候需要经历投影矩阵计算;
    4、将投影好的图像再转换到显示器的坐标系范围,完成最终显示

优化渲染过程
    矩阵乘法支持我们的结合律
    世界矩阵,摄像机投影矩阵,视口矩阵,是固定不变的
        既然他们三个基本不变,那么我们可以提前把他们三个乘出来,得到一个新矩阵与我们的物体矩阵相乘
        我们就可以得到一个MVP矩阵,方便我们做最后的定位

    渲染
        CPU对于浮点和矩阵计算比较吃力
        GPU对于这样的运算非常高效

🔚