【发布时间】:2019-03-25 19:55:04
【问题描述】:
我是SceneKit 的新手。试图弄清楚,如何将pointOfView 相机重置为原始缩放/位置,以便覆盖场景中的所有节点?
【问题讨论】:
标签: swift scenekit pointofview
我是SceneKit 的新手。试图弄清楚,如何将pointOfView 相机重置为原始缩放/位置,以便覆盖场景中的所有节点?
【问题讨论】:
标签: swift scenekit pointofview
@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
继续编码......... :)
【讨论】:
您可以在SCNCameraController 上使用frameNodes(_:) 方法放置一个摄像头,这样一组节点就会变得可见。
【讨论】:
self.sceneView.defaultCameraController.frameNodes(self.scene.rootNode.childNodes) 只是没有生效。
只需将默认相机位置和方向设置为所需值即可。使用以下代码:
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 实例的节点来查看场景。节点提供虚拟摄像机的位置和方向,摄像机对象提供视野、焦点等渲染参数。
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
希望这会有所帮助。
【讨论】: