Objective-C、Objective-C++、C++ 和 Scene Kit
Objective-C, Objective-C++, C++ and Scene Kit
我有一个混合了纯 C++ 和 Objective-C++ 的项目,以便合并一些 C++ 库。
我试过添加一些基本的 SCNScenes
到组合中。 (我的基本意思是一个场景中有一个盒子节点,就是这样)。每次我收到错误:
Assertion failed: (renderSize.x != 0), function -[SCNRenderContextMetal _setupDescriptor:forPass:isFinalTechnique:], file /BuildRoot/Library/Caches/com.apple.xbs/Sources/SceneKit/SceneKit-332.6/sources/Core3DRuntime/NewRenderer/SCNRenderContextMetal.mm, line 688.
有谁知道是什么原因造成的,如果知道我该如何解决?
编辑:
在我的 ViewController.mm
我有:
self.sceneView = [[SCNView alloc] initWithFrame:frame];
self.sceneView.scene = [SCNScene scene];
SCNNode *cube = [SCNNode nodeWithGeometry:[SCNBox boxWithWidth:1.0 height:1.0 depth:1.0 chamferRadius:0]];
cube.geometry.firstMaterial.diffuse.contents = [UIColor redColor];
[self.sceneView.scene.rootNode addChildNode:cube];
[self.view addSubview:self.sceneView];
听起来您正在使用故事板启动 SceneKit 场景。
如果是这样,最新版本的 SDK 现在要求您对视图设置约束,否则它们最终会变得很小。它可能只是在您的 SceneKit 场景上设置约束的功能。
如果框架无效,您还需要将其设置为有效的内容。例如
CGRect frame = [[UIScreen mainScreen] applicationFrame];
我发现如果将 SCNView
框架设置为 CGRectZero
,SceneKit
会出现拟合。必须至少有 1 个像素的渲染空间。就这么简单。
我有一个混合了纯 C++ 和 Objective-C++ 的项目,以便合并一些 C++ 库。
我试过添加一些基本的 SCNScenes
到组合中。 (我的基本意思是一个场景中有一个盒子节点,就是这样)。每次我收到错误:
Assertion failed: (renderSize.x != 0), function -[SCNRenderContextMetal _setupDescriptor:forPass:isFinalTechnique:], file /BuildRoot/Library/Caches/com.apple.xbs/Sources/SceneKit/SceneKit-332.6/sources/Core3DRuntime/NewRenderer/SCNRenderContextMetal.mm, line 688.
有谁知道是什么原因造成的,如果知道我该如何解决?
编辑:
在我的 ViewController.mm
我有:
self.sceneView = [[SCNView alloc] initWithFrame:frame];
self.sceneView.scene = [SCNScene scene];
SCNNode *cube = [SCNNode nodeWithGeometry:[SCNBox boxWithWidth:1.0 height:1.0 depth:1.0 chamferRadius:0]];
cube.geometry.firstMaterial.diffuse.contents = [UIColor redColor];
[self.sceneView.scene.rootNode addChildNode:cube];
[self.view addSubview:self.sceneView];
听起来您正在使用故事板启动 SceneKit 场景。
如果是这样,最新版本的 SDK 现在要求您对视图设置约束,否则它们最终会变得很小。它可能只是在您的 SceneKit 场景上设置约束的功能。
如果框架无效,您还需要将其设置为有效的内容。例如
CGRect frame = [[UIScreen mainScreen] applicationFrame];
我发现如果将 SCNView
框架设置为 CGRectZero
,SceneKit
会出现拟合。必须至少有 1 个像素的渲染空间。就这么简单。