首页 > 解决方案 > Swift - 什么是 SCNCamera 的定义和用途

问题描述

我找不到一个很好的解释 aSCNCamera是什么以及它的目的。这是苹果的定义

一组相机属性,可以附加到节点以提供用于显示场景的视点。

这个定义不清楚,因为我设置了场景并添加了 aSCNNode而没有附加 a SCNCamera。设备摄像头的视角显示SCNNode我将其放置在的位置没有问题,并且场景显示良好。

设备的相机和相机有什么区别SCNCamera

SCNCamera将 a 附加到 aSCNNode与不使用a 有什么好处?

如果我有多个SCNNodes(彼此之间都没有层次结构)每个节点都需要它自己的SCNCamera吗?

如果我SCNNodes在一个hierarchy(带有子节点的父节点)中有多个节点,每个节点都需要它自己的SCNCamera还是只需要父节点?

lazy var sceneView: ARSCNView = {
    let sceneView = ARSCNView()
    sceneView.translatesAutoresizingMaskIntoConstraints = false
    sceneView.delegate = self
    return sceneView
}()

let configuration = ARWorldTrackingConfiguration()

override func viewDidLoad() {
    super.viewDidLoad()

    // pin sceneView to the view

    let material = SCNMaterial()
    material.diffuse.contents = UIImage(named: "earth")

    let plane = SCNPlane(width: 0.33, height: 0.33)
    plane.materials = [material]
    plane.firstMaterial?.isDoubleSided = true

    let myNode = SCNNode(geometry: plane)
    myNode.name = "earth"
    myNode.position = SCNVector3(0.0, 0.6, -0.9)

    sceneView.scene.rootNode.addChildNode(myNode)
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    sceneView.session.run(configuration, options: [])
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillAppear(animated)

    sceneView.session.pause()
    sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
}

标签: iosswiftarkitscnnodescncamera

解决方案


在 SceneKit 中,SCNCamera表示用户观看场景的视角。Ray Wenderlich提供了一个很好的解释:

回想一下第 1 章中电影场景的类比:要拍摄一个场景,您需要放置一台摄像机来观察该场景,而该场景的最终图像将来自摄像机的视角。

Scene Kit 的工作方式类似;包含相机的节点的位置决定了您查看场景的视点。

您不需要SCNCamera为每个节点设置一个。对于要显示的每个角度,您应该只需要一台相机,甚至只需要一台。您可以使用其父级position属性在整个场景中移动一台摄像机。

看起来你正在使用 ARKit,它的行为有点不同。当使用一个ARSCNView,而不是一个非 AR SCNView,你会得到以下行为:

  • 该视图自动将来自设备摄像头的实时视频馈送渲染为场景背景。
  • 视图的 SceneKit 场景的世界坐标系直接响应会话配置建立的 AR 世界坐标系。
  • 视图会自动移动其 SceneKit 相机以匹配设备的真实移动。

在这种情况下,您无需担心场景的摄像头,因为它会自动由系统控制,以匹配设备的 AR 运动。

有关更多详细信息,请参阅 Apple 的文档SCNCameraSCNCamera - SceneKit


推荐阅读