Не удается отобразить 3D-файл из каталога кеша

Не могли бы вы помочь мне определить проблему здесь?

Кажется, я не могу отобразить 3D-файл из каталога кеша. У меня эта ошибка SceneKit IO: ошибка, файлы COLLADA не поддерживаются на этой платформе.

ZIP-файл, который я сохраняю в каталоге кеша, содержит файл .dae и .png для текстуры. С набором сцен вы можете:

Импортируйте 3D-объекты COLLADA и создавайте сцены, состоящие из камер, источников света и сеток. https://developer.apple.com/library/mac/documentation/3DDrawing/Conceptual/SceneKit_PG/Introduction/Introduction.html

Спасибо.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    NSURL *url = [NSURL URLWithString:@"my url"
    NSData *data = [NSData dataWithContentsOfURL:url options:0 error:&error];

    if(!error)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *path = [paths objectAtIndex:0];
        NSString *zipPath = [path stringByAppendingPathComponent:@"zipfile.zip"];

        [data writeToFile:zipPath options:0 error:&error];

        if(!error)
        {
            ZipArchive *za = [[ZipArchive alloc] init];
            if ([za UnzipOpenFile: zipPath]) {
                BOOL ret = [za UnzipFileTo: path overWrite: YES];
                if (NO == ret){} [za UnzipCloseFile];

                NSString *floorFilePath = [path stringByAppendingPathComponent:@"house1.dae"];
                NSURL *floorPathURL = [NSURL fileURLWithPath:floorFilePath];
                dispatch_async(dispatch_get_main_queue(), ^{

                    SCNView *sceneView = (SCNView *)self.view;
                    sceneView = (SCNView *)self.view;
                    sceneView.allowsCameraControl = YES;
                    sceneView.autoenablesDefaultLighting = YES;
                    sceneView.backgroundColor = [UIColor whiteColor];
                    sceneView.scene = [SCNScene sceneWithURL:floorPathURL options:nil error:nil];
                });
            }
        }
        else
        {
            NSLog(@"Error saving file %@",error);
        }
    }
    else
    {
        NSLog(@"Error downloading zip file: %@", error);
    }

});

person user3316454    schedule 07.05.2015    source источник
comment
Вам проще это сделать в отладчике. Просто поставьте точку останова в этом методе и проверьте, что объекты/переменные находятся в ожидаемом состоянии на каждом этапе.   -  person trojanfoe    schedule 07.05.2015
comment
@trojanfoe да, я поставил точку останова, и у него есть файлы в правильном грязном каталоге, проблема в том, что он не отображается в моем представлении сцены   -  person user3316454    schedule 07.05.2015
comment
Файл .dae — это файл COLLADA, и в сообщении об ошибке говорится, что файлы COLLADA не поддерживаются на этой платформе. Это сбивает с толку?   -  person rob mayoff    schedule 08.05.2015
comment
человек, я попытался запустить файл .dae локально, и он работает.   -  person user3316454    schedule 08.05.2015
comment
С помощью набора сцен вы можете: Импортировать 3D-объекты COLLADA и создавать сцены, состоящие из камер, источников света и сеток. developer.apple.com/library/mac/ документация/3DDrawing/   -  person user3316454    schedule 08.05.2015


Ответы (1)


Класс SCNSceneSource Ссылка содержит таблицу:

Format                          Filename Extension    Supported in

Collada Digital Asset Exchange  .dae                  OS X v10.8 and later

Alembic                         .abc                  OS X v10.10 and later

SceneKit compressed scene       .dae or .abc          OS X v10.10 and later
                                                      iOS 8.0 and later

SceneKit archive                .scn                  OS X v10.10 and later
                                                      iOS 8.0 and later

Вы уверены, что ваш файл .dae является «сжатой сценой SceneKit»? Судя по всему, iOS поддерживает загрузку сжатых сцен только из .dae файлов. Xcode должен автоматически преобразовывать вашу Collada .dae в сжатую сцену (с тем же расширением) при компиляции вашего приложения. Если вы загружаете файл из-за пределов пакета приложений (например, из URL-адреса во время выполнения), это не будет сжатой сценой SceneKit, если вы не предприняли шаги для ее преобразования в другом месте.

Я нашел следующий комментарий к этому ответу:

Чтобы преобразовать файл dae в файл, который может быть прочитан SCNScene (с именем:..., вы можете преобразовать файл вручную, используя следующую командную строку в терминале: /Applications/Xcode.app/Contents/Developer/usr/ bin/scntool --convert InFile.dae --format c3d --output OutFile.dae --force-y-up --force-interleaved --look-for-pvrtc-image (конечно, заменить InFile .dae и OutFile.dae вашими собственными именами файлов) Извините, настоящее форматирование в комментариях невозможно — Marcus 02 фев.

Я не знаю, подходят ли все эти флаги для вашего использования. Согласно этой сети site, есть также программа командной строки с именем copySceneKitAssets (в том же подкаталоге Xcode), которая преобразует .scnassets каталогов, так что, возможно, вы захотите ее использовать.

person rob mayoff    schedule 08.05.2015
comment
Я не уверен в этом, но zip-файл содержит .dae и текстуру, которая является файлом .png, я уже пытался отобразить файл .dae локально, и это сработало, но когда я выполняю этот процесс, я получаю zip-файл из URL-адрес, а затем распакуйте его и сохраните в каталоге кеша, он показывает, что файлы COLLADA не поддерживаются. - person user3316454; 08.05.2015
comment
Я обновил свой ответ. Если файл .dae не входит в комплект вашего приложения, он будет иметь неправильный формат. - person rob mayoff; 08.05.2015
comment
хорошо, спасибо, это имеет смысл, какой процесс, по вашему мнению, я могу сделать с ним, чтобы сделать его сжатой сценой ScenKit? - person user3316454; 08.05.2015
comment
Преобразование с использованием scntool решило мою проблему, и теперь я могу показать удаленный файл dae. Благодарю вас! - person imike; 01.03.2020