首页 > 解决方案 > 在 SceneKit 中设置 3-D 对象的位置和比例

问题描述

我正在尝试制作一个简单的应用程序,其中通过 ARKit 将 3-D 对象放置在场景中。

当我SCNNode通过 Objective-C 代码构建对象时,该应用程序运行良好。但是,当我尝试放置通过 .obj 文件加载的 SCNNode 对象时,对象的位置和比例似乎很奇怪。

我从 .obj 文件创建 SCNNode 的方式如下:

NSString *path = [[NSBundle mainBundle] pathForResource:@"model" ofType:@"obj"];
NSURL *URL = [NSURL fileURLWithPath:path];
MDLAsset *asset = [[MDLAsset alloc] initWithURL:URL];
SCNNode *node = [asset objectAtIndex:0];

现在的问题是,当我将节点的变换设置为检测到的平面上的特征点时,对象被放置在它应该在的位置上方。而且它的规模大得离谱,通过模型编辑软件查看时,它应该只有几厘米长/宽。

我错过了什么?我将不胜感激任何有助于更好地理解模型(特别是 .objs)的指针。

标签: scenekitarkit

解决方案


1 - 对象的比例错误可能是由于不同的 3D 建模软件使用不同的比例单位。修复它的简单方法是在 SceneKit 中重新缩放节点:

yourNode.scale = SCNVector3(x: 0.5, y: 0.5, z: 0.5)

更准确的选择是在 3D 建模软件中正确缩放模型并再次导出。

2 - 模型未放置在正确位置的原因是枢轴点未正确居中。这可以使用您的 3D 建模软件或在 Scenekit 中完成,如本文所述: https ://stackoverflow.com/a/48979201/3975207


推荐阅读