我正在尝试通过代码实现与场景编辑器中相同的旋转效果,使对象始终围绕所选轴旋转。然而,如果我查看编辑器中的角度(x、y、z),它们会随机更改。
![本地节点轴][1]
我尝试过使用四元数,但无法使其正常工作。
PS:我的错误是使用旋转属性而不是SCNVector4的方向属性,现在已经阅读了文档。
![本地节点轴][1]
我尝试过使用四元数,但无法使其正常工作。
PS:我的错误是使用旋转属性而不是SCNVector4的方向属性,现在已经阅读了文档。
看起来你很接近了,你需要在GLKQuaternionMultiply
的调用中交换参数。我使用https://dev59.com/bJjga4cB1Zd3GeqPP9fn#39813058中的解决方案仅通过Z
轴实现旋转:
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)
要绕 Y
轴旋转:
// Rotate around Y axis
let multiplier = GLKQuaternionMakeWithAngleAndAxis(0.5, 0, 1, 0)
glQuaternion = GLKQuaternionMultiply(glQuaternion, multiplier)
GLKQuaternionMakeWithAngleAndAxis
函数来完成。let initial_object_orientation = rotateNode.orientation;
new_orientation = GLKQuaternionMultiply(rotation_quaternion, initial_object_orientation)
rotatNode.orientation = new_orientation