着色器注释-3D数学基础

在3D世界中,为了确定不同顶点的位置,需要坐标表示。两个坐标的值基于固定的参考点定位,该参考点是坐标的原点。

通常,原点的坐标是(0,0)。

如果所有的坐标一起管理,就构成了一个坐标系。一个完整的坐标系将包含原点、方向和坐标。

3D涉及的坐标系有很多种,从尺寸上就可以区分出来。所有的坐标系都可以分为平面直角坐标系和空间直角坐标系。

在空间坐标系中,根据坐标方向的不同,可以分为左手坐标系和右手坐标系。

如果拇指设置为X轴,食指设置为Y轴,中指设置为Z轴,则左右手的坐标系如下所示:

在数学中,坐标是标量,只表示大小,不表示方向。

既能表达长度又能表达方向信息的称为矢量,或“向量”。顶点法向量、切线向量等。都是矢量。

假设二维向量A的起点是A,终点是B,则可以通过从B的坐标中减去A的坐标来计算向量A..

二维矢量A的计算公式如下:

如果将公式推广到三维空间,假设三维向量A的起点A和终点B,三维向量A的计算公式如下:

如果两个向量长度相等但方向相反,则它们方向相反。

零矢量的反矢量是它本身。

从几何的角度来看,以一个向量的起点为终点,以原终点为起点,最终的向量就是原向量的反向量。

假设向量A的起点A和终点B,以及A的相反向量B,表示如下:

向量包含长度和方向,向量的长度称为向量的模。例如,向量a的模数表示为| a |。

如图所示,通过勾股定理,我们可以得到

二维向量A的模长计算公式为:

如图所示,通过二次勾股定理,我们得到

“单位向量”是指模长为1的向量。

很多情况下,矢量的方向比矢量的长度更值得关注,比如光线的照射方向,摄像头的观看方向。为了计算方便,可以将这个向量变换成单位向量,这个变换的过程称为向量的归一化。

从代数的角度来看,一个非零向量除以自己的长度,可以把自己的长度缩放到1。零向量的长度为0,作为被除数在数学上没有意义。

因此,非零向量A的归一化向量为:

与原矢量相比,单位矢量只改变长度,方向不变。

从几何角度来看,矢量的相加满足三角形法则。

向量的相加可以推广到多个量的相加,最后的结果是从第一个向量的起点到最后一个向量的终点,长度是起点到终点的距离。

从代数的角度来看,向量的相加就是相同分量的相加。

向量的相减可以理解为一个向量与另一个向量的相反向量相加,同样满足三角形法则。

向量a和b的相减转化为相反向量的相加;

两个起点相同的向量相减,得到的向量是第二个向量的终点指向第一个向量的终点,长度是两端的距离。

从代数的角度来看,向量的相减就是减去相同的分量。计算公式如下:

将向量乘以标量可以产生向量缩放的效果。如图所示:

假设向量a =(x,y,z),向量缩放k倍的公式为:

矢量a和b的点积记为a.b。

在代数中,点积也叫内积,两个向量点积的结果是所有对应分量相乘的和。点积的结果是一个数值。

点积的计算公式为:

在几何中,两个向量的点积的结果是一个向量在另一个向量上的投影长度和这个向量的长度的乘积。

点积的计算公式为:

向量的叉积也叫外积,叉积的结果就是向量。向量a和b的叉积写成a× b。

叉积的计算公式为:

在几何中,叉积得到的向量垂直于A和B所在的平面,其长度等于向量A和B组成的平行四边形的面积,称为法向量。如图所示:

假设叉积的两个向量反过来,B和A的叉积得到的向量的方向会是向下的。

常用的矢量算法如下:

向量可以用水平排列的数组来表示。假设维数相同的数组垂直排列,最后的数组就是一个矩阵。

向量的维数表示向量中包含的数字的个数。类似地,矩阵的维数表示矩阵中包含的行数和列数。通常用R(R(raw)的首字母缩写)表示行数,用C(C(column)的首字母缩写表示列数,而矩阵本身用黑色斜体大写字母表示,如m。

一个3×3矩阵m和所有相应的分量可以表示如下:

行数和列数相等的矩阵称为方阵。

方阵中行数和列数相等的分量称为对角元素,其他分量称为非对角元素。非对角元素全为零的矩阵称为对角矩阵。

在对角矩阵中,对角元素都是1的矩阵称为单位矩阵。

任一矩阵乘以单位矩阵,最终结果与原矩阵相同。单位矩阵对矩阵的影响与1对标量的影响相同。

假设r×c的一个矩阵m对角化,得到的新矩阵称为矩阵m的转置矩阵。

转置矩阵的重要法则:将一个矩阵转置后再转置,得到的矩阵与原矩阵相同,公式如下:

和向量类似,矩阵也可以乘以标量,中间不需要写运算符号。相乘的结果与原始矩阵的维数相同,然后每个分量都乘以这个标量。公式如下:

当第一个矩阵的列数等于第二个矩阵的行数时,两个矩阵可以相乘,矩阵的行数等于第一个矩阵的行数和第二个矩阵的列数。

在着色器中,向量也可以乘以矩阵。乘法时,向量可视为1行或1列的矩阵。

向量(x,y,z)可以水平写成1×3的矩阵,称为行向量:

也可以写成3×1的矩阵,称为列向量:

向量与矩阵相乘的几何意义是实现向量的空间变换。

在3D中,所有的变换都由矩阵完成,包括平移、旋转和缩放。此外,坐标空间之间的转换也是通过矩阵来完成的。

假设向量v = (x,y,z),可以表示为

假设平面坐标系的两个坐标向量分别为p = (1,0)和q = (0,1),绕原点逆时针旋转角度,如下图所示:

左手和右手坐标系中的旋转方向完全不同。在两个坐标系中判断旋转方向的方法是伸出对应坐标系的手,握住转轴并保持大拇指的朝向与转轴的正方向一致,其他四指的朝向为旋转的正方向。如图所示,弧形箭头指示的方向是右手坐标系的正旋转方向。

对应于左右坐标系的旋转方向总结如下:

这里只解释绕坐标轴的旋转。

绕X轴旋转空间坐标系,在空间坐标系中的旋转方向如下图所示:

X轴上的所有坐标都不会改变。从X轴的正方向到负方向观察坐标系,Y轴和Z轴的旋转与平面坐标系完全相同,如图:

围绕X轴的最终旋转角度的变换矩阵为:

空间坐标系绕Y轴的旋转方向如下图所示:

从Y轴正方向到负方向观察坐标系,X轴和Z轴的旋转如下图所示:

空间坐标系绕Z轴的旋转方向如下图所示:

从Z轴正方向到负方向观察坐标系,X轴和Y轴的旋转如下图所示: