Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.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
在Swift中使用Arkit识别图像时,如何播放本地视频?_Swift_Xcode_Scenekit_Arkit_Image Recognition - Fatal编程技术网

在Swift中使用Arkit识别图像时,如何播放本地视频?

在Swift中使用Arkit识别图像时,如何播放本地视频?,swift,xcode,scenekit,arkit,image-recognition,Swift,Xcode,Scenekit,Arkit,Image Recognition,我使用AR套件进行图像识别,当检测到图像时,我需要在当前场景中显示和播放视频(如检测到的图像上方) 看看你的代码,首先你要把你的SCNPlane设置为638米宽,356米高,我相信这不是你真正想要的 无论如何,这里有一个使用SKScene和SKVideoNode播放本地视频的示例,该示例运行良好: //-------------------------- // MARK: - ARSCNViewDelegate //-------------------------- extension Vi

我使用AR套件进行图像识别,当检测到图像时,我需要在当前场景中显示和播放视频(如检测到的图像上方)


看看你的代码,首先你要把你的
SCNPlane
设置为638米宽,356米高,我相信这不是你真正想要的

无论如何,这里有一个使用
SKScene
SKVideoNode
播放本地视频的示例,该示例运行良好:

//--------------------------
// MARK: - ARSCNViewDelegate
//--------------------------

extension ViewController: ARSCNViewDelegate {

    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

        //1. Check We Have An ARImageAnchor And Have Detected Our Reference Image
        guard let imageAnchor = anchor as? ARImageAnchor else { return }

        let referenceImage = imageAnchor.referenceImage

        //2. Get The Physical Width & Height Of Our Reference Image
        let width = CGFloat(referenceImage.physicalSize.width)
        let height = CGFloat(referenceImage.physicalSize.height)

        //3. Create An SCNNode To Hold Our Video Player With The Same Size As The Image Target
        let videoHolder = SCNNode()
        let videoHolderGeometry = SCNPlane(width: width, height: height)
        videoHolder.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
        videoHolder.geometry = videoHolderGeometry

        //4. Create Our Video Player
        if let videoURL = Bundle.main.url(forResource: "BlackMirrorz", withExtension: "mp4"){

            setupVideoOnNode(videoHolder, fromURL: videoURL)
        }

        //5. Add It To The Hierarchy
        node.addChildNode(videoHolder)
    }

    /// Creates A Video Player As An SCNGeometries Diffuse Contents
    ///
    /// - Parameters:
    ///   - node: SCNNode
    ///   - url: URL
    func setupVideoOnNode(_ node: SCNNode, fromURL url: URL){

        //1. Create An SKVideoNode
        var videoPlayerNode: SKVideoNode!

        //2. Create An AVPlayer With Our Video URL
        let videoPlayer = AVPlayer(url: url)

        //3. Intialize The Video Node With Our Video Player
        videoPlayerNode = SKVideoNode(avPlayer: videoPlayer)
        videoPlayerNode.yScale = -1

        //4. Create A SpriteKitScene & Postion It
        let spriteKitScene = SKScene(size: CGSize(width: 600, height: 300))
        spriteKitScene.scaleMode = .aspectFit
        videoPlayerNode.position = CGPoint(x: spriteKitScene.size.width/2, y: spriteKitScene.size.height/2)
        videoPlayerNode.size = spriteKitScene.size
        spriteKitScene.addChild(videoPlayerNode)

        //6. Set The Nodes Geoemtry Diffuse Contenets To Our SpriteKit Scene
        node.geometry?.firstMaterial?.diffuse.contents = spriteKitScene

        //5. Play The Video
        videoPlayerNode.play()
        videoPlayer.volume = 0

    }
}
更新:

如果要将视频放置在目标上方,可以执行以下操作:

  func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

        //1. Check We Have An ARImageAnchor And Have Detected Our Reference Image
        guard let imageAnchor = anchor as? ARImageAnchor else { return }


        let referenceImage = imageAnchor.referenceImage

        //2. Get The Physical Width & Height Of Our Reference Image
        let width = CGFloat(referenceImage.physicalSize.width)
        let height = CGFloat(referenceImage.physicalSize.height)

        //3. Create An SCNNode To Hold Our Video Player
        let videoHolder = SCNNode()
        let planeHeight = height/2
        let videoHolderGeometry = SCNPlane(width: width, height: planeHeight)
        videoHolder.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
        videoHolder.geometry = videoHolderGeometry

        //4. Place It About The Target
        let zPosition = height - (planeHeight/2)
        videoHolder.position = SCNVector3(0, 0, -zPosition)

        //5. Create Our Video Player
        if let videoURL = Bundle.main.url(forResource: "BlackMirrorz", withExtension: "mp4"){

            setupVideoOnNode(videoHolder, fromURL: videoURL)
        }

        //5. Add It To The Hierachy
        node.addChildNode(videoHolder)
    }

希望有帮助……

请展示您的代码,以及您尝试过的内容。请将代码粘贴为文本,不要发布屏幕截图。这里有很多代码似乎与问题无关,并且没有明确指示您试图解决的具体问题。看,哈哈。您已经发布了视图控制文件的正确代码。试着调试一下。我应该在哪里接受答案,实际上我还没有在我的帐户中找到答案?你能告诉我应该在哪里接受吗@乔希
  func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

        //1. Check We Have An ARImageAnchor And Have Detected Our Reference Image
        guard let imageAnchor = anchor as? ARImageAnchor else { return }


        let referenceImage = imageAnchor.referenceImage

        //2. Get The Physical Width & Height Of Our Reference Image
        let width = CGFloat(referenceImage.physicalSize.width)
        let height = CGFloat(referenceImage.physicalSize.height)

        //3. Create An SCNNode To Hold Our Video Player
        let videoHolder = SCNNode()
        let planeHeight = height/2
        let videoHolderGeometry = SCNPlane(width: width, height: planeHeight)
        videoHolder.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
        videoHolder.geometry = videoHolderGeometry

        //4. Place It About The Target
        let zPosition = height - (planeHeight/2)
        videoHolder.position = SCNVector3(0, 0, -zPosition)

        //5. Create Our Video Player
        if let videoURL = Bundle.main.url(forResource: "BlackMirrorz", withExtension: "mp4"){

            setupVideoOnNode(videoHolder, fromURL: videoURL)
        }

        //5. Add It To The Hierachy
        node.addChildNode(videoHolder)
    }