如何重置SceneKit pointOfView相机

3

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

3个回答

2
@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

保持编程......:)


1

只需设置默认的相机位置和方向,使用以下代码:

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])
}

但更好的方法是创建一个新的相机。这里是苹果文档中的说明

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

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

希望这有所帮助。

1

1
这是一个好的且简单的想法。但是 self.sceneView.defaultCameraController.frameNodes(self.scene.rootNode.childNodes) 没有生效。 - Kashif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接