scenekit - 在 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)的指针。
解决方案
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
推荐阅读
- hibernate - 重复条目保存 - grails
- javascript - React Web 应用程序在加载时启动并请求全屏 - 已编辑
- go - '标志-gcflags'的无效值“所有-N -l”在构建时
- javascript - 无法读取未定义的属性“长度” - javascript
- android - Drawing line between one point and another
- c - 如何在C中递归返回字符串值?
- javascript - 我对涉及 reCAPTCHA 的 php 感到困惑
- ios - ObjectiveC - UIButton 保持突出显示/选中,背景颜色和字体颜色在突出显示/选中时发生变化
- tensorflow - How to extract cell state from a LSTM at each timestep in Keras?
- fabricjs - 无法使用 FabricJS 2 为所选字母及其背景着色