Вы можете создать расширение, которое позволит вам инициализировать float4x4
из элементов CMRotationMatrix
:
extension float4x4 {
init(_ m: CMRotationMatrix) {
let x = float4(Float(m.m11), Float(m.m21), Float(m.m31), 0)
let y = float4(Float(m.m12), Float(m.m22), Float(m.m32), 0)
let z = float4(Float(m.m13), Float(m.m23), Float(m.m33), 0)
let w = float4( 0, 0, 0, 1)
self.init(columns: (x, y, z, w))
}
}
. Использовать его так же просто, как вызвать инициализатор:
let simdMatrix = float4x4(deviceMotion.attitude.rotationMatrix)
Это создает матрицу, которая подходит для преобразования объектов, чьи преобразования выражаются относительно отношение опорного кадра .Может оказаться, что вам нужно переставить столбцы, чтобы они соответствовали мировой системе координат вашего приложения.