【问题标题】:Positioning virtual assets with ARKit and SCNKit使用 ARKit 和 SCENEKit 定位虚拟资产
【发布时间】:2023-04-02 16:49:01
【问题描述】:

我正在尝试更好地理解 SCNKit 和 ARKit,并在我的 iPhone(我将其用作简单的测试设备)上部署并运行准系统 Xcode 9 增强现实应用程序。

这个应用的源代码是here

基本上,应用程序启动,相机初始化,并在场景(世界视图)内渲染 3D 战斗机,其方式类似于 Pokemon Go 将怪物注入您的相机视口(无论您将相机指向何处) .很酷!

这段代码都是 Xcode 为我自动生成的。因此,我试图了解决定 where 定位/定向战斗机的逻辑存在于何处(标题为 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
}

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

【问题讨论】:

    标签: ios xcode augmented-reality arkit scnnode


    【解决方案1】:

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

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

      在该 Xcode 项目模板中附带的 scn 文件中,模型定位在类似于 0, 0, -0.5 的位置,因此如果将相机放置在坐标系的原点,船会直接出现在相机,半米外。

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

    【讨论】:

    • 谢谢@rickster (+1) ,当应用程序启动时,什么决定了坐标系的原点在哪里?此外,.scn 文件是否仅定义模型在场景中的默认/初始位置?有没有办法覆盖这个默认/初始位置,以及在加载到场景后更新它?再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 2020-04-01
    • 1970-01-01
    • 2018-05-18
    • 2017-11-27
    • 1970-01-01
    • 2017-11-27
    • 2019-11-03
    相关资源
    最近更新 更多