Как переместить SCNNode из точки A в точку B на SCNSphere

Я пытаюсь переместить свой SCNNode из одной позиции (A) в другую (B). Оглядываясь вокруг, все предлагают добавить этот узел к helperNode (который представляет собой узел, расположенный в центре моей сферы), а затем повернуть его, чтобы смоделировать "орбиту" моего узла через сферу. Я пробовал тонны формул / вычислений / кватернионов, но ни один из них не работает должным образом. Есть ли какая-нибудь четкая и простая формула для получения вращения SCNVector4 или SCNQuaternion с учетом двух SCNVector3?

func makeRotationQuaternion(a: SCNVector3, b: SCNVector3) -> SCNQuaternion {
    let v0 = a.normalized
    let v1 = b.normalized
    let c = v0.dotProduct(v1)
    let axis = v0.crossProduct(v1)
    let s = sqrt((1.0+c)*2.0)
    let invs = 1.0/s

    var ret = SCNQuaternion()
    let v3 = SCNVector3(axis.x * invs, axis.y * invs, axis.z * invs)
    ret.x = v3.x
    ret.y = v3.y
    ret.z = v3.z
    ret.w = s * 0.5
    return ret;
}

Это самое близкое из того, что я достиг до сих пор, но не работает должным образом. Я просто помещаю этот кватернион в свойство вращения "helperNode".

0 ответов

Другие вопросы по тегам