【问题标题】:How to add a 3D object as SCNNode in ARKit2?如何在 ARKit2 中添加 3D 对象作为 SCNNode?
【发布时间】:2019-05-19 16:18:30
【问题描述】:

我是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)

根据上面的代码,我在SCNNode 中使用预定义的SCNBox。有什么方法可以使用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

【问题讨论】:

    标签: ios scenekit arkit


    【解决方案1】:

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

    您还需要节点的名称,该名称可以在场景图形视图中访问。只需单击您的 .obj 文件,然后单击 Xcode 场景编辑器左下角的 Scene Graph View 按钮。在这里,我的节点名称是“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
        ...
    }
    

    【讨论】:

    • 感谢您的回答!。您能否也检查一下#edit 部分。我收到编译错误。
    • @AmitPal 不客气,你试过这个吗? :stackoverflow.com/questions/39652867/…
    • 哦,是的,我正要试一试。不过谢谢。顺便说一句,我正在使用此代码 `objectNode.geometry?.firstMaterial?.diffuse.contents = imageToDisplay objectNode.geometry?.firstMaterial?.diffuse.contents = imageToDisplay objectNode.geometry? 来使用SCNNodegeometry 属性。 firstMaterial?.multiply.contents = imageToDisplay objectNode.geometry?.firstMaterial?.multiply.intensity = 0.5 objectNode.geometry?.firstMaterial?.lightingModel = .constant` 但它只是显示对象。如何将图像包裹起来?
    • 尝试使用 Xode 的场景可视化编辑器进行设置,看看是否可以从那里更改!
    • 啊!实际上。计划是从 3d 对象周围的 URL 动态加载图像。我猜从场景可视化编辑器设置是行不通的。
    猜你喜欢
    • 2019-05-20
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多