【问题标题】:Imported blender model rotates incorrectly进口搅拌机模型旋转不正确
【发布时间】:2017-02-02 05:53:28
【问题描述】:

我在 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

【问题讨论】:

  • 是否可以围绕对象旋转相机而不是旋转模型?这是做这种事情的“正常”方式。这并不是说这是正确的方法。我不知道您的最终目标是什么,您可能需要模型旋转而不是相机围绕对象移动。
  • @Confused 如果我将一个对象添加到场景中并且我只想旋转一个对象,那是行不通的。我想学习在不移动相机的情况下旋转物体的正确方法。

标签: ios swift blender scenekit


【解决方案1】:

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

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

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

【讨论】:

  • 在我上传的电影中,我在开始围绕 x 轴旋转之前没有围绕 y 轴旋转。
  • 我认为您的问题需要进一步澄清。目前尚不清楚描述和视频之间的关系。
  • 另外,您是否在编辑器中检查过 Blender DAE 的原生轴方向?
猜你喜欢
  • 1970-01-01
  • 2014-04-20
  • 2018-03-31
  • 2015-10-03
  • 2011-07-22
  • 2013-04-13
  • 1970-01-01
  • 2014-11-28
  • 2018-01-28
相关资源
最近更新 更多