如何使用ARKit放置一个OBJ类型的3D模型?

6

我需要帮忙使用新的苹果ARKit放置一个3D模型。能否放置一种OBJ类型的对象?我试图放置一个骷髅的3D模型。

//Load the OBJ file
let bundle = Bundle.main
guard let url = bundle.url(forResource: "Cranial", withExtension: "obj") else {
    fatalError("Failed to find model file")
}

let asset = MDLAsset(url:url)
guard let object = asset.object(at: 0) as? MDLMesh else {
    fatalError("Failed to get mesh from asset")
}

let scene = SCNScene()
let nodeCranial = SCNNode.init(mdlObject: object)
nodeCranial.simdPosition = float3(0, 0, 0.5)
sceneView.scene.rootNode.addChildNode(nodeCranial)

我不知道为什么相机前面什么都没有显示出来。如果我使用以下行而不是上面的nodeCranial,则可以正常工作:
let cubeNode = SCNNode(geometry: SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0))

为什么OBJ文件不能工作?上面的代码在viewDidLoad()函数中。

2
你的头有多大?3D 资产通常是按任意比例构建的,但在 ARKit 中,一个场景空间单位映射到一个现实世界的米。如果你的 OBJ 网格宽度为几十个单位,它可能不会以你想要的方式出现在 AR 中。你可以在运行时使用 boundingBox 属性检查其大小,或通过在 Xcode 的场景编辑器中加载 OBJ 文件来检查其大小。 - rickster
1个回答

9
    let tempScene = SCNScene(named: "art.scnassets/cat/cat.obj")!
    modelNode = tempScene.rootNode
    modelNode.simdPosition = float3(0, 0, 0.5)
    sceneView.scene.rootNode.addChildNode(modelNode)

您可以按照以下方式加载.obj、.scn或.dae文件。


.scn 相关的部分运行良好,但添加 objc 或其他内容无法正常工作。应用程序既不显示任何内容,也不抛出任何错误。 - Jamil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接