【问题标题】:How to place a 3D model of type OBJ with ARKit?如何使用 ARKit 放置 OBJ 类型的 3D 模型?
【发布时间】:2017-12-21 23:17:12
【问题描述】:

在使用新的 Apple 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() 中。

【问题讨论】:

  • 你的头有多大? 3D 资产通常以任意比例构建,但在 ARKit 中,一个单位的场景空间映射到一个真实世界的仪表。例如,如果您的 OBJ 网格有几十个单位宽,那么它在 AR 中的显示方式可能不是您想要的。您可以在运行时使用boundingBox 属性或通过在 Xcode 的场景编辑器中加载 OBJ 文件来检查其大小。

标签: ios swift augmented-reality arkit .obj


【解决方案1】:
    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 或其他不起作用。应用程序没有显示任何内容,也没有抛出任何错误。
猜你喜欢
  • 1970-01-01
  • 2018-01-31
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
相关资源
最近更新 更多