ARSCNView не отображает объект, когда встроен в контроллер навигации - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь отобразить 3D-модель при касании изображения ( См. Здесь ).Снимается изображение, оно переходит к 3DFloorPlanViewController (которое встроено в контроллер навигации), камера работает, но 3D-объект не отображается ( См. Здесь ).

I 'Я попробовал этот же код без контроллера навигации, и он отлично работает, поэтому я не понимаю, почему он не работает, когда встроен в контроллер навигации.

Раскадровка

Мои 3D-объекты находятся в папке «3D-объекты» ( См. Здесь ).Я пробовал named: "3D Objects/paperPlane.scn" и named: "paperPlane.scn" в функции addPaperPlane, но ни одна из них не работала.

Вот код 3DFloorPlanViewController:

import UIKit
import ARKit
import SceneKit

class _DFloorPlanViewController: UIViewController, ARSCNViewDelegate {
    @IBOutlet weak var sceneView: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()

        sceneView.delegate = self

        addPaperPlane()
        //addCar()
        configureLighting()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuration = ARWorldTrackingConfiguration()
        sceneView.session.run(configuration)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        sceneView.session.pause()
    }

    func addPaperPlane(x: Float = 0, y: Float = 0, z: Float = -0.5) {
        guard let paperPlaneScene = SCNScene(named: "3D Objects/paperPlane.scn"), let paperPlaneNode = paperPlaneScene.rootNode.childNode(withName: "paperPlane", recursively: true) else { return }
        paperPlaneNode.position = SCNVector3(x, y, z)
        sceneView.scene.rootNode.addChildNode(paperPlaneNode)
    }

    func addCar(x: Float = 0, y: Float = 0, z: Float = -0.5) {
        guard let carScene = SCNScene(named: "car.dae") else { return }
        let carNode = SCNNode()
        let carSceneChildNodes = carScene.rootNode.childNodes

        for childNode in carSceneChildNodes {
            carNode.addChildNode(childNode)
        }

        carNode.position = SCNVector3(x, y, z)
        carNode.scale = SCNVector3(0.5, 0.5, 0.5)
        sceneView.scene.rootNode.addChildNode(carNode)
    }

    func configureLighting() {
        sceneView.autoenablesDefaultLighting = true
        sceneView.automaticallyUpdatesLighting = true
    }
}

1 Ответ

0 голосов
/ 11 апреля 2019

На данный момент не настроена сцена для вашего вида сцены

let scene = SCNScene()
self.sceneView.scene = scene

в общем попробуйте это:

 override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // Set the view's delegate
    self.sceneView.delegate = self
    self.sceneView.showsStatistics = true
    self.sceneView.autoenablesDefaultLighting = true

    let scene = SCNScene()
    self.sceneView.scene = scene
}
...