gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:12:18 27 4
gpt4 key购买 nike

我正在使用新的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com