第三章 几何对象和变换
-
基本概念
–零向量:长度为零,方向没有定义–向量空间:包含向量和标量
–仿射空间:包含向量、标量、点
–计算机科学的观点:把向量、标量、点看作抽象数据类型(ADT)
–凸性:如果对于一个对象中的任意两个点,连接它们的线段上所有的点仍然位于这个对象中,那么这个对象就是凸的
-
直线
–直线的参数形式: P ( α ) = P 0 + α d P(\alpha ) = P_{0} + \alpha d P(α)=P0+αd -
仿射加法
-
点积和叉积
–点积
( a 1 , a 2 , a 3 ) ⋅ ( b 1 , b 2 , b 3 ) = a 1 b 1 + a 2 b 2 + a 3 b 3 (a_{1}, a_{2}, a_{3})\cdot (b_{1}, b_{2}, b_{3}) = a_{1}b_{1} + a_{2}b_{2} + a_{3}b_{3} (a1,a2,a3)⋅(b1,b2,b3)=a1b1+a2b2+a3b3
一般有:
a ⋅ b = ∣ a ∣ ∣ b ∣ cos θ a\cdot b = \left |a \right |\left |b \right |\cos \theta a⋅b=∣a∣∣b∣cosθ
–叉积
( a 1 , a 2 , a 3 ) × ( b 1 , b 2 , b 3 ) = ( a 2 b 3 − a 3 b 2 , a 3 b 1 − a 1 b 3 , a 1 b 2 − a 2 b 1 ) (a_{1}, a_{2}, a_{3})\times (b_{1}, b_{2}, b_{3}) = (a_{2}b_{3} -a_{3}b_{2} , a_{3}b_{1} -a_{1}b_{3} , a_{1}b_{2} -a_{2}b_{1} ) (a1,a2,a3)×(b1,b2,b3)=(a2b3−a3b2,a3b1−a1b3,a1b2−a2b1) -
平面
–线段的参数形式:
S ( α ) = α P + ( 1 − α ) Q , 0 ≤ α ≤ 1 S(\alpha ) = \alpha P + (1 - \alpha) Q, 0\leq \alpha \leq 1 S(α)=αP+(1−α)Q,0≤α≤1–平面的参数形式
-
变换(Transformation)
–平移(translation):P’ = P+T, where T is translation vector
–缩放(scaling):P’ = S*P, where S is a scaling matrix
–旋转(rotation):P’ = R*P, where R is a rotation matrix
A)沿X轴旋转的旋转矩阵(不动点为原点)
B)沿Y轴旋转的旋转矩阵(不动点为原点)
C)沿Z轴旋转的旋转矩阵(不动点为原点)
–变换矩阵的逆矩阵
-
OpenGL的变换顺序
–当前变换矩阵(Current Transformation
Matrix,CTM):CTM是绘制流水线的一部分,因此,如果p是应用程序中定义的一个顶点,那么绘制流水线就会生成Cp
–例子(固定点的旋转)
–OpenGL里的CTM