對於變換矩陣R = Rz * Ry * Rx
1) 相對於參考坐標系O(固定)的變換
V’ = R * V = Rz * Ry * Rx V,對於左乘變換矩陣(從右向左進行),其變換為V向量對於參考坐標系(固定)先繞x軸旋轉,再繞y軸旋轉,最后繞z軸旋轉,得到的新向量V’,在整個變 換過程中均是相對於同一坐標系O的x,y,z軸進行的,得到的V’也是同一參考坐標系O中的矢量。
2) 相對於當前坐標系的變換
則每個平移、旋轉變換始終相對於當前坐標系(坐標系隨着平移、旋轉)。變換順序為從左往右(即右乘矩陣)。對於V’ = R * V = Rz * Ry * Rx V,相當於最初的參考坐標系O,繞z軸旋轉(變成O1),再繞y軸旋轉(變成O2),最后繞x軸旋轉(變成O3)。得到的V’是O3坐標軸中的V在原始坐 標軸O下的矢量。
所以對於同一的變化矩陣R,可以理解為兩種不同的變換方法。
OpenGL對模型進行旋轉、平移和縮放。用到三個子函數: glTranslate*(x, y, z) 、 glRotate*(x, y, z) 、 glScale*(x, y, z) 。每個函數都會產生一個矩陣,並右乘當前矩陣。
對與變換:
glRotatef(45.0, 0.0, 0.0, 1.0);
glTranslatef(3.0, 0.0, 0.0);
這 兩個變換,可以看成:
glMultMatrixf(R);
glMultMatrixf(T);
R,T 都是右乘到CTM(當前變換矩陣):CTM = CTM * R * T
對模型變換的理解有兩種:
1) 在固定坐標系下,對物體進行變換。這時候,要以相反的順序來考慮代碼中的變換函數了,它的實際過程是這樣 P = CTM *( R*(T* P’))。首先對物體進行平移,平移到坐標(3.0, 0.0, 0.0)。然后,把物體相對原點繞z軸旋轉45度。
2) 物體捆綁在局部坐標系下,所有的變換都是在當前坐標系進行的。這時,變換可以看成:
glRotatef(45.0, 0.0, 0.0, 1.0) 產生一個齊次矩陣 R(代表一個局部坐標系),即局部坐標系R 相對剛才開始的坐標系I(單位矩陣)作了旋轉變換,繞z軸旋轉了45度。
glTranslatef(3.0, 0.0, 0.0) 產生一個齊次矩陣 T (也是代表了一個局部坐標系),相對 R 坐標系沿x軸(R系)平移了3個單位,得到了自己的局部坐標系T,最后在T下進行繪制。
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://www.cnblogs.com/captainbed