将摄像机旋转与SceneView中的网格/刻度对齐

时间:2019-02-26 18:52:46

标签: ios swift scenekit

我有一个通过orbitTurntable / allowsCameraControl放置在SCNVector3.zero处的地球仪,以及一个使用SCNLookAtConstraint观察地球的相机。这运作得很好。我要添加的功能是清理旋转的能力,以便将自由旋转捕捉到最接近的5度,并且每次经过5度刻度时都会发出咔嗒声。解决此问题的最佳方法是什么?

我没有任何运气..在renderer()中,我尝试了SCNTransformConstraint,SCNMatrix4MakeRotation,SCNAction.rotateBy,当然,直接更改了eulerAngles.x / y。任何指导表示赞赏!谢谢!!

var scnView: SCNView = {
  let v = SCNView()
  v.autoenablesDefaultLighting = true
  v.allowsCameraControl = true
  v.defaultCameraController.interactionMode = .orbitTurntable
  v.defaultCameraController.target = SCNVector3.zero
  v.defaultCameraController.inertiaEnabled = true
  return v
}()
let camConstraint = SCNLookAtConstraint(target: scene?.rootNode)

1 个答案:

答案 0 :(得分:0)

我在关闭相机控制上取得了一些成功

    v.allowsCameraControl = false

然后使用平移手势

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(panHandler(_:)))
    scnView.addGestureRecognizer(panGesture)

但是最终我使用了https://github.com/dclelland/DirectedPanGestureRecognizer

    let gestureRecognizer = DirectedPanGestureRecognizer()
    gestureRecognizer.delegate = self
    scnView.addGestureRecognizer(gestureRecognizer)

我必须编写自己的旋转等代码,但这是值得的!