【问题标题】:How to dynamically create annotations for 3D object using scenekit - ARKit in iOS 11?如何在 iOS 11 中使用 scenekit - ARKit 为 3D 对象动态创建注释?
【发布时间】:2018-02-28 02:45:32
【问题描述】:

我正在使用与此类似的 overlaySKScene 创建注释 (https://sketchfab.com/models/1144d7be20434e8387a2f0e311eca9b1#)。我按照https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay 创建了叠加层。

但是在提供的示例中,他们只创建了一个注解并且它是静态的。我想根据我们拥有的子节点的数量动态创建多个注释,并且还应该能够将注释定位在各个子节点的顶部。如何做到这一点?

我正在添加如下叠加层,

    sceneView.overlaySKScene = InformationOverlayScene(size: sceneView.frame.size)

其中 InformationOverlayScene 是 SKScene,我在其中添加了两个 childnodes 以创建一个注释。

【问题讨论】:

  • 很酷的项目..希望我能帮助一些但还不知道 scenekit / arkit..

标签: ios sprite-kit scenekit arkit xcode9-beta


【解决方案1】:

使用映射到子节点数组的注释精灵创建一个数组,然后执行以下操作:

func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {

    let scnView = self.view as! SCNView
    //for each character
    for var i in 0...inBattleChars.count-1 {
        let healthbarpos = scnView.projectPoint(inBattleChars[i].position)

        battleSKO.healthbars[i].position = CGPoint(x: CGFloat(healthbarpos.x), y: (scnView.bounds.size.height-10)-CGFloat(healthbarpos.y))
    }
}

在渲染每一帧之前,这会更新 inBattleChars 中每个 SCNNode 的 SKSprite(在 healthBars 中)的位置。关键是projectPoint用于根据3D场景中的SCNNode获取SK叠加场景的2D位置。

为了防止不可见节点的注释出现(例如父对象背面的子节点),请使用 SCNRenderer 的 nodesInsideFrustum(of:) 方法。

【讨论】:

  • @Xartec 我做了同样的事情。现在我可以看到覆盖,但在两个不同的位置。当我打开相机会话时,它会正确显示带有 3D 对象的叠加层,但是当我将相机移动到 180 度时,我可以在其他位置再次看到相同的叠加层。它仅在 2 个地方可见,其他任何地方都看不到。怎么会这样?
  • 这行得通。但是由于我们在 updateAtTime 方法中改变了叠加层的位置,所以叠加层似乎总是摇摇晃晃的,而且看起来不稳定。有没有办法仅在某些显着的相机移动或 3D 模型移动时更新叠加子对象的位置?
【解决方案2】:

您可以将SKSceneCALayer 添加为material property

您可以创建一个具有特定宽度和高度的SCNPlane,并添加一个 SpriteKit 场景作为材质。 你可以找到一个例子here

然后,您只需将平面定位在您想要的位置,并根据需要创建和删除注释。

【讨论】:

  • 我想为许多子节点动态添加这种文本框。我也希望这表现得像一个注释。即使我调整大小或远离 3D 对象,注释仍应保持相同大小。请参考sketchfab.com/models/1144d7be20434e8387a2f0e311eca9b1#。通过使用这种方法,我可以实现这样的目标吗?
  • 不,这会创建在空间中具有固定位置并相应缩放的注释。
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 2018-01-11
  • 2018-04-22
  • 1970-01-01
  • 2018-02-28
  • 2018-05-18
  • 2014-03-26
  • 2018-02-05
相关资源
最近更新 更多