SKVideoNode (embedded dans SKScene) en tant que texture pour le nœud de kit de scène ne fonctionne pas

Je tente de mapper une video en tant que texture à un cylindre primitif pour un projet VR en utilisant Scenekit: un SKVideoNode incorporé dans un SKScene en tant que texture pour un object SceneKit SCNTube, et je n'arrive pas à afficher la video comme une image fixe l'image serait. Le code PLayground ci-dessous doit générer une video déplacée mappée sur un cylindre, mais le mappage ne fonctionne pas:

import UIKit import SceneKit // for 3D mapping import SpriteKit // for SKVideoNode import QuartzCore // for basic animation import XCPlayground // for live preview import AVFoundation // for video playback engine // create a scene view with an empty scene var sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300)) var scene = SCNScene() sceneView.scene = scene // start a live preview of that view XCPShowView("The Scene View", view: sceneView) // default lighting sceneView.autoenablesDefaultLighting = true // a geometry object var tube = SCNTube(innerRadius: 1.99, outerRadius: 2, height: 3) var tubeNode = SCNNode(geometry: tube) scene.rootNode.addChildNode(tubeNode) // video scene let urlStr = NSBundle.mainBundle().pathForResource("sample", ofType: "mp4") let url = NSURL(fileURLWithPath: urlStr!) let asset = AVURLAsset(URL: url, options: nil) let playerItem = AVPlayerItem(asset: asset) let player = AVPlayer(playerItem: playerItem) let videoNode = SKVideoNode(AVPlayer: player) let spritescene = SKScene(size: CGSize(width: 1211, height: 431)) videoNode.size.width=spritescene.size.width videoNode.size.height=spritescene.size.height spritescene.addChild(videoNode) // configure the geometry object var myImage = UIImage.init(named: "BandImage.jpeg") tube.firstMaterial?.diffuse.contents = spritescene // set a rotation axis (no angle) to be able to // use a nicer keypath below and avoid needing // to wrap it in an NSValue tubeNode.rotation = SCNVector4(x: 0.0, y: 1.0, z: 0.0, w: 0.0) // animate the rotation of the torus var spin = CABasicAnimation(keyPath: "rotation.w") // only animate the angle spin.toValue = 2.0*M_PI spin.duration = 3 spin.repeatCount = HUGE // for infinity tubeNode.addAnimation(spin, forKey: "spin around") // starts the video, solving the issue sceneView.playing = true 

J'ai posté mon code (et quelques exemples de contenu panoramique) sur github pour tous ceux qui souhaitent avoir un exemple de code fonctionnel ou qui souhaitent collaborer sur un lecteur video panoramique opensource:

https://github.com/jglasse/OSVR

Comme il se trouve, il semble que le simulateur (et les aires de jeux) ne prennent pas en charge cette fonctionnalité. Déplacer le code ci-dessus vers un projet et en cours d'exécution sur un périphérique, je l'ai enfin fonctionné.

Donc, la morale de l'histoire est – si vous utilisez SKVideoNodes comme textures pour SCenekit, utilisez un périphérique réel pour le test.