【问题标题】:Converted SCN file (from DAE file) does not show up in sceneView转换后的 SCN 文件(来自 DAE 文件)未显示在场景视图中
【发布时间】:2017-12-02 13:36:51
【问题描述】:

我从here 下载了DAE Collada 文件,并在最新的Xcode beta 中打开并将其转换为SCN 文件。

我使用这种方法加载场景对象(其中modelName = modelfileExtension = 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)
}

但是,什么都没有出现!只有当我加载dae 文件(通过更改fileExtension = dae)时,恐龙才会显示,但恐龙闪烁真的很奇怪。

而且我不明白为什么这不起作用,因为如果 Apple 在 Xcode 中提供了从 daescn 的转换,我觉得使用生成的 scn 文件应该很容易。

任何帮助将不胜感激!

代码

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)
}

【问题讨论】:

    标签: ios11 scenekit augmented-reality arkit xcode9-beta


    【解决方案1】:

    我遇到了同样的问题。 我的解决方案:将 .dae 文件拖到项目中并通过“复制”按钮进行转换。 在我这样做之后,.scn 文件出现并且可见。

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 2015-10-16
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 2019-03-28
      • 2018-07-04
      • 1970-01-01
      • 2020-06-07
      相关资源
      最近更新 更多