3

我刚开始从苹果看 ARKitExample,我还在学习。我需要像交互式指南一样。例如,我们可以在那个区域检测到一些东西(比如 QRCode),我可以用 1 个标签显示吗?

是否可以将自定义视图(可能是 UIVIew、UIlabel)添加到表面?

编辑

我看到了一些添加行的示例。我将需要找到如何添加额外的视图或图像。

    let mat = SCNMatrix4FromMat4(currentFrame.camera.transform)
    let dir = SCNVector3(-1 * mat.m31, -1 * mat.m32, -1 * mat.m33)
    let currentPosition = pointOfView.position + (dir * 0.1)

    if button!.isHighlighted {
        if let previousPoint = previousPoint {
            let line = lineFrom(vector: previousPoint, toVector: currentPosition)
            let lineNode = SCNNode(geometry: line)
            lineNode.geometry?.firstMaterial?.diffuse.contents = lineColor
            sceneView.scene.rootNode.addChildNode(lineNode)
        }
    }

我认为这段代码应该能够添加自定义图像。但我需要找到整个样本。

func updateRenderer(_ frame: ARFrame){
    drawCameraImage(withPixelBuffer:frame.capturedImage)
    let viewMatrix = simd_inverse(frame.came.transform)
    let prijectionMatrix = frame.camera.prijectionMatrix
    updateCamera(viewMatrix, projectionMatrix) 
    updateLighting(frame.lightEstimate?.ambientIntensity)
    drawGeometry(forAnchors: frame.anchors)
}
4

2 回答 2

4

ARKit 不是渲染引擎——它不会为你显示任何内容。ARKit 提供有关真实世界空间的信息,供渲染引擎使用,例如 SceneKit、Unity 以及您构建的任何自定义引擎(使用 Metal 等),以便它们可以显示似乎居住在真实世界空间中的内容。因此,对于 ARKit 的任何“我如何显示”问题实际上都是针对您与 ARKit 一起使用的任何渲染引擎的问题。

SceneKit 是使用 ARKit 显示 3D 内容的简单开箱即用、无需额外软件的方式,所以我想您是在问这个问题。

SceneKit 无法将 aUIView作为 3D 场景的一部分进行渲染。但它可以将平面、立方体或其他形状以及纹理映射 2D 内容渲染到它们上面。如果你想在 ARKit 检测到的平面上画一个文本标签,那就是研究的方向——按照示例的,嗯,示例创建SCNPlane与检测到的 s 对应的对象ARPlaneAnchor,为自己获取一些文本的图像,并将该图像设置为平面几何的漫反射内容。

于 2017-06-23T17:58:48.997 回答
-1

是的,您可以在 ARKit 场景中添加自定义视图。只需制作您的视图图像并将其添加到您想要的任何位置。您可以使用以下代码获取 UIView 的图像

func image(with view: UIView) -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
    defer { UIGraphicsEndImageContext() }
    if let context = UIGraphicsGetCurrentContext() {
        view.layer.render(in: context)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        return image
    }
    return nil
}
于 2018-07-30T15:21:20.870 回答