shader入门精要读书笔记06 数学基础

第四章 数学基础

一、坐标系
笛卡尔坐标系,分为二维三维。
二维坐标系 OpenGL是左下角为0,DirectX是左上角。
三维坐标系,3个坐标轴也被称为基矢量,长度为1的基矢量叫做标准正交基,长度不唯1的叫正交基。
三维笛卡尔坐标系又分为左手坐标系与右手坐标系。
Unity使用的是左手坐标系,摄像头的观察空间是右手坐标系(摄像头前方为z轴的负方向)。

二、点和矢量
矢量:有方向有模,没有位置。
点:只是一个位置。

矢量的加减乘除运算,模运算。

单位矢量:被归一化的矢量。通过在矢量上方加个^来表示是矢量的模。
单位矢量的运算:通过矢量除以矢量的模来进行计算。
单位矢量计算通常使用在法线方向、光源方向等。

矢量的点积(内积/点乘):
点积就是可以确定两个矢量的方向关系。投影长度=标量。
点乘结果>0 :两个矢量方向关系为<90°。(=0 : 垂直,<0 : >90°)
求适量的模可以将矢量对其自身进行点乘,运算后开方。
a·b=|a||b|cos夹角

矢量的叉积(外积/叉乘):
叉积结果是矢量,不满足交换律,叉积的结果是得到一个同时垂直于这两个矢量的新矢量。
使用左手定则,右手定则来判断在不同坐标系中,新得到的矢量方向。
|a×b|=|a||b|sin夹角

我们可以通过点乘(cos值)来确定某两个矢量的夹角关系。
还可以通过叉乘判断一个面的正面反面(通过确定面上的三个点的顺时针、逆时针方向来确定,逆时针顺时针判断就要通过叉乘后新矢量的Z轴的正负确定)

三、矩阵

行、列、
行矩阵、列矩阵可以代替矢量,在空间变换中这样可以让矢量像矩阵一样参与矩阵运算。

1.矩阵运算
矩阵与标量的乘法:
即将每个矩阵中的元素,与标量相乘。

矩阵与矩阵的乘法:
矩阵相乘是有要求的,一个矩阵的行数必须和另外一个矩阵的列数相同。
想乘会得到一个新的矩阵,这个新矩阵的维度(4×5矩阵 乘 5×6矩阵)
结果为4×6矩阵。
AB运算过程为:对于每一个结果矩阵中数Cij,找到A中的第i行,和B中的第j列,找到对应元素后,相乘再相加。
矩阵乘法不满足交换律。AB=BA
矩阵乘法满足结合律。(AB)C=A(BC)

2.特殊矩阵

方块矩阵:
即方阵,在三维渲染里最常使用的就是3×3、4×4的矩阵。
对角元素:指的是方阵中行号与列号相等的元素。
对角矩阵:一个方阵中除了对角元素外都是0,那么这样的方阵佳作对角方阵。

单位矩阵:
对角元素都是1的对角矩阵是单位矩阵,任何矩阵与之相乘结果不变。

转置矩阵:
转置矩阵是对原矩阵的一种运算,即转置运算(A右上角T代表A的转置)。
性质1:矩阵转置的转置等于原矩阵.
性质2:矩阵串接的转置等于反向串接各个矩阵的转置。
(AB).T=B.T A.T (.T意为字母右上角)

逆矩阵:
只有方阵才有逆矩阵。
原矩阵与逆矩阵相乘为1。
逆矩阵用右上角-1来表示。
一个矩阵有逆矩阵那么这个矩阵是可逆的、非奇异的。
逆矩阵的判断和求法可以使用库。
性质1:逆矩阵的逆矩阵是矩阵本身。
性质2:单位矩阵的逆矩阵是他本身。
性质3:转置矩阵的逆矩阵是逆矩阵的转置。
性质4:矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵。

正交矩阵:
指一个方阵和他的转置矩阵的乘积是单位矩阵。那么这个矩阵被称为是正交的。
也就是说,如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的。
即---- M.T=M.-1
在三维变换中,我们经常会使用逆矩阵来求解反向变换,所以我们可能会利用正交矩阵的身份通过转置矩阵来获得。
那么该如何判断一个矩阵是否为正交矩阵:
条件1:矩阵的每一行,即内部矢量元素都是单位矢量。
条件2:矩阵的每一行,即各个矢量元素之间需要相互垂直。
条件3:上面两条件对矩阵的每一列矢量元素同样适用。
正交矩阵的转置也是正交矩阵。、
标准正交基可以精确的满足上述条件。
正交基:坐标空间中需要存在的基矢量,坐标轴,并且这些基矢量相互垂直。
标准正交基:当这些基矢量的长度为1。

当使用矢量与矩阵相乘时,需要考虑矢量与矩阵的位序问题。
因为矩阵乘法是有条件满足才可以相乘的。(几行几列)
Unity中常规做法是把矢量放在矩阵右侧,把矢量转换为列矩阵来计算。
例如 : CBAv=(C(B(Av))),阅读顺序从右到左,先将v和A,再和B、C。

几个注意的矩阵相乘特点:
AB.T=(BA.T).T
如果B是对称矩阵,行矩阵乘法和列矩阵乘法得数互为转置矩阵。

武汉加油!过年在家也要加油哈!

发布了16 篇原创文章 · 获赞 3 · 访问量 3071

猜你喜欢

转载自blog.csdn.net/w9503/article/details/103407218
今日推荐