我对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中用于旋转的旋转度。所以我不确定为什么会在那里,因为我没有在代码中旋转节点。
答案 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的类型别名,但它在数学上的含义完全不同。