【发布时间】:2016-11-08 00:44:15
【问题描述】:
我用 SKVideoNode 创建了一个 SKScene,然后应用到一个球体几何体。
这里是关键代码:
// Create a SKScene to play video
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"2222" ofType:@"mp4"];
NSURL* sourceMovieURL = [NSURL fileURLWithPath:filePath];
AVPlayer* player = [AVPlayer playerWithURL:sourceMovieURL];
SKVideoNode* videoNode = [SKVideoNode videoNodeWithAVPlayer:player];
//CGSize size = CGSizeMake(512, 512);
CGSize size = [UIScreen mainScreen].bounds.size;
videoNode.size = size;
videoNode.position = CGPointMake(size.width/2.0, size.height/2.0);
SKScene* spriteScene = [SKScene sceneWithSize:size];
[spriteScene addChild:videoNode];
// create a material with SKScene
SCNMaterial* material = [SCNMaterial material];
material.doubleSided = true;
material.diffuse.contents = spriteScene;
[sphereNode.geometry replaceMaterialAtIndex:0 withMaterial:material];
[videoNode play];
[_scnScene.rootNode addChildNode:sphereNode];
// create SCNRenderer to render the scene
_renderer = [SCNRenderer rendererWithContext:cardboardView.context options:nil];
_renderer.scene = _scnScene;
_renderer.pointOfView = _scnCameraNode;
在drawEye函数中:
- (void)cardboardView:(GVRCardboardView *)cardboardView drawEye:(GVREye)eye withHeadTransform:(GVRHeadTransform *)headTransform
{
//CGRect viewport = [headTransform viewportForEye:eye];
// Get the head matrix.
const GLKMatrix4 head_from_start_matrix = [headTransform headPoseInStartSpace];
// Get this eye's matrices.
GLKMatrix4 projection_matrix = [headTransform projectionMatrixForEye:eye near:_scnCamera.zNear far:_scnCamera.zFar];
GLKMatrix4 eye_from_head_matrix = [headTransform eyeFromHeadMatrix:eye];
// Compute the model view projection matrix.
GLKMatrix4 view_projection_matrix = GLKMatrix4Multiply(
projection_matrix, GLKMatrix4Multiply(eye_from_head_matrix, head_from_start_matrix));
// Set the projection matrix to camera
[_scnCamera setProjectionTransform:SCNMatrix4FromGLKMatrix4(view_projection_matrix)];
// Render the scene
[_renderer renderAtTime:0];
}
运行代码时会中断
[_renderer renderAtTime:0]
输出是:
Failed to create IOSurface image (texture)
Assertion failed: (result), function create_texture_from_IOSurface, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/Jet/Jet-2.6.1/Jet/jet_context_OpenGL.mm, line 570.
当我从 SKScene 中删除 SKVideoNode 时,一切正常。
有什么帮助吗?谢谢。
【问题讨论】:
-
我们有同样的问题,除了它不会出现在我们所有的设备上......或者可能的 iOS 版本上。您正在运行哪些设备和版本的 iOS、xcode 和 mac?
-
设备是 iphone 6s, ios9.3.2, Mac mini(Late 2014) OS X EI Caption version 10.11.5 with xcode 7.3.1
-
因此,我们的工作假设是,在 5s 及更高版本的 ios 9+ 上,操作系统引入了更改或错误。我们认为这可能与 iOS 在这些设备上使用金属而不是 OpenGL 的偏好有关,但现在更多的是猜测。如果我们发现更多,我们会发布更多。
-
好的,谢谢!但是 GVRSDK 使用 OpenGL 而不是金属,我希望 Google 有一天能解决这个问题!如果您找到任何解决方案,请告诉我。我会很感激的。
-
我们在带有 SPHERE 和 SKVIDEONODE 的 iOS 10 Beta 中看到了这一点。这在 iOS 9 上运行良好。我们有一个示例应用程序,将 PrefersOpenGL 设置为 NO 并且它可以工作,但是 YES 不起作用并给出同样的问题,但在 iOS 10 Beta 上,并且在 iOS 9 上工作
标签: ios video google-cardboard google-vr skvideonode