【问题标题】:What is the difference between Orientation and Rotation in SCNNodeSCNNode中的Orientation和Rotation有什么区别
【发布时间】:2019-03-17 01:04:41
【问题描述】:

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

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

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

苹果文档说: 旋转、eulerAngles 和方向属性都会影响节点变换属性的旋转方面。对这些属性之一的任何更改都会反映在其他属性中。

所以他们有点控制相同的东西,但使用不同的格式?这是我目前的理解。但是怎么做?它们都是 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 中用于旋转的旋转度数。所以我不确定它为什么会在那里,因为我没有在我的代码中旋转节点。

【问题讨论】:

  • 这取决于用例。有时,其中一种格式有利于您的计算。当你需要它时,你会明白的。
  • 嗨,@E.Coms,我再次编辑了我的问题,您介意再看一下吗?
  • Xx +yy + zz +ww =1 。检查四元数的定义。
  • 我不是在问为什么它是一个有效的四元数。这些值(即 x、y、z、w)代表什么?旋转还是和 SCNVector4 一样吗?
  • 然后检查齐次平面。和正常的

标签: swift scenekit arkit


【解决方案1】:

SceneKit 框架中的OrientationRotation 有一些明显的区别。 Orientation 表示为quaternion(等式的结果必须是1)。

根据 Apple 文档

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

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

SceneKit 使用unit quaternions——其组件满足等式:

x² + y² + z² + 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 – 节点的方向,表示为围绕轴的旋转角度。动画。四分量旋转向量在前三个分量中指定旋转轴的方向,在第四分量中指定旋转角度(以弧度为单位)。默认旋转是零向量,指定不旋转。相对于节点的 pivot 属性应用旋转。

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

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

如您所见,orientation 实例属性以SCNQuaternion 类型表示,但rotation 实例属性以SCNVector4 类型表示。

【讨论】:

  • 使用文档的好答案。我要做的唯一改变是链接到文档中的页面,这来自:)
  • 对不起,但这个答案的方程式部分对我来说似乎是错误的:如果 (x * x) + (y * y) + (z * z) + (w * w) == 1 必须始终满足,那么 SCNQuaterion(0,0,0,0) 将是不可能的。但是当然有 SCNQuaterionZero 存在,它实际上是 SCNScene 中任何 SCNNode 的起始值。
  • 嗨@LukeSideWalker!这是 Apple 信息:developer.apple.com/documentation/scenekit/scnquaternion
  • 嗨@AndyFedoroff 感谢您这么快回复。但我的观点仍然是正确的。如果您正确阅读了 Apple 的文档,那么它会说:“SceneKit 使用单位四元数......”这是重要的部分:只有那些“单位四元数”满足方程,而不是所有四元数。它就像“标准化”向量,它们的长度始终为 1,但没有任何可能的向量,只有“标准化”。
  • 嗨@AndyFedoroff,很抱歉,我刚刚看到,您正确引用了Apples 文档。尽管如此,我还是发表评论,因为重要的是,只有那些特定的“单位四元数”满足上述方程。
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
  • 2011-11-22
相关资源
最近更新 更多