什么是SceneKit和ARKit中的simdTransform?

时间:2019-06-21 01:01:30

标签: swift scenekit augmented-reality arkit realitykit

在不同的ARKit和SceneKit项目中,我看到有人在使用 simdTransform

但是我不明白他们为什么要使用它?

我什么时候应该使用它?

1 个答案:

答案 0 :(得分:2)

在3D图形世界中,simdTransform 4x4矩阵是处理3D模型,相机和灯光的平移,旋转,缩放,剪切和投影的常规方法。

这是苹果对simdTransform的评价:

  

simdTransform nodesimdRotationsimdPositionsimdScale属性的组合。默认转换为 身份矩阵

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来了解它。

enter image description here