【问题标题】:Scenekit rotate camera around a sceneScenekit 围绕场景旋转相机
【发布时间】:2016-09-10 01:51:11
【问题描述】:

我在 Swift 中有一个简单的 SceneKit 项目,我在其中将两个对象添加到场景中:一个球和一个盒子。

我希望能够:

  1. 用一根手指平移以围绕场景旋转相机
  2. 通过单击“移动”按钮、选择对象并将其拖动到新位置(通过 PanGesture)来移动对象

我希望使用allowCameraControl = false,因为我无法在启用它的情况下执行手势2),并且我想进一步添加panGestures。

我卡住了,因为我无法让相机围绕场景旋转。我让相机看着一个有约束的物体:

let constraint = SCNLookAtConstraint(target: globalSCNNode)
constraint.gimbalLockEnabled = true
globalCameraSCNNode.constraints = [constraint]

但是像这样的平移手势没有任何作用:

func panGesture(sender: UIPanGestureRecognizer) {
let translation = sender.translationInView(sender.view!)
var action = SCNAction.rotateByX(0, y: 0.5, z: 0, duration: 0.1)
globalCameraSCNNode.runAction(action)

有人可以帮忙吗? 谢谢,

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    LookAt 约束将覆盖您在panGesture 中命令的旋转。尝试删除该约束。

    【讨论】:

    • 谢谢!我去掉了约束并将相机作为一个孩子添加到球上,现在我可以旋转场景了。我觉得很好奇,网上没有关于 PanGestures 物理如何的教程或严肃的代码 - 我将不得不花费更多时间来调试不同的参数化。你知道有什么好的吗?另外,例如,如果我想查看allowsCameraControl = true 后面的代码,我在哪里可以找到它?谢谢
    • SceneKit 不是开源的,因此您不太可能看到该代码。不过,this answer 有一些提示可以让您自己实现它。
    • infinitered.com/2015/02/10/… 值得一读。还要记住,节点不需要任何附加的 SCNGeometry。你可以把你的相机放在一个看不见的“安装臂”上,它可以随心所欲地转动。
    • @rickster 感谢您的建议。我无法评论该线程,因为显然我没有 50 名声望,但我可以在这里。我坚持调用func scrollViewDidScroll(scrollView:UIScrollView)。我相信我应该让 viewController 从 UIScrollViewDelegate 继承,并将 ScrollView 添加到视图顶部并添加到控制器代码中,但是这个函数是如何调用的呢?
    • @HalMueller 感谢您的链接。但它适用于 Ruby 而不是 Xcode 项目?代码没有注释?
    【解决方案2】:

    我猜你的目标是围绕场景中心旋转相机,否则,它不会是旋转,而是移动。

    请看我基于this answer的答案here

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2018-07-05
      • 2019-01-14
      • 2018-02-20
      相关资源
      最近更新 更多