我尝试在一个视图控制器中创建这两个视图,并同时运行它们,但这是行不通的,ARView超过了ARSCNView,即使它没有连接到一个出口。然后我尝试将一个视图添加到另一个视图中,但这也不起作用。
@IBOutlet var arView: ARView!
@IBOutlet var sceneView: ARSCNView!这对于ARView来说是独立的:
let anchor = try! Glasses.loadScene()
arView.scene.anchors.append(anchor)
arView.session.run(ARFaceTrackingConfiguration())这对于ARSCNView来说是独立的,然后我跟踪委托函数中的所有内容。
sceneView.session.run(ARFaceTrackingConfiguration())
sceneView.delegate = self这样做是行不通的:
let ar = ARSCNView(frame: view.frame)
ar.delegate = self
ar.session.run(ARFaceTrackingConfiguration())
arView.addSubview(ar)这样做是行不通的:
let ar = ARView(frame: view.frame)
let anchor = try! Glasses.loadScene()
ar.scene.anchors.append(anchor)
ar.session.run(ARFaceTrackingConfiguration())
sceneView.addSubview(ar)当我尝试将一个视图添加到另一个视图时,我注释掉了session.run调用,但这并没有什么区别。
发布于 2022-02-19 11:18:02
硬件约束
这是一个硬件约束,而不是技术上无法为ARView和ARSCNView运行2个单独的ARSCNView。例如,如果运行两个ARViews,您将看到两个视图中都存在实时摄像机信号,但是跟踪不起作用。
工作溶液
如果您从ARView的会话中激活ARSCNView的会话,那么这两个视图都会工作。然而,这个解决方案是为后相机的配置。
sceneView.session = arView.session代码
我在iPhone X (Xcode 13.2.1,iOS 15.3.1)上构建了它,应该说它工作得很好。
import ARKit
import RealityKit
class ViewController: UIViewController {
var sceneView = ARSCNView(frame: .zero)
var arView = ARView(frame: .zero)
override func viewDidLoad() {
super.viewDidLoad()
// ARSCNView
sceneView.frame = CGRect(origin: CGPoint(x: 0, y: 0),
size: CGSize(width: 400, height: 400))
self.view.addSubview(sceneView)
sceneView.scene = SCNScene()
sceneView.autoenablesDefaultLighting = true
let sphere = SCNNode(geometry: SCNSphere(radius: 0.2))
sphere.position.z = -1.0
sceneView.scene.rootNode.addChildNode(sphere)
// SESSIONS
sceneView.session = arView.session
// ARView
arView.frame = CGRect(origin: CGPoint(x: 0, y: 405),
size: CGSize(width: 400, height: 400))
self.view.addSubview(arView)
let boxScene = try! Experience.loadBox()
arView.scene.anchors.append(boxScene)
}
}让我们检查一个配置:
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
print(self.arView.session.configuration!)
}结果:
<ARWorldTrackingConfiguration: 0x282ce79c0
worldAlignment=Gravity
lightEstimation=Enabled
frameSemantics=None
videoFormat=< ARVideoFormat: 0x283ad9bd0
imageResolution=(1920, 1440)
framesPerSecond=(60)
captureDeviceType=AVCaptureDeviceTypeBuiltInWideAngleCamera
captureDevicePosition=(1) >
autoFocus=Enabled
environmentTexturing=Automatic
wantsHDREnvironmentTextures=Enabled
planeDetection=Horizontal
collaboration=Disabled
userFaceTracking=Disabled
sceneReconstruction=None
appClipCodeTracking=Disabled>https://stackoverflow.com/questions/59463704
复制相似问题