В разных проектах ARKit и SceneKit я вижу людей, работающих с simdTransform.
Но я не могу понять, почему они его используют?
И когда мне его использовать?
В разных проектах ARKit и SceneKit я вижу людей, работающих с simdTransform.
Но я не могу понять, почему они его используют?
И когда мне его использовать?
В мире 3D-графики матрицы simdTransform
4x4 - это обычный способ работы с перемещением, вращением, масштабированием, срезанием и проецированием 3D-моделей, камер и источников света.
Вот что Apple говорит о simdTransform:
simdTransform
- это комбинация узлаsimdRotation
,simdPosition
иsimdScale
свойства. Преобразование по умолчанию - это матрица идентичности.
var simdTransform: simd_float4x4 { get set }
// all these properties are parts of a simdTransform
var simdPosition: simd_float3 { get set }
var simdRotation: simd_float4 { get set }
var simdEulerAngles: simd_float3 { get set }
var simdOrientation: simd_quatf { get set }
var simdScale: simd_float3 { get set }
var simdPivot: simd_float4x4 { get set }
Вот как выглядит единичная матрица 4x4:
x y z
┌ ┐
x | 1 0 0 0 |
y | 0 1 0 0 |
z | 0 0 1 0 |
| 0 0 0 1 |
└ ┘
... и в коде:
var transform = matrix_identity_float4x4
ПРИМЕР. Изменение положения с помощью матрицы 4x4:
0 1 2 3 // column index
┌ ┐
| 1 0 0 tx |
| 0 1 0 ty |
| 0 0 1 tz |
| 0 0 0 1 |
└ ┘
... в коде:
var translation = matrix_identity_float4x4
translation.columns.3.x = 10.25
translation.columns.3.y = 20.50
translation.columns.3.z = 30.75
Если вам нужна дополнительная информация о том, как работает матрица преобразования 4x4, посмотрите это сообщение SO.
P.S. SIMD означает Одна инструкция, Несколько данных. Вы можете прочитать об этом ЗДЕСЬ.