在我的应用程序中,我使用SceneKit Framework在SCNView中显示3D对象,并通过一些小的更改(如颜色,温度等)导出修改后的文件。但是在将其导出到文档文件夹后,我将获取原始文件。
在这里我可以显示并对3D对象进行一些修改,看起来不错,我可以在模拟器中看到SCNView的变化。
sceneView = [[SCNView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 100)];
[sceneView setBackgroundColor:[UIColor orangeColor]];
[self.view addSubview:sceneView];
sceneView.allowsCameraControl = true ;
// Load 3D object
NSString *path = [[NSBundle mainBundle] pathForResource:@“test” ofType:@"obj"];
NSURL * url = [NSURL fileURLWithPath:path];
scene = [SCNScene sceneWithURL:url options:nil error:nil];
sceneView.scene = scene ;
// Processing---
SCNLight *light =[[SCNLight alloc] init];
light.type = SCNLightTypeAmbient;
SCNNode *lightNode = [[SCNNode alloc] init];
lightNode.light = light ;
// Camera node
SCNCamera *camera = [[SCNCamera alloc] init];
SCNNode * Cameranode = [[SCNNode alloc]init];
camera.saturation = 0.5 ;
[scene.rootNode addChildNode:Cameranode];
Cameranode.position = SCNVector3Make(0.0, 0.0, 30.0);
sceneToExport = sceneView.scene ;
// Rotation -
SCNNode *cubeNode = [[SCNNode alloc] init];
cubeNode.rotation = SCNVector4Make(1000.0, 0.0, 30.0 , 40.0);
[scene.rootNode addChildNode:cubeNode];
现在我正在尝试导出我修改过的3D(.obj)文件。
- (IBAction)saveAction:(id)sender {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *exportPath = [documentsPath stringByAppendingPathComponent:@"sceneAssets.obj"];
//NSLog(@"Saved %d",[sceneView.scene writeToURL:[NSURL URLWithString:exportPath] options:nil delegate:nil progressHandler:nil]);
NSLog(@"%d",[assetsToExport exportAssetToURL:[NSURL URLWithString:exportPath]]);
}
这里我尝试了两种方式(MDLAssets和SCNKit),使用这个.obj文件通过两种方法保存在Document目录中,但我得到原始文件而不是修改过的对象。
我还尝试过使用SCNScene创建MDLAsset
对象但得到相同的结果。