我正在尝试实现与场景编辑器中相同的旋转,但是使用代码使对象始终围绕选定的 Axis 旋转,但是如果我在编辑器中查看角度(x,y,z),它们的变化是相当随机的

![本地节点 Axis ] [1]

我尝试使用四元数,但无法正常运行

PS。我不好的是使用旋转属性而不是两个SCNVector4的方向,都已经正确读取了文档)

最佳答案

似乎您真的很接近,您必须在GLKQuaternionMultiply调用中交换参数。我在https://stackoverflow.com/a/39813058/4124265中使用了解决方案以仅通过Z Axis 实现旋转:

    let orientation = modelNode.orientation
    var glQuaternion = GLKQuaternionMake(orientation.x, orientation.y, orientation.z, orientation.w)

    // Rotate around Z axis
    let multiplier = GLKQuaternionMakeWithAngleAndAxis(0.5, 0, 0, 1)
    glQuaternion = GLKQuaternionMultiply(glQuaternion, multiplier)

    modelNode.orientation = SCNQuaternion(x: glQuaternion.x, y: glQuaternion.y, z: glQuaternion.z, w: glQuaternion.w)

旋转arround Y:
    // Rotate around Y axis
    let multiplier = GLKQuaternionMakeWithAngleAndAxis(0.5, 0, 1, 0)
    glQuaternion = GLKQuaternionMultiply(glQuaternion, multiplier)

09-26 23:49