在不同的ARKit和SceneKit项目中,我看到有人在使用 simdTransform 。
但是我不明白他们为什么要使用它?
我什么时候应该使用它?
答案 0 :(得分:2)
在3D图形世界中,simdTransform
4x4矩阵是处理3D模型,相机和灯光的平移,旋转,缩放,剪切和投影的常规方法。
这是苹果对simdTransform的评价:
simdTransform
是node的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转换矩阵如何工作的更多信息,请look at this SO post。
P.S。 SIMD 代表单条指令,多个数据。您可以HERE来了解它。