Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法获取二维码的正确坐标,ARKit-Swift_Swift_Arkit - Fatal编程技术网

无法获取二维码的正确坐标,ARKit-Swift

无法获取二维码的正确坐标,ARKit-Swift,swift,arkit,Swift,Arkit,我试图在swift中的二维码上方放置一个对象。我能够检测到二维码,但是盒子的放置位置错误。我真的不明白这种安排是如何运作的。我知道如何在平面上放置物体。我是否需要以某种方式将检测到的平面与它表示检测二维码的位置联系起来?任何关于这个SConvector栏目工作原理的信息都将不胜感激,哈哈。此外,如果CIDector已经过时,并且有了新的方法 以下是检测QR码并放置方框的片段: var discoveredQRCodes=字符串 func session(_ session: ARSession,

我试图在swift中的二维码上方放置一个对象。我能够检测到二维码,但是盒子的放置位置错误。我真的不明白这种安排是如何运作的。我知道如何在平面上放置物体。我是否需要以某种方式将检测到的平面与它表示检测二维码的位置联系起来?任何关于这个SConvector栏目工作原理的信息都将不胜感激,哈哈。此外,如果CIDector已经过时,并且有了新的方法

以下是检测QR码并放置方框的片段: var discoveredQRCodes=字符串

func session(_ session: ARSession, didUpdate frame: ARFrame) {
        
        //print("Updated")
        if time != 0.5 {
            return
        }
    
        DispatchQueue.global(qos: .background).async {

        let image = CIImage(cvPixelBuffer: frame.capturedImage)
        let detector = CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: nil)
        let features = detector!.features(in: image)

        
            
        for feature in features as! [CIQRCodeFeature] {
            if !self.discoveredQRCodes.contains(feature.messageString!) {
                self.discoveredQRCodes.append(feature.messageString!)
                let url = URL(string: feature.messageString!)
                let position = SCNVector3(frame.camera.transform.columns.3.x,
                                          frame.camera.transform.columns.3.y,
                                          frame.camera.transform.columns.3.z)
//                add3DModel(fromURL: url!, toPosition: getPositionBasedOnQRCode(frame: frame, position: "df"))
                print(position)
                print(url)
                
                DispatchQueue.main.async {
                let boxNode = SCNNode()
                boxNode.geometry = SCNBox(width: 0.04, height: 0.04, length: 0.04, chamferRadius: 0.002)
                boxNode.geometry?.firstMaterial?.diffuse.contents = UIColor.green
                boxNode.position = position
                boxNode.name = "node"
                self.arView.scene.rootNode.addChildNode(boxNode)
                }
                //add3dInstance(fromURL: url!, toPosition: position)
            }
        }
            
        }
            
        
}
以下是结果的图像:

以下是一些调试输出:
SConvector3(x:0.023941405,y:0.040143043,z:0.056782123)

首先,将
boxNode
位置设置为相机位置。这不是你想要的

第二,任何二维码检测器都在图像空间中提供二维边界框坐标。要将二维坐标转换为场景坐标,需要找到从摄影机到二维码平面的光线


请检查代码。

嘿,伙计,你拿着这个有什么收获吗?