360 ビデオの球体のマテリアルとして SKVideoNode を使用していますが、球体の xy 正の部分でのみビデオをレンダリングします。.m3u8
参照用の URL からビデオをストリーミングしています - SCNSphere のテクスチャとしての SKVideoNode
複数の人が私と同じ問題を抱えているようです
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;
、ビデオが球体の下半分に投影されますが、正しく表示されるのではなく、引き伸ばされたリングWrapMode
だけが表示され、iOS 6 の画面に 1 色だけが表示されるように変更されます。
球の左側のビデオを使用videoMaterial.diffuse.contents.transfom(SCNMatrix4MakeScale(1,0,1));
してレンダリングしますが、テクスチャ/ビデオを引き伸ばします。videoMaterial.diffuse.wrapT = SCNWrapMode.Repeat;