如何重置SceneKit pointOfView相机

时间:2018-10-21 16:33:29

标签: swift scenekit pointofview

我是SceneKit的新手。试图弄清楚如何将pointOfView相机重置为其原始缩放/位置,使其覆盖场景中的所有节点?

3 个答案:

答案 0 :(得分:1)

您可以在frameNodes(_:)上使用SCNCameraController方法来放置相机,以便可以看到一组节点。

答案 1 :(得分:0)

只需将默认相机位置和方向设置为所需值即可。使用以下代码:

func resetCameraToDefaultPosition() {

    sceneView.pointOfView?.position = SCNVector3(x: 5, y: 0, z: 5)
    sceneView.pointOfView?.orientation = SCNVector4(x: 0, y: 1, z: 0, w: .pi/4)
}

此外,按照 @mnuages 的建议,您可以使用defaultCameraController实例属性来对场景中具有3D几何形状的所有节点进行构图:

func resetCameraToDefaultPosition() {

    sceneView.defaultCameraController.frameNodes([coneNode, sphereNode, cubeNode])
}

但是更好的方法是创建一个新相机。 Here's what Apple documentation says

  

使用已将SCNCamera实例分配给其camera属性的节点查看场景。节点提供虚拟相机的位置和方向,相机对象提供渲染参数,例如视野和焦点。

let cameraNode = SCNNode()
cameraNode.position = SCNVector3(x: CGFloat, y: CGFloat, z: CGFloat)
cameraNode.rotation = SCNVector4(x: CGFloat, y: CGFloat, z: CGFloat, w: CGFloat)

let camera = SCNCamera()
camera.focalLength = 24
cameraNode.camera = camera

希望这会有所帮助。

答案 2 :(得分:0)

@IBOutlet weak var sceneKitView: SCNView! //Your SCNView

var myCamera:SCNNode!  //An object to hold your scene's camera

在viewDidLoad中,使用您的相机名称加载它:

myCamera:SCNNode = scene.rootNode.childNode(withName: "sceneCamera", recursively: true)!
// sceneCamera is my camera node's name in .scn file

sceneKitView.allowsCameraControl = true //Allow camera control

当您要重置时:

sceneKitView.allowsCameraControl = false
sceneKitView.pointOfView = myCamera

继续编码......:)