首页 > 解决方案 > SceneKit – 如何将 MTL 纹理应用于 OBJ 文件?

问题描述

作为后续行动:

ios - 如何将 mtl 纹理文件应用于 OBJ

将模型导入SceneKit时,我想添加.MTL 纹理.OBJ 文件

使用这样的代码:

let scene = SCNScene(named: "rose.obj")

但是我拥有的纹理文件存储在DOCUMENTS目录(iOS)中。

如何在Objective-C中调用这个函数?

标签: objective-cscenekitmtl-file

解决方案


要在 Xcode 中使用带纹理的 OBJ 场景,您需要包含三个文件.obj.mtl.jpg. 要加载.obj具有相应纹理的场景,所有三个捆绑文件必须位于同一Documents目录中。以下是使用 Objective-C 应用程序时代码的外观:

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    SCNView *sceneView = (SCNView *)self.view;
    
    NSArray<NSURL *> *urls = [NSFileManager.defaultManager 
                              URLsForDirectory:NSDocumentDirectory 
                              inDomains:NSUserDomainMask];

    NSURL *sceneInDocumentsDirectory = [urls[0] 
                                      URLByAppendingPathComponent:@"file.obj"];

    SCNScene *scene = [SCNScene sceneWithURL:sceneInDocumentsDirectory 
                                options:Nil 
                                error:Nil];

    sceneView.scene = scene;
    sceneView.allowsCameraControl = YES;
    sceneView.autoenablesDefaultLighting = YES;
    sceneView.backgroundColor = [UIColor blackColor];

    NSLog(@"%@", sceneInDocumentsDirectory);
}

@end

如您所知,.mtl文件是基于 ASCII 定义材料的.obj文件。

这是它的样子:

newmtl phong1SG
illum 4
Kd 0.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd texture.jpeg
Ni 1.00
Ks 0.50 0.50 0.50
Ns 18.00

在此处输入图像描述


推荐阅读