首页 > 解决方案 > 在 ARKIT 中无法预览下载的图像

问题描述

我一直在开发一个 ARKit 应用程序,我实现了检测场景中的图片和播放场景中的视频的目标。发生的问题是当我试图从互联网上获取图像时。* 图像被检测到并开始播放(我能够听到音频),但从未在场景中显示任何视频。(我将下面的代码恢复到我开始的位置) * 我真正想要的是更新参考图像和当我的应用在 App Store 中时,随时随地播放的视频。

请告诉最好的解决方案...谢谢

下面是我的完整代码: 导入 UIKit 导入 SceneKit 导入 ARKit 导入 Alamofire 导入 AlamofireImage

类视图控制器:UIViewController,ARSCNViewDelegate {

@IBOutlet var sceneView: ARSCNView!

var imageServer = [UIImage]()

var trackedImages = Set<ARReferenceImage>()

let configuration = ARImageTrackingConfiguration()

let videoNode = SKVideoNode(url: URL(fileURLWithPath: "https://example.com/video1.mp4"))

override func viewDidLoad() {
    super.viewDidLoad()

    sceneView.delegate = self
    sceneView.showsStatistics = true

}


override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

            fetchImage {
                self.configuration.trackingImages = self.trackedImages
                self.configuration.maximumNumberOfTrackedImages = 1
                self.sceneView.session.run(self.configuration)
            }

}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    sceneView.session.pause()
}


func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {

    let node = SCNNode()

    if let imageAnchor = anchor as? ARImageAnchor {

        videoNode.play()

        let videoScene = SKScene(size: CGSize(width: 480, height: 360))


        videoNode.position = CGPoint(x: videoScene.size.width / 2, y: videoScene.size.height / 2)

        videoNode.yScale = -1.0

        videoScene.addChild(videoNode)


        let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)

        plane.firstMaterial?.diffuse.contents = videoScene

        let planeNode = SCNNode(geometry: plane)

        planeNode.eulerAngles.x = -.pi / 2

        node.addChildNode(planeNode)

    }

    return node

}

func fetchImage(completion: @escaping ()->()) {
        Alamofire.request("https://example.com/four.png").responseImage { response in
            debugPrint(response)

            print(response.request as Any)
            print(response.response as Any)
            debugPrint(response.result)

            if let image = response.result.value {
                print("image downloaded: \(image)")

                self.imageServer.append(image)

                print("ImageServer append Successful")
                print("The new number of images = \(self.imageServer.count)")

            }
            completion()
        }
}


}

标签: iosswiftxcoderealmarkit

解决方案


推荐阅读