0

私のプロジェクトでは、 と を切り替えたいと思っていARWorldTrackingConfigurationますARFaceTrackingConfiguration

2 種類のビューARSCNViewを使用して、背面カメラを使用ARViewし、顔追跡を行います。最初に を開始しARSCNView、その後、ユーザーが必要に応じてフェイス トラッキングに切り替えることができます

このモードでView Controllerを起動します。

sceneView.delegate = self
sceneView.session.delegate = self

            // Set up scene content.
setupCamera()            
sceneView.scene.rootNode.addChildNode(focusSquare)

let configurationBack  = ARWorldTrackingConfiguration(
configurationBack.isAutoFocusEnabled = true
configurationBack.planeDetection = [.horizontal, .vertical]


sceneView.session.run(configurationBack, options: [.resetTracking, .removeExistingAnchors])

そして、オブジェクト (.scn) を読み込みます

フロントカメラに切り替えてARViewに渡したいときは、次のようにします。

 let configurationFront  = ARFaceTrackingConfiguration()

  // here I stop my ARSCNView session
  self.sceneView.session.pause()

    self.myArView = ARView.init(frame: self.sceneView.frame)

    self.myArView!.session.run(configurationFront)
    self.myArView!.session.delegate = self

    self.view.insertSubview(self.myArView!, aboveSubview: self.sceneView)

そして、私がロードするよりも.rcproject

バックカメラに戻って ARWorldTracking に再度渡そうとすると、ここから問題が始まります。

これは私の方法です:

// remove my ARView with face tracking
        self.myArView?.session.pause()

        UIView.animate(withDuration: 0.2, animations: {
            self.myArView?.alpha = 0
        }) { (true) in
            self.myArView?.removeFromSuperview()
            self.myArView = nil

        }
// here I restart the initial ARSCNView
    let configurationBack  = ARWorldTrackingConfiguration(
        configurationBack.isAutoFocusEnabled = true
        configurationBack.planeDetection = [.horizontal, .vertical]


    session.run(configurationBack, options: [.resetTracking, .removeExistingAnchors])

バックカメラに切り替えると、センサーが飛行機を正しく追跡しません。

ARWorldTrackingConfiguration と ARFaceTrackingConfiguration を正しく切り替えるにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

0

セッションを一時停止するときは、シーンに追加されたすべてのノードも必ず削除してください。セッションを一時停止する場所の後に以下のコードを追加しますself.sceneView.session.pause()

self.sceneView.scene.rootNode.enumerateChildNodes { (childNode, _) in
    childNode.removeFromParentNode()
}
于 2019-06-19T09:40:30.877 に答える