如何在ARKit2中将3D对象添加为SCNNode?

时间:2018-12-19 07:50:43

标签: ios scenekit arkit

我是ARKit2的新手,并跟随了一些教程和官方文档。

问题

如何将3d对象添加为SCNNode()

代码

let artFrame = SCNBox(width: CGFloat(w), height: CGFloat(h), length: 0.002, chamferRadius: 0.02)
artFrame.firstMaterial?.diffuse.contents = imageToDisplay
let artFrameNode = SCNNode(geometry: artFrame)
artFrameNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: artFrame, options: nil))
artFrameNode.position = SCNVector3Make(Float(x), Float(y), Float(z*3))
sceneView.scene.rootNode.addChildNode(artFrameNode)

根据上面的代码,我正在SCNBox中使用预定义的SCNNode。有什么方法可以使用3d.dae之类的.obj对象而不是SCNBox并用Image包装?

我查看了文档,并说您可以将Mesh objects添加到SCNNode

https://developer.apple.com/documentation/scenekit/scnnode/1419841-init

编辑

每当我添加一个新的.dae并将其转换为.scn时。 Xcode引发以下错误:

/Users/paly/Library/Developer/Xcode/DerivedData/sample-bohiilnhthuwfkechtmhscucgccc/Build/Products/Debug-iphoneos/sample.app: resource fork, Finder information, or similar detritus not allowed
Command CodeSign failed with a nonzero exit code

1 个答案:

答案 0 :(得分:2)

要将.dae.obj对象添加到场景,您需要获取childNode对象的.dae并将其添加到场景中。建议您使用Xcode的“编辑器”菜单将.dae文件转换为.scn

您还需要节点的名称,可以在“场景图视图”中访问该节点的名称。只需单击您的.obj文件,然后单击Xco​​de场景编辑器左下角的“场景图视图”按钮。在这里,我节点的名称是“ objectNode”:

enter image description here

现在您可以将3D对象作为SCNNode添加到场景中:

override func viewDidLoad() {
    super.viewDidLoad()
    ...

    let objectScene = SCNScene(named: "object.scn") // Here, add your .obj or .scn file
    let objectNode: SCNNode = objectScene.rootNode.childNode(withName: "YourObjectName", recursively: true) // Get the object name from Scene Graph View, which is "objectNode" for me.
    objectNode.position = SCNVector3(0,0,-4)

    let scene = SCNScene() // Main scene of the app
    scene.rootNode.addChildNode(objectNode)
    sceneView.scene = scene
    ...
}