围绕球体运行的用户控制的SceneKit对象在极点处奇怪地起作用

时间:2015-01-09 21:49:37

标签: ios swift geometry scenekit euler-angles

用户控制在球体表面上移动的蛇。我将相机和蛇的头部连接到一个与可见球体大小相同的假想球体上:

    headNode.addChildNode(cameraNode)
    controlNode.addChildNode(headNode)
    scene.rootNode.addChildNode(controlNode)

用户点击两个按钮左右旋转蛇。我使用一些基本的触发来转换这个" 2D"旋转到我用来每帧旋转controlNode的组件:

    velocity.x = cos(rotation)
    velocity.y = sin(rotation)

    controlNode.eulerAngles.x += velocity.x
    controlNode.eulerAngles.y += velocity.y

当在大部分球体上移动时,这种方法非常顺利,但是在球体的两个极点(沿着y轴),蛇表现得很奇怪。这是一个gif,显示沿大部分球体的正常运动,然后是极点处的奇怪运动:

the gif was too large to upload so it is on imgur

它移动的方式就像它从两极弹跳一样,我不能为我的生活而努力。如果有人建议更容易地完成任务,那将非常感激!

1 个答案:

答案 0 :(得分:0)

Gimbal Lock就是问题所在。我通过使用节点的转换组件来修复它。