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)
}
source to share
No one has answered this question yet
Check out similar questions: