Objective-C, Objective-C++, C++ and Scene Kit

Objective-C, Objective-C++, C++ and Scene Kit

本文关键字:Scene Kit and C++ Objective-C++ Objective-C      更新时间:2023-10-16

我有一个混合了纯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帧设置为 CGRectZeroSceneKit会抛出适合。必须至少有 1 个像素的渲染空间。就这么简单。