Xcode simd - problema com o exemplo de conversão e matriz de rotação
Não é apenas contra-intuitivo coluna-contra-fila-principal, a documentação da Apple sobre "Trabalhar com matrizes" agrava ainda mais a confusão com seus exemplos de "construção" de uma "Matriz de translação" e de uma "Matriz de rotação" em 2
Translate Matrix De acordo com a documentação da Apple ()
Translate Uma matriz de conversão assume o seguinte formato:
1 0 0
0 1 0
tx ty 1
A biblioteca simd fornece constantes para matrizes de identidade (matrizes com aquelas ao longo da diagonal e zeros em outros lugares). A matriz de identidade 3 x 3 Float é matrix_identity_float3x3.
A função a seguir retorna uma matriz simd_float3x3 usando os valores de conversão tx e ty especificados, definindo os elementos em uma matriz de identidade:
func makeTranslationMatrix(tx: Float, ty: Float) -> simd_float3x3 {
var matrix = matrix_identity_float3x3
matrix[0, 2] = tx
matrix[1, 2] = ty
return matrix
}
Meu problema com ele
A linha de códigomatrix[0, 2] = tx
define o valor da primeira coluna e da terceira linha comotx
. let translationMatrix = makeTranslationMatrix(tx: 1, ty: 3)
e imprimir a segunda colunaprint(translationMatrix.columns.2)
renderáfloat3(0.0, 0.0, 1.0)
. Estou muito confuso a respeito de por que é a última linha que contém os valores da tradução, e não a coluna. Esta convenção não é usada ao usarSCNMatrix4MakeTranslation
e criando umsimd_float4x4
Fora deSCNMatrix4
objeto.
var A = SCNMatrix4MakeTranslation(1,2,3)
var Asimd = simd_float4x4(A)
A.m41 // 1
A.m42 // 2
A.m43 // 3
A.m44 // 1
Asimd.columns.3 // float4(1.0, 2.0, 3.0, 1.0)
AmbosSCNMatrix4
esimd_float4x4
Segue ocolumn major convenção de nomes. No exemplo 2D da Apple, é a última linha que contém os valores de conversão, enquanto que comSCNMatrix4
e convertendo parasimd_float4x4
, é a última coluna que contém os valores de conversão. O exemplo da Apple parece estar fazendo o mesmo com as matrizes de rotação també
O que estou perdendo