SceneKit:允许沿着X轴和Y轴平移摄像机节点

时间:2016-02-06 01:58:48

标签: ios swift scenekit

目标是在SceneKit中模拟相机,让用户通过平移屏幕来平移相机的视角。

以下代码模拟水平方向的摄像机平移,但您如何考虑垂直方向的同时平移?

你是否只是连续另一个旋转,但改变X轴并基于translation.y(以获得用户垂直平移的数量)?或者有更好的方法吗?

func doPan(sender: UIPanGestureRecognizer) {
    // Get horizonal pan distance & convert to radians
    let translation = sender.translationInView(sender.view!)
    var xRadians = GLKMathDegreesToRadians(Float(translation.x))

    // Rotate camera
    xRadians = (xRadians / 20) + currentAngle
    cameraNode.transform = SCNMatrix4MakeRotation(xRadians, 0, 1, 0)

    // Update preview block
    setPreviewBlock(cameraNode.position)

    // Save value for next rotation
    if (sender.state == UIGestureRecognizerState.Ended) {
        currentAngle = xRadians
    }
}

1 个答案:

答案 0 :(得分:0)

您可以将旋转矩阵相乘以获得新的变换。

另一种方法是使用相机节点的eulerAngles属性。 transformeulerAnglesorientation都包含节点的旋转,但它们使用不同的参数化。

有关相机旋转的详尽解答/解释,请参阅Rotate SCNCamera node looking at an object around an imaginary sphere

另一种方法是旋转场景而不是移动相机。请查看SCNActionrotateBy...rotateTo...函数。