我正在玩新的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")
}
}
答案 0 :(得分:0)
要使用自定义几何体而不是提供的几何体,最好的方法是使用外部编辑器来创建场景,例如Blender也可以开源,可选择添加材质和纹理,然后将其导出到iOS可以使用的格式,例如DAE。在您的应用内,您可以加载此文件并获取SCNScene
及其相应的初始值设定项。加载场景后,您可以直接使用它来显示给用户或导航它以获得您想要使用的节点/几何/材料,然后将其添加到现有场景中。
假设您的文件名为scene.dae
并位于您的应用主程序包中,那么您可以将其加载为
let scene = SCNScene(named: “scene.dae”)
或者如果您愿意,也可以指定一个完整的URL
,请参阅documentation了解更多详细信息,请注意这些是可用的初始值设定项,因此请检查为无。
假设您的节点及其自定义几何体和纹理是场景中的唯一对象,您可以使用
获取对它的引用let obj = scene.rootNode.childNodes.first
请注意,这也是一个可选项,因此请检查nil值,如果我的假设不正确,您可以参考SCNNode documentation了解如何导航节点图,scene.rootNode
始终是您的起点。
现在你有你的场景和对象,我之前说你有两个选择:将场景直接链接到你的SCNView
(我不知道ARKit,但我想你有一个)而不是手动创建一个空的,或只采用对象/几何/材料,并通常将其添加到您已创建的场景。
如果您的对象不是静态的,而是动态生成的,您也可以通过构建SCNGeometry
逐点创建它,这样做有点棘手,您可以使用my library创建一些有用的函数以及帮助这个过程的课程。