向量与矩阵
Table of Contents
1 前言
本文主要会叙述向量和矩阵基本的数学运算及在图形学中的简单运用。
2 向量运算
2.1 向量概述
向量具有方向和大小,其绝对位置是不重要的。所以理论上来讲向量用于表示偏移。 但是由于图形学中表示的统一化,向量也被用于位置表示,这里会假设位置等于坐标系 原点+偏移量。
2.2 向量相加
Figure 1: 向量相加
1 从几何上来理解,相加的过程就是从起始向量的起始位置到最后向量的末尾。
2 从坐标系上来理解,相加的过程就是其在各个坐标系的分量相加。
2.3 点积 dot product
2.3.1 说明
Figure 2: 向量点积
用坐标表示: a * b = axbx+ayby
推导过程:
a = ax * x + ay * y
b = bx * x + by * y
相乘时由于 x 与 y 垂直, 故 x * y =0
这里 x 与 y 都为x轴与y轴的单位向量 → x * x =1
2.3.2 应用
- 查找两个向量之间的夹角。
在shading中,可以计算光与表面的夹角。 - 计算一个向量在另一个向量上的投影。
有利于计算一个向量在任意坐标系上的坐标。
2.3.3 投影举例
Figure 3: 投影举例
2.4 叉积 cross product
2.4.1 说明
Figure 4: 向量叉积
不同于点积为常量值,叉积仍为一个向量,并且垂直于参与的两个向量。 方向由右手法则确定。
一些常用的运算列举如下:
Figure 5: 常用计算
2.4.2 应用
在图形学的编程中,总是会遇到mvp→ model view projection的矩阵转换。 其中view即为camera的视角,在编程过程中,我们需要指定camera的坐标系。 其中camera的正方向可以通过LookAt函数确定,但是我们需要去指定camera的upVector。
其中为了方便,我们指定的upVector不需要和camera的正方向向垂直却仍可以获得一个 camera的坐标系,至于原因就是利用了crossproduct。
3 矩阵
由于现有的函数库大多集成了矩阵的计算,所以这里不在详细叙述,大家可以把它当成个黑盒子即可。
但是最基本的需要掌握即矩阵相乘必须满足 Ax,y * By,z → 即A的列数需要等于B的行数。
而通常我们表达的三维空间需要四维向量来表示的原因是因为我们想让矩阵的运算全部以统一的乘法方式表示。