В чем разница между ориентацией и вращением в SCNNode - PullRequest
0 голосов
/ 11 октября 2018

Я довольно смущен "вращением" и "ориентацией" для SCNNode.В документе Apple они определены аналогично:

ориентация: ориентация узла, выраженная в виде кватерниона.Animatable.

вращение: ориентация узла, выраженная в виде угла поворота вокруг оси.Animatable.

И Apple Doc говорит: свойства 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 голосов
/ 12 октября 2018

@ Gigantic опубликовал правильный ответ.Вот моя короткая версия:

Вращение - это SCNVector4

Ориентация - это SCNQuanterion

Хотя SCNQuanterion - это типизация SCNVector4, это означает совершенно иное в математике.

0 голосов
/ 12 октября 2018

Существует некоторая очевидная разница между Ориентация и Поворот в рамках SceneKit. Ориентация выражается как quaternion (результат уравнения должен быть 1).

Согласно документации Apple :

Ориентация - Ориентация узла, выраженная в виде кватерниона.Animatable.

Кватернион - это математическая конструкция, полезная для описания вращений в трехмерном пространстве.Хотя его реализация отличается от реализации четырехкомпонентного вектора, вы задаете кватернионное значение, используя те же поля, что и структура 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

Вращение - Ориентация узла, выраженная в виде угла поворота вокруг оси.Animatable.Четырехкомпонентный вектор вращения задает направление оси вращения в первых трех компонентах и ​​угол поворота (в радианах) в четвертом.Вращением по умолчанию является нулевой вектор, указывающий отсутствие вращения.Вращение применяется относительно свойства поворота узла.

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

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

Как вы можете видеть, orientation свойство экземпляра выражается в типе SCNQuaternion, а rotation свойство экземпляра выражается в SCNVector4тип.

...