gpt4 book ai didi

ios - scenekit 加载场景时显示进度指示器

转载 作者:行者123 更新时间:2023-11-29 00:41:47 24 4
gpt4 key购买 nike

我正在努力创建一个进度指示器,它将显示 SCNScene 的加载量。我尝试使用 SCNSceneScource 类来获取状态处理程序,如苹果文档所述。然而,这只能告诉我场景何时加载。但这不是我想要的信息 - 我想显示总进度,包括加载时间和显示 SCNNode 所需的时间(我假设这是将加载的文件插入图形适配器内存所需的时间)。

我的方法仅显示两次中的第一次。我执行了以下操作:我添加了一个 SCNView 导出 (self.skView)、一个触发加载场景的按钮和一个 UIProgressBar 到我的 View 。进度条反射(reflect)了 SCNSceneSource 的totalProgress 属性。

- (void)viewDidLoad {
[super viewDidLoad];
// set up the SCNView
if (_skView.scene==nil) _skView.scene = [SCNScene new];
}

-(void) loadScene {
SCNSceneSource *s = [SCNSceneSource sceneSourceWithURL:[[NSBundle mainBundle] URLForResource:@"Muscles_V04" withExtension:@"dae"] options:nil];
SCNScene *scene = [s sceneWithOptions:nil statusHandler:^(float totalProgress, SCNSceneSourceStatus status, NSError * _Nullable error, BOOL * _Nonnull stop) {
self.proressBar.progress = totalProgress;
NSLog(@"Total progress %.3f",totalProgress);

// once finished remove the status indicator
if (totalProgress>=0.9999) {
[self.proressBar removeFromSuperview];
}
}];

// add the nodes of the loaded scene to the existing scene
for (SCNNode *n in scene.rootNode.childNodes) {
NSLog(@"node: %@", n.name);
[self.skView.scene.rootNode addChildNode:n];
}
}

最佳答案

我想提一下,在运行时加载 DAE 文件并将子节点添加到场景并不是最佳选择。

在编译 iOS 程序之前,您在 -loadScene 方法中所做的所有事情都可以在辅助程序中完成。以编程方式构建场景。使用 NSCoding 将其存档。将该场景文件嵌入到您的 iOS 应用程序中。在运行时加载存档。

为了获得更好的性能,您可以(在创建场景存档的辅助程序中)展平节点,创建一些 SCNLevelOfDetail 实例,烘焙光照。在您的实时应用程序中,您可以在后台调用 prepareObjects:withCompletionHandler,并希望看到足够的加速,而不必使用 prepareObject:shouldAbortBlock:/NSProgress。

关于ios - scenekit 加载场景时显示进度指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39300935/

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