我试图更好地理解SCNKit和ARKit,并在我的iPhone上部署并使用了一个准确的Xcode 9增强现实应用程序(我将其用作一个简单的测试设备)。
此应用的源代码为here。
基本上,应用程序启动,相机初始化,它在场景(世界视图)内呈现3D战斗机喷气机的方式与Pokemon Go将怪物注入相机视口的方式类似(无论您指向相机的哪个位置) 。非常酷!
此代码全部由Xcode自动生成。因此,我试图了解逻辑所处的位置决定 位置/定向战斗机(标题为art.scnassets/ship.scn
的SCN文件)。从here我们看到正在装载喷气机:
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
// Create a new scene
print("Hello there Mr. Zac")
let scene = SCNScene(named: "art.scnassets/ship.scn")!
// Set the scene to the view
sceneView.scene = scene
}
但我不明白应用程序如何选择在哪里放置喷气机/船舶并将其定向在哪个方向。我问,因为作为第一步,我想尝试重新定位喷气机,然后将其换成我自己的资产文件。提前谢谢!
答案 0 :(得分:3)
"逻辑"为此,如有,有两个地方的生活。
ship.scn
文件不仅定义了模型,还定义了模型在场景中的位置。 (也就是说,在全球"世界"坐标空间。)
在该Xcode项目模板中附带的scn
文件中,模型位于0, 0, -0.5
之类的位置,因此如果摄像机位于坐标系的原点,则直接显示在半米之外的相机前。
ARKit本身定义相对于设备的初始真实世界位置/方向的场景/世界空间。 By default,该坐标系的z轴与设备的初始方向匹配,因此任何放置在"前面的"启动AR会话时,坐标原点将出现在摄像机前面。