我是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
答案 0 :(得分:2)
要将.dae
或.obj
对象添加到场景,您需要获取childNode
对象的.dae
并将其添加到场景中。建议您使用Xcode的“编辑器”菜单将.dae
文件转换为.scn
。
您还需要节点的名称,可以在“场景图视图”中访问该节点的名称。只需单击您的.obj
文件,然后单击Xcode场景编辑器左下角的“场景图视图”按钮。在这里,我节点的名称是“ objectNode”:
现在您可以将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
...
}