1.1 3D坐标系
3D空间通常用3个坐标轴 X, Y,Z来表示。通常有左手坐标系和右手坐标系。可以使用大拇指食指和中指成直角进行构造,如下图所示,大拇指为Y轴,Z轴为食指,中指为X轴
右手坐标系如下,为了x轴方向朝右,绕y轴旋转180度,如右图所示。
在OpenGL中的坐标系一般是右手坐标系,而Direct3D中一般是左手坐标系。
1.2 点
3D空间中的点可以通过笛卡尔坐标表示,如(2, 8, −3)。不过,使用齐次坐标—— 一种在19世纪初首次描述的表示法来表示点会更有用。在每个点的齐次坐标有4个值。前3个值表示X、Y和Z,第四个值W总是非零值,通常为1。
w表示缩放因子,齐次坐标转换笛卡尔坐标为,当w为0时,表示无穷远的点。
在欧式几何空间,同一平面的两条平行线不能相交,这是我们都熟悉的一种场景。
然而,在透视空间里面,两条平行线可以相交,例如:火车轨道随着我们的视线越来越窄,最后两条平行线在无穷远处交于一点。
以上方程式表示2条直线,如你所知这方程式没有解,因为C!=D,如果C==D,则这2条线则是重合的。让我们把A,B替换成A/w和B/w,如下图,这样方程有解,(x, y, 0) 当(C - D)w = 0, ∴ w = 0,所以这2条平行线相交于无穷远处。
在三维空间中,基 oabc 是由三个向量 a,b,c 组成的集合,通常加上原点 o。这些向量构成了一个基底,用来描述整个三维空间中的点。
具体来说,向量 a,b,c 是线性无关的,这意味着它们不能通过其他向量的线性组合来表示为零向量。这些向量通常被称为基向量,它们可以用来表示三维空间中的任何其他向量,因为三维空间中的每个向量都可以表示为基向量的线性组合。
例如,对于给定的向量 v,你可以找到一组实数 v1,v2,v3,使得:v=v1a+v2b+v3c,
对于给定的点a, 从原点O到a的oa向量,存在一组实数 e1,e2,e3,使得:a-o=e1a+e2b+e3c,
a =e1a+e2b+e3c+o。
将表达式写成矩阵的形式[v1,v2,v3,O]X(v1,v2,v3,0)。所以可以看出当第四个分量w为0时表示的是向量。当w为1时表示的是点。
1.3矩阵
在3D图形学中,点与矩阵相乘通常从右向左,得到点,如:
1.3.1平移矩阵
在图形学中矩阵通常进行物体间的变换,矩阵可以和点通过计算,将一个点移动从一个位置到另外一个位置。平移矩阵他包含一个单位矩阵,同时,,,代表点在X,Y, Z在方向的移动量。可以看见当w=0时,为向量时,平移矩阵对向量没有作用。
1.3.2 缩放矩阵
缩放矩阵用于改变物体的大小或者将点向原点相反方向移动,在opengl中物体是一组或多组点的集合,缩放物体就是相当于缩放点的集合。缩放矩阵变换由单位矩阵和位于,,的X、Y、Z缩放因子组成。下图中展示了缩放矩阵的形式和当它与齐次坐标点相乘的效果:所得的结果是经过缩放值修改后的新点。
1.33 旋转矩阵
在16世纪中叶,数学家莱昂哈德· 欧拉表明,围绕任何轴的旋转都可以表示为绕X、Y、Z轴旋转的组合 。围绕这3个轴的旋转角度被称为欧拉角。这个被称为欧拉定理的发现,对我们很有用,因为对于每个坐标轴的旋转可以用矩阵变换来表示。