SKVideoNode仅限于SCNSphere的一小部分

我正在使用SKVideoNode作为360video的球体材质,但它只在球体的xy正面部分渲染video,我正在从URL传输video,它是.m3u8供参考 – SKVideoNode作为纹理对于SCNSphere多人似乎和我有同样的问题

 func makeSphere() { let sceneView = SCNView(frame: self.view.frame); self.view.addSubview(sceneView); var screenSize: CGRect = UIScreen.mainScreen().bounds; var screenWidth = screenSize.width; var screenHeight = screenSize.height; sceneView.frame.size.height = screenHeight * 1; sceneView.frame.size.width = screenWidth * 1; sceneView.center.x = screenWidth * 0.5; let scene = SCNScene(); sceneView.scene = scene; sphereGeometry = SCNSphere(radius: 5); sphereNode = SCNNode(geometry: sphereGeometry); sphereNode.position = SCNVector3(x: 0, y: 0, z: 0); sphereGeometry.segmentCount = 55; constraint = SCNLookAtConstraint(target: sphereNode); let camera = SCNCamera(); let cameraNode = SCNNode(); cameraNode.camera = camera; cameraNode.position = SCNVector3(x: 0, y: 0, z: 0); let light = SCNLight(); light.type = SCNLightTypeOmni; let lightNode = SCNNode(); lightNode.light = light; lightNode.position = SCNVector3(x: 0, y: 0, z: 0); cameraNode.constraints = [constraint]; scene.rootNode.addChildNode(cameraNode); scene.rootNode.addChildNode(sphereNode); let videoMaterial = SCNMaterial(); let path = "http://video-url.m3u8"; let url = NSURL(string: path); let asset = AVURLAsset(URL: url!,options: nil); let playerItem = AVPlayerItem(asset: asset); let player = AVPlayer(playerItem: playerItem); let videoNode = SKVideoNode(AVPlayer: player); let size = CGFloat(100.0); let spriteScene = SKScene(size: CGSizeMake(size,size)); videoNode.size.width = size; videoNode.size.height = size; spriteScene.addChild(videoNode); videoMaterial.diffuse.contents = spriteScene; videoMaterial.specular.contents = UIColor.redColor(); videoMaterial.shininess = 1.0; videoMaterial.doubleSided = true; sphereGeometry.materials = [videoMaterial]; videoNode.play(); } 

您可以使用上面的代码重现我的问题,如果它有所不同,当我显示一个图像时它工作得很好。

编辑

使用videoMaterial.diffuse.contents.transfom(SCNMatrix4MakeScale(0,-1,1));videoMaterial.diffuse.wrapT = SCNWrapMode.Repeat; 导致video投射到球体的下半部分,但不是正确显示所有我能看到的是拉伸环,更改WrapMode使得iOS 6屏幕只显示1种颜色。

使用videoMaterial.diffuse.contents.transfom(SCNMatrix4MakeScale(1,0,1));videoMaterial.diffuse.wrapT = SCNWrapMode.Repeat; 渲染球体左侧的video,但会拉伸纹理/video。

很难具体说明出了什么问题,但我在这里有一个可行的解决方案: https : //github.com/alfiehanssen/ThreeSixtyPlayer

它使用SKVideoNode进行单视场和立体球形360video。

我注意到你没有设置你的SKScene的positionanchorPoint ,这是我认为你必须做的事情,以便正确定位SKVideoNode(材料)。