首页 文章

ARKit API的例子

提问于
浏览
0

我_1146157_的ARKit API和我已经将他们的example ARKitExample project推到了GitHub .

在此演示/示例项目中,您将手机摄像头移动到您的环境中,它似乎会自动检测平面并将一组"focus squares"放在摄像机在该表面上居中的位置 . 如果您然后按下 "+" UI按钮并从多个对象(灯,杯子,花瓶等)中选择一个,它将渲染该虚拟对象代替焦点方块 . 你可以看到所有这些在行动right here这可能比我试图解释它更好!

我试图在代码中找到实际调用虚拟对象并在屏幕上呈现的位置 . 这将是它被选中后,我认为发生here

@IBAction func chooseObject(_ button: UIButton) {
    // Abort if we are about to load another object to avoid concurrent modifications of the scene.
    if isLoadingObject { return }

    textManager.cancelScheduledMessage(forType: .contentPlacement)
    performSegue(withIdentifier: SegueIdentifier.showObjects.rawValue, sender: button)
}

但实际上,用户选择一个虚拟对象然后在焦点方块当前所在的任何地方进行渲染 - 我正在寻找这种情况发生的地方,任何想法?

1 回答

  • 1

    它将virtualObject实例(它是SCNNode的子类)添加为SCNScene根节点的子节点:

    func virtualObjectSelectionViewController(_: VirtualObjectSelectionViewController, didSelectObjectAt index: Int) {
        guard let cameraTransform = session.currentFrame?.camera.transform else {
            return
        }
    
        let definition = VirtualObjectManager.availableObjects[index]
        let object = VirtualObject(definition: definition)
        let position = focusSquare?.lastPosition ?? float3(0)
        virtualObjectManager.loadVirtualObject(object, to: position, cameraTransform: cameraTransform)
        if object.parent == nil {
            serialQueue.async {
                self.sceneView.scene.rootNode.addChildNode(object)
            }
        }
    }
    

相关问题