swift SCNNode中的方向和旋转有什么区别

7nbnzgx9  于 2023-05-16  发布在  Swift
关注(0)|答案(1)|浏览(213)

我对SCNNode的“旋转”和“方向”很困惑。在Apple的文档中,它们的定义非常相似:
方向:节点的方向,表示为四元数。可动画化。
rotation:节点的方向,表示为绕轴的旋转Angular 。可动画化。
Apple Doc说:rotation、eulerAngles和orientation属性都会影响节点的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中用于旋转的旋转度。所以我不知道为什么它在那里,因为我没有在我的代码中旋转节点。

4xrmg8kj

4xrmg8kj1#

SceneKit框架中的OrientationRotation有明显的区别。方向表示为quaternion(其公式结果必须为1)。

根据Apple文档

Orientation-节点的方向,表示为四元数。可动画化。
四元数是用于描述三维空间中的旋转的数学构造。尽管它的实现与4分量向量的实现不同,但您可以使用与SCNVector 4结构相同的字段来指定四元数值。
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-节点的方向,表示为绕轴的旋转Angular 。可动画化。四分量旋转向量指定前三个分量中的旋转轴方向和第四个分量中的旋转Angular (以弧度为单位)。默认旋转为零向量,指定不旋转。相对于节点的轴属性应用旋转。

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

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

可以看到,orientation示例属性是用SCNQuaternion类型表示的,而rotation示例属性是用SCNVector4类型表示的。

相关问题