• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何在 iOS 11 中使用 scenekit - ARKit 为 3D 对象动态创建注释?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:37:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 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 以创建一个注释。



Best Answer-推荐答案


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

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 方法。

关于ios - 如何在 iOS 11 中使用 scenekit - ARKit 为 3D 对象动态创建注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46298338/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap