仅当节点或摄像机移动时,SKVideoNode才在SCNScene中渲染

Tra*_*vis 2 avfoundation ios scenekit swift

我正在使用一种非常简单的方法来设置SKVideoNode并将其通过几何体的漫反射内容放置在SCNNode中。当我这样做时,只有相机或节点移动时,纹理才能正确更新并正确显示视频。当两者都静止不动时,纹理将永远不会更新(例如甚至无法播放视频),但声音会播放。

显然,它仍在播放视频,但渲染不正确。我不知道为什么。

func setupAndPlay() {

    // create the asset & player and grab the dimensions
    let path = NSBundle.mainBundle().pathForResource("indycar", ofType: "m4v")!
    let asset = AVAsset(URL: NSURL(fileURLWithPath: path))
    let size = asset.tracksWithMediaType(AVMediaTypeVideo)[0].naturalSize

    let player = AVPlayer(playerItem: AVPlayerItem(asset: asset))

    // setup the video SKVideoNode
    let videoNode = SKVideoNode(AVPlayer: player)
    videoNode.size = size
    videoNode.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5)

    // setup the SKScene that will house the video node
    let videoScene = SKScene(size: size)
    videoScene.addChild(videoNode)

    // create a wrapper ** note that the geometry doesn't matter, it happens with spheres and planes
    let videoWrapperNode = SCNNode(geometry: SCNSphere(radius: 10))
    videoWrapperNode.position = SCNVector3(x: 0, y: 0, z: 0)

    // set the material's diffuse contents to be the video scene we created above
    videoWrapperNode.geometry?.firstMaterial?.diffuse.contents = videoScene
    videoWrapperNode.geometry?.firstMaterial?.doubleSided = true

    // reorient the video properly
    videoWrapperNode.scale.y = -1
    videoWrapperNode.scale.z = -1

    // add it to our scene
    scene.rootNode.addChildNode(videoWrapperNode)

    // if I uncomment this, the video plays correctly; if i comment it, the texture on the videoWrapperNode only 
    // get updated when I'm moving the camera around. the sound always plays properly.
    videoWrapperNode.runAction( SCNAction.repeatActionForever( SCNAction.rotateByAngle(CGFloat(M_PI * 2.0), aroundAxis: SCNVector3(x: 0, y: 1, z: 0), duration: 15.0 )))

    videoNode.play()
}
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过类似的事情?任何帮助,将不胜感激。

loc*_*ock 5

听起来好像需要设置.playing = true您的SCNView

文档

如果此属性的值为NO(默认值),则SceneKit不会增加场景时间,因此不会播放与场景关联的动画。将此属性的值更改为YES,即可开始对场景进行动画处理。