Как бросить CMRotationMatrix в float4x4? - PullRequest
0 голосов
/ 24 ноября 2018

Я создаю Metal приложение, которое использует float4x4 матрицы для вращения 3D-объектов и / или представления о мире.

Приложение также читает устройство attitude, которое может быть выражено какматрица вращения в формате CMRotationMatrix (CoreMotion).

Как я могу отлить мой attitude.rotationMatrix в float4x4 объект?

1 Ответ

0 голосов
/ 25 ноября 2018

Вы можете создать расширение, которое позволит вам инициализировать 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)

Это создает матрицу, которая подходит для преобразования объектов, чьи преобразования выражаются относительно отношение опорного кадра .Может оказаться, что вам нужно переставить столбцы, чтобы они соответствовали мировой системе координат вашего приложения.

...