矩陣乘法
在三維圖形學中,一般使用四維矩陣,也就是四行四列的方陣,下面是一個典型的四維矩陣
既然是三維圖形學,為什麼使用四維矩陣呢?主要有兩個原因,第一,為了平移變換,第二,為了區別點和向量。
一、矩陣平移
二、矩陣旋轉
三、矩陣縮放
在蘋果提供的GLKit.framework中,定義了GLKMatrix4結構體:
/* m30, m31, and m32 correspond to the translation values tx, ty, and tz, respectively. m[12], m[13], and m[14] correspond to the translation values tx, ty, and tz, respectively. */#if defined(__STRICT_ANSI__)struct _GLKMatrix4{ float m[16];} __attribute__((aligned(16)));typedef struct _GLKMatrix4 GLKMatrix4; #elseunion _GLKMatrix4{ struct { float m00, m01, m02, m03; float m10, m11, m12, m13; float m20, m21, m22, m23; float m30, m31, m32, m33; }; float m[16];} __attribute__((aligned(16)));typedef union _GLKMatrix4 GLKMatrix4;#endif
這涉及到矩陣在內存中的存儲順序,對於一個矩陣,在內存中有兩種存儲順序,列優先和行優先。左為列優先,右為行優先:
顧名思義,列優先:優先按列存儲,先存完第一列再存第二列,行優先同理。
[ m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33 第一列 第二列 第三列 第四列]
m[16] = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1],列優先排列如下:
[ 1, 0, 0, tx, 0, 1, 0, ty, 0, 0, 1, tz, 0, 0, 0, 1]
End.
推薦閱讀:
※K - means 聚類筆記
※九章演算法 | Google 面試題:奇怪的印表機
※2.機器學習演算法應用--特徵選擇
※數據結構——隊列與棧
※021 Merge Two Sorted Lists[E]