gpt4 book ai didi

ios - SKVideoNode 只在 SCNSphere 的一小部分

转载 作者:IT王子 更新时间:2023-10-29 05:37:58 26 4
gpt4 key购买 nike

我使用 SKVideoNode 作为我的 360 度视频球体的 Material ,但它只在球体的 xy 正向部分渲染视频,我从一个 URL 流式传输视频,它是 .m3u8 引用 - SKVideoNode as texture for 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; 导致视频要投影到球体的下半部分,但不是正确显示,我只能看到拉伸(stretch)的环,更改 WrapMode 使得 iOS 6 屏幕只显示一种颜色。

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

最佳答案

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

它为单视场和立体球形 360 度视频使用 SKVideoNode。

我确实注意到您没有设置 SKScene 的 positionanchorPoint,我相信这是您必须做的事情才能获得 SKVideoNode ( Material )定位正确。

关于ios - SKVideoNode 只在 SCNSphere 的一小部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35480366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com