SCNMatrix4
是否遵循列大写或行大写约定?请考虑以下内容:
func makeTranslationMatrix(tx: Float, ty: Float, tz: Float) -> simd_float4x4 {
var matrix = matrix_identity_float4x4
matrix[3, 0] = tx
matrix[3, 1] = ty
matrix[3, 2] = tz
return matrix
}
var T1 = makeTranslationMatrix(tx: 1, ty: 2, tz: 3)
print(T1.columns.0)
print(T1.columns.1)
print(T1.columns.2)
print(T1.columns.3)
/*
T1
float4(1.0, 0.0, 0.0, 0.0)
float4(0.0, 1.0, 0.0, 0.0)
float4(0.0, 0.0, 1.0, 0.0)
float4(1.0, 2.0, 3.0, 1.0)
*/
var sceneT1 = SCNMatrix4MakeTranslation(1, 2, 3)
print("\(sceneT1.m11), \(sceneT1.m12), \(sceneT1.m13), \(sceneT1.m14)")
print("\(sceneT1.m21), \(sceneT1.m22), \(sceneT1.m23), \(sceneT1.m24)")
print("\(sceneT1.m31), \(sceneT1.m32), \(sceneT1.m33), \(sceneT1.m34)")
print("\(sceneT1.m41), \(sceneT1.m42), \(sceneT1.m43), \(sceneT1.m44)")
/*
sceneT1
1.0, 0.0, 0.0, 0.0
0.0, 1.0, 0.0, 0.0
0.0, 0.0, 1.0, 0.0
1.0, 2.0, 3.0, 1.0
*/
如您所见,SCNMatrix4的转换值存储在第4列的m41,m42,m43中。由于矩阵被转置,这些值可能存储在m41,m42,m43中,然后将它们实际存储在第四行中。
我找不到明确的信息来说明正在使用的确切约定。 m41
是指第四列第一行还是第四行第一列?
答案 0 :(得分:0)
转换矩阵会告诉您它是行还是列。翻译发生在每一行的末尾。由于翻译在打印时显示在底部的“行”中,因此每一行代表一列。
TL; DR。它使用列主要存储。