ARKIt 中的非 LiDAR 设备精度

问题描述 投票:0回答:0

我有一个基于 Apple 示例代码的测试应用程序。它将节点放入 3D 空间并测量它们之间的距离。这在 LiDAR 设备(iPhone12Pro 等)上运行良好。在 iPhone11(非 LiDAR)上,节点并不总是位于一个平面上,并且离相机太近,并且不会将焦点方块更改为水平或垂直平面对齐。 我已经检查了 Apple 的默认测量应用程序,这会将节点正确地放在平面上并正确检测平面对齐。

我有如下示例代码,用于从屏幕位置获取世界位置。

/// Convert screen 2D coordinate to 3D world postion
    func screenToWorld(point: CGPoint) -> simd_float3? {
        if hasLidarSupport {
            guard sceneView.session.currentFrame != nil else { return nil }
            guard let raycastQuery = sceneView.raycastQuery(from: point, allowing: .estimatedPlane, alignment: .any) else { return nil }
            let raycastResults = sceneView.session.raycast(raycastQuery)
            guard let result = raycastResults.first else { return nil }
            let worldCoordinates = simd_float3(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)
            return worldCoordinates
        }else {
            let hitTestResults = sceneView.hitTest(point, types: [.estimatedVerticalPlane, .estimatedHorizontalPlane, .existingPlane, .existingPlaneUsingExtent, .existingPlaneUsingGeometry]) 
                    if let result = hitTestResults.first {
                        let worldCoordinates = simd_float3(x: result.worldTransform.columns.3.x, y: result.worldTransform.columns.3.y, z: result.worldTransform.columns.3.z)
                        return worldCoordinates
                    }
                    return nil
        }
        
    }
swift scenekit arkit
© www.soinside.com 2019 - 2024. All rights reserved.