首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKVideoNode只在SCNSphere的一小部分上

SKVideoNode只在SCNSphere的一小部分上
EN

Stack Overflow用户
提问于 2016-02-18 11:36:12
回答 1查看 958关注 0票数 10

我使用SKVideoNode作为我的360视频的素材,但是它只呈现在这个球体的xy正向部分,我从一个URL上播放这个视频--这是一个参考的.m3u8 -- SKVideoNode as texture for SCNSphere多个人似乎和我有相同的问题

代码语言:javascript
复制
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;将视频呈现在球体的左侧,但是扩展了纹理/视频。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-09 18:06:50

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

它使用SKVideoNode的单镜和立体球面360视频。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35480366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档