点、向量和法线
线性代数是数学的一个分支,一门研究向量的学问。在三维空间中,向量(vector)是方向,点(point)是位置。
可以用包含4个元素的元组来表示齐次坐标点(homogeneous),用于简化数学运算。
线性变换可以对点和向量进行变换操作。一般而言,对点进行平移(平移向量没有意义,因为向量是方向),对向量进行旋转。
向量的长度是向量起点和终点的距离。把向量的长度置为1,方向保持不变,这样的操作叫向量的标准化(normalise )。
法线(normal)用于表示方向,可用于计算光照强度。一个面在P点的法线,可看作是垂直于与该面相切于点P的平面的向量。

以下代码用于表示点、向量和法线。
template<typename T>
class Vec3
{
public:
// 初始化一个向量的3中基本方式
Vec3() : x(T(0)), y(T(0)), z(T(0)) {}
Vec3(const T &xx) : x(xx), y(xx), z(xx) {}
Vec3(T xx, T yy, T zz) : x(xx), y(yy), z(zz) {}
T x, y, z;
};
typedef Vec3<float> Vec3f;
Vec3<float> a;
Vec3f b;
网友评论