ARKit在场景中删除自定义对象

时间:2017-08-27 10:52:56

标签: ios swift object augmented-reality arkit

我正在玩新的ARKit,我能够创建一个名为SphereNode的新文件,该文件能够在视图上创建一个Sphere droppable。

重点是我真的想添加一个自定义对象而不是标准球体。一些建议?在这里,您是用于创建Sphere的代码:

import SceneKit

class SphereNode: SCNNode {
    init(position: SCNVector3) {
        super.init()
        let sphereGeometry = SCNSphere(radius: 0.005)
        let material = SCNMaterial()
        material.diffuse.contents = UIColor.red
        material.lightingModel = .physicallyBased
        sphereGeometry.materials = [material]
        self.geometry = sphereGeometry
        self.position = position
    }

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

1 个答案:

答案 0 :(得分:0)

要使用自定义几何体而不是提供的几何体,最好的方法是使用外部编辑器来创建场景,例如Blender也可以开源,可选择添加材质和纹理,然后将其导出到iOS可以使用的格式,例如DAE。在您的应用内,您可以加载此文件并获取SCNScene及其相应的初始值设定项。加载场景后,您可以直接使用它来显示给用户或导航它以获得您想要使用的节点/几何/材料,然后将其添加到现有场景中。

  1. 假设您的文件名为scene.dae并位于您的应用主程序包中,那么您可以将其加载为

    let scene = SCNScene(named: “scene.dae”)
    

    或者如果您愿意,也可以指定一个完整的URL,请参阅documentation了解更多详细信息,请注意这些是可用的初始值设定项,因此请检查为无。

  2. 假设您的节点及其自定义几何体和纹理是场景中的唯一对象,您可以使用

    获取对它的引用
    let obj = scene.rootNode.childNodes.first
    

    请注意,这也是一个可选项,因此请检查nil值,如果我的假设不正确,您可以参考SCNNode documentation了解如何导航节点图,scene.rootNode始终是您的起点。

  3. 现在你有你的场景和对象,我之前说你有两个选择:将场景直接链接到你的SCNView(我不知道ARKit,但我想你有一个)而不是手动创建一个空的,或只采用对象/几何/材料,并通常将其添加到您已创建的场景。

  4. 如果您的对象不是静态的,而是动态生成的,您也可以通过构建SCNGeometry逐点创建它,这样做有点棘手,您可以使用my library创建一些有用的函数以及帮助这个过程的课程。