ios - ARKit 在场景中放置一个自定义对象

标签 ios swift object augmented-reality arkit

我正在使用新的 ARKit,并且能够创建一个名为 SphereNode 的新文件,该文件能够在 View 上创建可放置的 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")
    }
}

最佳答案

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

  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,但我猜您有一个)而不是手动创建一个空场景,或者仅获取对象/几何图形/ Material ,然后通常将其添加到已创建的场景中。

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

关于ios - ARKit 在场景中放置一个自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904169/

相关文章:

iphone - Cocos2d - animationwithframes :delay: deprecated

ios - 如何在 NSTextAttachment 中设置模板图像的颜色

ios - 'LSApplicationQueriesSchemes 下的 Info.plist 中缺少 fbauth2,并且是 iOS 9.0 所必需的'

javascript - javascript,我们如何创建一个对象,在创建两个数组之前迭代它们,这两个数组是键/值对?

ios - 对象属性设置为空

ios - 导航栏按钮的自定义颜色和 UIActivityViewController 的状态栏

ios - 更新评分 Cocos2d 3.0

swift delegate - 何时使用弱引用,为什么 'delegate' 为零?

ios - 可见单元格的 Swift collectionView 方法未更改

javascript - 如何在 Javascript 中创建数组的数组?