场景套件:允许摄像机节点沿 X 轴和 Y 轴平移



目标是在 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
    }
}

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

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

请参阅旋转 SCNCamera 节点查看假想球体周围的对象,以获取相机旋转的完整答案/解释。

另一种方法是旋转场景而不是移动摄像机。看看SCNActionrotateBy...rotateTo...功能。

最新更新