Набор сцен ARkit, встроенный в контроллер вида

Я пытаюсь встроить ARKit SceneKit View в контроллер представления в Xcode 9.2. Тем не менее, когда я делаю это, моя сцена отображается правильно, но я теряю вид из камеры с моей камеры. Это идет на черном фоне. Кто-нибудь знает, почему и как я могу это исправить?

Большое спасибо,

импорт UIKit импорт SceneKit импорт ARKit

Класс ViewControllerAR: UIViewController, ARSCNViewDelegate {

@IBOutlet var sceneViewAr: ARSCNView!


override func viewDidLoad() {
    super.viewDidLoad()

    // Set the view's delegate
    sceneViewAr.delegate = self

    // Show statistics such as fps and timing information
    sceneViewAr.showsStatistics = true

    // Create a new scene
    let scene = SCNScene(named: "art.scnassets/sodium.scn")!


    // Set the scene to the view
    sceneViewAr.scene = scene

    let mainnode = scene.rootNode.childNode(withName: "mainnode", recursively: true)
    mainnode?.runAction(SCNAction.rotateBy(x: 10, y: 0, z: 0, duration: 0))


    let orbit = scene.rootNode.childNode(withName: "orbit", recursively: true)
    orbit?.runAction(SCNAction.rotateBy(x: 0, y: 2 * 50, z: 0, duration: 100))

    if let orbittwo = scene.rootNode.childNode(withName: "orbit2", recursively: true) {
        orbittwo.runAction(SCNAction.rotateBy(x: 0, y: -2 * 50, z: 0, duration: 100))
    }

    if let orbitthree = scene.rootNode.childNode(withName: "orbit3", recursively: true) {
        orbitthree.runAction(SCNAction.rotateBy(x: 0, y: 2 * 50, z: 0, duration: 100))
    }

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

снимок экрана раскадровки Xcode и т. д.

1 ответ

Решение

Проблема в том, что вы не настроили ARSession или ARWorldTrackingConfiguration.

Конечно, у меня нет ваших моделей и т. Д., Но это хорошо показывает "ARView".

Вот как должен выглядеть код:

class ViewController: UIViewController {

@IBOutlet weak var sceneViewAr: ARSCNView?
let configuration = ARWorldTrackingConfiguration()
let augmentedRealitySession = ARSession()


//--------------------
//MARK: View LifeCycle
//--------------------

override func viewDidLoad() {

    super.viewDidLoad()

    //1. Run The ARSession
    augmentedRealitySession.run(configuration, options: [.resetTracking, .removeExistingAnchors])

    sceneViewAr?.session = augmentedRealitySession

    loadModels()

}

override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }


func loadModels(){

    // Create a new scene
    let scene = SCNScene(named: "art.scnassets/sodium.scn")!

    // Set the scene to the view
    sceneViewAr?.scene = scene

    let mainnode = scene.rootNode.childNode(withName: "mainnode", recursively: true)
    mainnode?.runAction(SCNAction.rotateBy(x: 10, y: 0, z: 0, duration: 0))


    let orbit = scene.rootNode.childNode(withName: "orbit", recursively: true)
    orbit?.runAction(SCNAction.rotateBy(x: 0, y: 2 * 50, z: 0, duration: 100))

    if let orbittwo = scene.rootNode.childNode(withName: "orbit2", recursively: true) {
        orbittwo.runAction(SCNAction.rotateBy(x: 0, y: -2 * 50, z: 0, duration: 100))
    }

    if let orbitthree = scene.rootNode.childNode(withName: "orbit3", recursively: true) {
        orbitthree.runAction(SCNAction.rotateBy(x: 0, y: 2 * 50, z: 0, duration: 100))
    }

   }

}

Надеюсь, поможет...

Другие вопросы по тегам