Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't display 3d file from cache directory

Can you please help me determine the problem here?

It seems that I can't display the 3d file from cache directory. I'm having this error SceneKit IO: error, COLLADA files are not supported on this platform.

The zip file im saving in the cache directory contains .dae file and .png for the texturee. With Scene Kit you can:

Import COLLADA 3D objects and build scenes composed by cameras, lights, and meshes. https://developer.apple.com/library/mac/documentation/3DDrawing/Conceptual/SceneKit_PG/Introduction/Introduction.html

Thanks.

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);
    }

});
like image 839
user3316454 Avatar asked May 07 '15 10:05

user3316454


1 Answers

The SCNSceneSource Class Reference has a table:

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

Are you sure your .dae file is a “SceneKit compressed scene”? Apparently, iOS only supports loading compressed scenes from .dae files. Xcode should automatically convert your Collada .dae to a compressed scene (with the same extension) when it compiles your app. If you're loading the file from outside your app bundle (e.g. from a URL at runtime), it won't be a SceneKit compressed scene unless you've taken steps to convert it elsewhere.

I found the following comment on this answer:

To convert the dae file to a file that can be read by SCNScene(named:... you can convert the file manually by using the following commandline in terminal: /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 (Of course, replace InFile.dae and OutFile.dae by your own filenames) Sorry, no real formatting possible in comments. – Marcus Feb 2 at 18:23

I don't know if all those flags are appropriate for your use. According to this web site, there's also a command-line program named copySceneKitAssets (in the same Xcode subdirectory) that converts .scnassets directories, so maybe that's what you want to use.

like image 182
rob mayoff Avatar answered Oct 06 '22 22:10

rob mayoff