1
我的混亂的來源是來自蘋果上SCNMatrix4的文檔:這反過來又可以表示合併的位置,旋轉或 取向,和對象的規模SceneKit的SCNMatrix4是以列還是行爲主存儲的?
SceneKit使用矩陣來表示座標空間變換, 在三維空間。 SceneKit矩陣結構在行主要訂單,所以它們是 適合傳遞給接受矩陣參數的着色器程序或OpenGL API。
這似乎是自相矛盾的,因爲OpenGL使用列主變換矩陣!
在蘋果對這個話題一般的文檔質量較差:
- GLKMatrix4不談論與行主要列在所有,但 我相信所有的討論網上說GLKMatrix是平原和 簡單的專欄。
- simd_float4x4不談論 話題,但至少變量名稱清楚表明它 存儲爲列:網上有關SCNMatrix4
typedef struct { simd_float4 columns[4]; } simd_float4x4;
一些討論:
從simd/float.h
好像SCNMatrix4與GLKMatrix4不同,但是看SCNMatrix4的代碼給出了一些提示,說明它可能只是按照預期的列順序:
/* Returns a transform that translates by '(tx, ty, tz)':
* m' = [1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1]. */
NS_INLINE SCNMatrix4 SCNMatrix4MakeTranslation(float tx, float ty, float tz) {
SCNMatrix4 m = SCNMatrix4Identity;
m.m41 = tx;
m.m42 = ty;
m.m43 = tz;
return m;
}
所以是SCNMatrix4
行優先或列爲主(存儲m41
,m42
,m43
譯)(在m14
,m24
,m34
存儲翻譯)?