[英]ARKit drop a custom object in the scene
我正在使用新的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")
}
}
要使用自定义几何图形而不是所提供的几何图形,最好的选择是使用外部编辑器创建场景,例如Blender ,它也可以开源,可以选择添加材质和纹理,然后将其导出为iOS可以使用的格式,例如作为DAE。 然后,在您的应用程序内部,您可以加载此文件并使用适当的初始化程序获取SCNScene
。 加载场景后,您可以直接使用它显示给用户或浏览它以仅获取要使用的节点/几何体/材质,然后根据需要将其添加到现有场景中。
假设您的文件名为scene.dae
,位于应用程序主捆绑包中,然后您可以将其加载为
let scene = SCNScene(named: “scene.dae”)
或者,如果您愿意,也可以指定完整的URL
,请参阅文档以获取更多详细信息,请注意,这些都是可失败的初始化程序,因此请检查nil。
假设您的节点具有其自定义的几何形状和纹理是场景中唯一的对象,然后可以通过以下方式获取对该节点的引用
let obj = scene.rootNode.childNodes.first
请注意,这也是可选的,因此请检查nil值,如果我的假设不正确,则可以参考SCNNode文档以了解如何导航节点图, scene.rootNode
始终是您的起点。
现在,您已经有了我前面说过的场景和对象,您有两种选择:直接将场景链接到SCNView
(我不知道ARKit,但我想您有一个场景),而不是手动创建一个空的场景,或者只选择一个对象/几何/材质,通常将其添加到已经创建的场景中。
如果您的对象不是静态的而是动态生成的,则还可以通过构建SCNGeometry
逐点创建它,这样做有点棘手,您可以使用我的库,因为我创建了一些有用的函数和类来辅助该过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.