问题
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);
}
});
回答1:
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.
来源:https://stackoverflow.com/questions/30097948/cant-display-3d-file-from-cache-directory