使用ARKit和SCNKit

时间:2017-09-29 18:28:56

标签: ios xcode augmented-reality arkit scnnode

我试图更好地理解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
}

但我不明白应用程序如何选择在哪里放置喷气机/船舶并将其定向在哪个方向。我问,因为作为第一步,我想尝试重新定位喷气机,然后将其换成我自己的资产文件。提前谢谢!

1 个答案:

答案 0 :(得分:3)

"逻辑"为此,如有,有两个地方的生活。

  1. ship.scn文件不仅定义了模型,还定义了模型在场景中的位置。 (也就是说,在全球"世界"坐标空间。)

    在该Xcode项目模板中附带的scn文件中,模型位于0, 0, -0.5之类的位置,因此如果摄像机位于坐标系的原点,则直接显示在半米之外的相机前。

  2. ARKit本身定义相对于设备的初始真实世界位置/方向的场景/世界空间。 By default,该坐标系的z轴与设备的初始方向匹配,因此任何放置在"前面的"启动AR会话时,坐标原点将出现在摄像机前面。