SCNNode中的“方向”和“旋转”之间有什么区别

时间:2018-10-11 20:46:09

标签: ios scenekit augmented-reality arkit

我对SCNNode的“旋转”和“方向”感到非常困惑。在Apple的文档中,它们的定义非常相似:

orientation:节点的方向,以四元数表示。可动画的。

rotation:节点的方向,表示为围绕轴的旋转角度。可动画的。

苹果医生说: 旋转,eulerAngles和方向属性都会影响节点的transform属性的旋转方面。这些属性之一的任何更改都会反映在其他属性中。

那么他们有点控制相同的东西,但是使用不同的格式?那是我目前的理解。但是如何?它们都是SCNVector4类型。我了解旋转方式,但不确定如何设置方向以及它如何不同。

(编辑)

我只是尝试通过SCNNode()创建一个默认节点,并打印出其旋转方向和方向:

旋转: SCNVector4(x:0.0,y:0.0,z:0.0,w:0.0)

方向: SCNVector4(x:0.0,y:0.0,z:0.0,w:1.0)

我仍然不确定为什么有1.0。 E.comm提到它保留了四元数的定义,但是w表示SCNVector4中用于旋转的旋转度。所以我不确定为什么会在那里,因为我没有在代码中旋转节点。

2 个答案:

答案 0 :(得分:2)

SceneKit框架中的 Orientation Rotation 之间存在明显的区别。 方向表示为quaternion(等式的结果必须为1)。

根据Apple文档

  

Orientation –节点的方向,以四元数表示。可动画的。

四元数是一种数学构造,可用于描述三维空间中的旋转。尽管其实现与4分量矢量的实现不同,但是您可以使用与SCNVector4结构相同的字段来指定四元数值。

SceneKit使用单位四元数-那些满足以下等式的四元数:

(x * x) + (y * y) + (z * z) + (w * w) == 1

了解节点的方向属性。

var orientation: SCNQuaternion { get set }  // instance property

// There are four elements (x, y, z, w) in Structure `float4`
var orientation: SCNQuaternion = SCNQuaternion(v: float4)

typealias SCNQuaternion = SCNVector4
  

Rotation –节点的方向,表示为围绕轴的旋转角度。可动画的。四分量旋转矢量在前三个分量中指定旋转轴的方向,在第四个分量中指定旋转角(以弧度为单位)。默认旋转为零向量,不指定旋转。相对于节点的数据透视属性应用旋转。

var rotation: SCNVector4 { get set }  // instance property

var rotation: SCNVector4 = SCNVector4(x: CGFloat, 
                                      y: CGFloat,
                                      z: CGFloat,                                                   
                                      w: CGFloat)

您可以看到orientation实例属性以SCNQuaternion类型表示,而rotation实例属性以SCNVector4类型表示。

答案 1 :(得分:0)

@Gigantic发布了正确答案。这是我的简短版本:

旋转是SCNVector4

方向就是SCNQuanterion

尽管SCNQuanterion是SCNVector4的类型别名,但它在数学上的含义完全不同。