我试图更好地理解SCNKit和ARKit,并部署了准系统Xcode 9 Augmented Reality应用程序并在iPhone上运行(我将其用作简单的测试设备)。
该应用程序的源代码为here
基本上,该应用程序会启动,相机会初始化,并以与《 Pokemon Go》将怪物注入相机视口(无论您指向相机的位置)的方式类似的方式在场景(世界视图)中渲染3D战斗机。太酷了!
这段代码都是Xcode为我自动生成的。因此,我试图了解确定战斗机位置/定向位置的逻辑原理(SCN文件名为art.scnassets/ship.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
}
但是我不明白该应用程序如何选择将喷气机/飞船放置在何处以及如何将其定向到哪个方向。我问,因为第一步,我想尝试重新定位喷气机,然后将其换成我自己的资产文件。

最佳答案

这样的“逻辑”存在于两个地方。

  • ship.scn文件不仅定义模型,而且定义模型在场景中的位置。 (也就是说,在全局“世界”坐标空间中。)

    在该Xcode项目模板随附的scn文件中,模型位于类似于0, 0, -0.5的位置,因此,如果将相机放置在坐标系的原点,则该船将直接出现在相机的前方,相距半米。
  • ARKit本身定义了相对于设备的初始实际位置/方向的场景/世界空间。 By default,即坐标系统的z轴与设备的初始方向匹配,因此当您开始AR session 时,放置在坐标原点“前面”的任何内容都将出现在相机的前面。
  • 关于ios - 使用ARKit和SCNKit定位虚拟 Assets ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46494945/

    10-10 21:04