在 SceneKit 中设置 3-D 对象的位置和比例

Setting Position and Scale of 3-D objects in SceneKit

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

当我通过 Objective-C 代码构建 SCNNode 对象时,应用程序运行完美。但是,当我尝试放置通过 .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];

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

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

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

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

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

2 - 您的模型未放置在正确位置的原因是轴心点未正确居中。这可以使用您的 3D 建模软件或在 Scenekit 中完成,如 post 中所述: