【Scratchapixel笔记】几何(一)点、向量和法线

版权声明:本文为博主原创文章,如需转载,请注明出处: https://blog.csdn.net/MASILEJFOAISEGJIAE/article/details/80010471

点、向量和法线

线性代数是数学的一个分支,一门研究向量的学问。在三维空间中,向量(vector)是方向,点(point)是位置。

可以用包含4个元素的元组来表示齐次坐标点(homogeneous),用于简化数学运算。

线性变换可以对点和向量进行变换操作。一般而言,对点进行平移(平移向量没有意义,因为向量是方向),对向量进行旋转。

向量的长度是向量起点和终点的距离。把向量的长度置为1,方向保持不变,这样的操作叫向量的标准化(normalise )。

法线(normal)用于表示方向,可用于计算光照强度。一个面在P点的法线,可看作是垂直于与该面相切于点P的平面的向量。

一个面在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; 

猜你喜欢

转载自blog.csdn.net/MASILEJFOAISEGJIAE/article/details/80010471