実現したいこと
ARで画像認識を行い、その上に動画(mp4)を自動再生したい。
困りごと
画像認識はでき、その上に動画であろう平面オブジェクトがグレー色で配置される。(何も配置されない場合は真っ白の四角が配置される)
しかし、その動画らしき平面オブジェクトは再生されない。
現状のコード
import UIKit import SceneKit import ARKit import SafariServices class ViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: Bundle.main) override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self let scene = SCNScene() sceneView.scene = scene } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let configuration = ARImageTrackingConfiguration() configuration.trackingImages = referenceImages! sceneView.session.run(configuration) } func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { guard let imageAnchor = anchor as? ARImageAnchor else { return } let referenceImage = imageAnchor.referenceImage let width = CGFloat(referenceImage.physicalSize.width) let height = CGFloat(referenceImage.physicalSize.height) let videoHolder = SCNNode() let videoHolderGeometry = SCNPlane(width: width, height: height) videoHolder.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0) videoHolder.geometry = videoHolderGeometry //この辺りが原因? if let videoURL = Bundle.main.url(forResource: "img.scnassets/route", withExtension: "mp4"){ setupVideoOnNode(videoHolder, fromURL: videoURL) } node.addChildNode(videoHolder) videoHolder.name = "route" } func setupVideoOnNode(_ node: SCNNode, fromURL url: URL){ var videoPlayerNode: SKVideoNode! let videoPlayer = AVPlayer(url: url) videoPlayerNode = SKVideoNode(avPlayer: videoPlayer) videoPlayerNode.yScale = -1 let spriteKitScene = SKScene(size: CGSize(width: 1000, height: 1000)) spriteKitScene.scaleMode = .aspectFit videoPlayerNode.position = CGPoint(x: spriteKitScene.size.width/2, y: spriteKitScene.size.height/2) videoPlayerNode.size = spriteKitScene.size spriteKitScene.addChild(videoPlayerNode) node.geometry?.firstMaterial?.diffuse.contents = spriteKitScene videoPlayerNode.play() videoPlayer.volume = 5 } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { guard let location = touches.first?.location(in: sceneView), let result = sceneView.hitTest(location, options: nil).first else { return } let node = result.node if node.name == "route" { let safariVC = SFSafariViewController(url: URL(string: "https://images.google.com/?gws_rd=ssl")!) self.present(safariVC, animated: true, completion: nil) } } }
どのようにすれば動画が再生されるか、ご教授ください。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。