Как перезагрузить камеру SceneKit pointOfView
Я новичок SceneKit
, Пытаясь выяснить, как я могу сбросить pointOfView
Камера для него оригинальное масштабирование / положение, чтобы оно охватывало все узлы в сцене?
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
Продолжайте кодировать.........:)
Просто установите положение камеры по умолчанию и ориентацию на нужные значения. Используйте следующий код:
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
Свойство instance для кадрирования всех узлов с трехмерной геометрией в вашей сцене:
func resetCameraToDefaultPosition() {
sceneView.defaultCameraController.frameNodes([coneNode, sphereNode, cubeNode])
}
Но лучший способ - создать новую камеру. Вот что говорится в документации Apple:
Используйте узел с экземпляром 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
Надеюсь это поможет.
Вы можете использовать frameNodes(_:)
метод на SCNCameraController
разместить камеру так, чтобы набор узлов стал видимым.