Converted scn file (from dae file) not showing in sceneView

I downloaded dae

(Collada file) from here and I opened it in the latter Xcode-beta

and converted it to scn

.

I am loading a scene object using this method (where modelName

= model

, fileExtension

= scn

):

private func loadModel() {
            guard let virtualObjectScene = SCNScene(named: "\(modelName).\(fileExtension)", inDirectory: "art.scnassets/\(modelName)") else {
                return
            }

            let wrapperNode = SCNNode()

            for child in virtualObjectScene.rootNode.childNodes {
                wrapperNode.addChildNode(child)
            }

            self.addChildNode(wrapperNode)
        }

      

However, nothing appears! The dinosaur only appears when the file is loaded dae

(by modifying fileExtension

= dae

), but this dinosaur flickers very strangely.

And I donโ€™t understand why it doesnโ€™t work, because if Apple provided a to dae

to scn

to convert Xcode

, I find it quite easy to use the resulting file scn

.

Any help would be appreciated!

code

Dinosaur.swift

class Dinosaur: VirtualObject {

    override init() {
        super.init(modelName: "model", fileExtension: "scn", title: "Dinosaur")
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

      

VirtualObject.swift

class VirtualObject: SCNNode {

    var modelName: String = ""
    var fileExtension: String = ""
    var title: String = ""

    override init() {
        super.init()
        self.name = "Virtual object root node"
    }

    init(modelName: String, fileExtension: String, title: String) {
        super.init()
        self.name = "Virtual object root node"
        self.modelName = modelName
        self.fileExtension = fileExtension
        self.title = title

        loadModel()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    private func loadModel() {
        guard let virtualObjectScene = SCNScene(named: "\(modelName).\(fileExtension)", inDirectory: "art.scnassets/\(modelName)") else {
            return
        }

        let wrapperNode = SCNNode()

        for child in virtualObjectScene.rootNode.childNodes {
            wrapperNode.addChildNode(child)
        }

        self.addChildNode(wrapperNode)
    }

    private func unloadModel() {
        for child in self.childNodes {
            child.removeFromParentNode()
        }
    }
}

      

ViewController.swift

   var newObject: VirtualObject = Dinosaur()

@IBAction func loadAd(_ sender: UIButton) {
        newObject.removeFromParentNode()

        newObject.position = SCNVector3(0, 0, -1)

        sceneView.scene.rootNode.addChildNode(newObject)
       }

      

+3


source to share





All Articles