objective-c - SceneKit – 如何将 MTL 纹理应用于 OBJ 文件?
问题描述
作为后续行动:
将模型导入SceneKit时,我想添加.MTL 纹理和.OBJ 文件
使用这样的代码:
let scene = SCNScene(named: "rose.obj")
但是我拥有的纹理文件存储在DOCUMENTS目录(iOS)中。
如何在Objective-C中调用这个函数?
解决方案
要在 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
推荐阅读
- javascript - 我需要添加一个消息框和电子邮件文本框,并在 msgresults 标记中显示我的表单中的所有内容
- node.js - 带有 SQL Server 用户身份验证的 NodeJs 登录表单
- reactjs - 带代理的 Webpack - 开发服务器已断开连接
- tableview - 第一次选择 TableView 行时,它没有响应
- docker - 使用从 dockerhub (nginx:alpine) 运行最新版本 nginx 的 Docker 容器时 Nginx 配置错误
- c++ - Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,Eclipse 使用哪一个?
- vb.net - 从文件路径名中获取文件名的vb问题
- javascript - 单击并拖动更改背景颜色
- c# - 敌人使用光线投射忽略其他图层
- c# - System.Drawing 是否应该只在 WPF 的 UI 线程 (C#) 上运行?