【问题标题】:ARKit drop a custom object in the sceneARKit 在场景中放置一个自定义对象
【发布时间】:2017-08-27 10:52:56
【问题描述】:

我正在使用新的 ARKit,并且能够创建一个名为 SphereNode 的新文件,该文件能够在视图上创建一个可放置的 Sphere。

关键是我真的想添加一个自定义对象而不是标准球体。一些建议?这是用于创建 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")
    }
}

【问题讨论】:

  • 您为SCNNode 创建了一个子类,这样您就可以将其用作标准节点并通常将其添加到您的场景中。
  • 是的,我已经实现了,但我的问题是:如何设置自定义图像而不是我创建的 Sphere?
  • 您的意思是要将球体的默认白色更改为自定义纹理还是完全自定义几何?请编辑您的问题
  • 完全自定义几何。也许不是球体,而是带有自定义 3D 图像。明白了吗?

标签: ios swift object augmented-reality arkit


【解决方案1】:

要使用自定义几何体而不是提供的几何体,最好的办法是使用外部编辑器来创建场景,例如 Blender,它也是开源的,可以选择添加材质和纹理,然后将其导出为一种格式iOS可以使用,比如DAE。然后,在您的应用程序中,您可以加载此文件并获取带有相应初始化程序的SCNScene。加载场景后,您可以直接使用它向用户显示或导航它以仅获取您想要使用的节点/几何图形/材质,然后随意将其添加到现有场景中。

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

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

    或者,如果您愿意,也可以指定一个完整的 URL,请参阅 documentation 了解更多详细信息,注意这些是可失败的初始化程序,因此请检查 nil。

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

    let obj = scene.rootNode.childNodes.first
    

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

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

如果您的对象不是静态的而是动态生成的,您还可以通过构建SCNGeometry 逐点创建它,这样做有点棘手,您可以使用my library,因为我创建了一些有用的函数和类来帮助过程。

【讨论】:

  • 但我仍然不明白如何将 DAE 文件设置为 3D 对象而不是我的球体。谢谢!
  • 查看我的更新答案,请注意一些可能的拼写错误,因为我来自移动端
  • 感恩米勒! :P 希望其他人会发现它有用!我会尽快实施!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多