在3D对象和导出文件中修改SceneKit

时间:2016-12-29 05:47:20

标签: ios 3d scenekit

在我的应用程序中,我使用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对象但得到相同的结果。

0 个答案:

没有答案