导入的搅拌机模型旋转不正确

时间:2016-09-24 12:53:21

标签: ios swift blender scenekit

我在SceneKit中导入了Blender 3D模型(带有地球纹理的球体),我正试图通过平移手势旋转它。我必须在心理上交换x轴和y轴,因为SceneKit中的旋转系统与Blender采用的旋转系统不同。

这是我旋转地球对象的方式:

func pan(gesture:UIPanGestureRecognizer)
{
    let translation = gesture.translation(in: self.view) * 0.05
    let intensity = Float(magnitude(point: translation)) // Euclidean distance

    let rotation = SCNMatrix4MakeRotation(intensity, Float(translation.y), Float(translation.x), 0.0) // I invert the x and y because of the different coordinate system
    earth.transform = SCNMatrix4Mult(earth.transform, rotation)

    gesture.setTranslation(CGPoint(x:0.0, y:0.0), in: self.view)
}

围绕y轴的旋转是正确的,但是如果我尝试通过垂直平移沿x轴旋转它,看起来好像地球的x轴是倾斜的而不是与y轴垂直。

在此视频中,我首先将手指向上然后向下拖动: https://www.youtube.com/watch?v=7YumAB_rXlk

1 个答案:

答案 0 :(得分:0)

当您使用手势旋转节点时,它将相对于节点的轴完成。假设您的节点处于其原始默认方向,+ X方向位于右侧。现在,您通过从左向右滑动将节点围绕Y旋转180°。如果您现在应用从上到下的滑动,则节点将围绕X向上旋转而不是向下旋转。这是因为第一次扫动绕X轴摆动,使得它指向相反的方向。这只是一个极端的例子,如果您的第一个Y旋转小于180°,现在尝试向X扫描将导致节点以倾斜的方式旋转,例如在您的视频中。

解决此问题的一种方法是将地球节点放在另一个节点(“容器节点”)中。使用地球节点进行Y旋转,并单独使用容器节点进行X旋转。

但我处理此问题的方式可以在这里找到:How to rotate an SCNBox