ios - ARKit - 在现实作曲家中以编程方式添加“广告牌”(看相机)元素
问题描述
我正在使用 Xcode (11.3.1) 使用 ARKit 制作 AR 应用程序。我在 Reality Composer 中添加对象、文本等。然后我可以通过将场景和对象加载到ViewController.swift
.
我想让这些物体中的一些不断面对相机。
我知道我可以在 Reality Composer 中添加一个观察相机的“行为”,但我不想这样做有两个原因;
a)它只允许您以这样的方式添加效果持续一定时间(最多 5 分钟)
b)我想知道如何以编程方式执行此操作。
我知道这里提供了一系列 ARKit 中的广告牌解决方案,其中大部分都包含在这个问题的答案中,但所有这些解决方案都涉及使用 SceneKit。
因此,我的问题是——是否可以在不使用 SceneKit 的情况下实现这种“广告牌”效果?有没有办法只在 RealityKit 中做到这一点?似乎有,因为您可以通过使用 Reality Composer 将其添加为行为来包含此效果(据我所知,它不需要 SceneKit,但我可能是错的)。我试图深入研究 Reality Composer 场景以了解广告牌是如何在那里实现的,但您可以在对上一个问题的回复中看到“行为”没有暴露,所以我看不出这是如何实现的。
我的“从头开始”的方法是了解相机的位置/旋转,但我太缺乏经验,不知道从哪里开始。本质上,我正在寻找相当于SCNBillboardConstraint
但不使用 SceneKit,也许那是不可能的?
解决方案
extension Entity {
/// Billboards the entity to the targetPosition which should be provided in world space.
func billboard(targetPosition: SIMD3<Float>) {
look(at: targetPosition, from: position(relativeTo: nil), relativeTo: nil)
}
}
var subscriptions = Set<AnyCancellable>()
arView.scene.subscribe(to: SceneEvents.Update.self) { [self] _ in
箭头.billboard(targetPosition: arView.cameraTransform.translation)
}.store(in: &subscriptions)
推荐阅读
- postgresql - 为什么 jsonb_path_query 缺少某些行的值?
- reactjs - setState 在 useEffect 后不更新状态
- php - 注意: register_rest_route 被错误调用。yoast/v1/get_head 的 REST API 路由定义缺少所需的 permission_callback a
- continuous-integration - 如何在不触发主分支的情况下在 bitbucket 的 2 个分支上测试作业?
- katacoda - 您如何避免登录新的 katacoda 场景
- tensorflow - 我有一个 hrnn 的名称和张量。无论如何我可以重建hrnn吗?
- asp.net - 使用 Asp.net Web 应用程序将 JWT 令牌存储在 Redis 缓存中
- datagrid - 在数据网格中隐藏/显示列:列不会自动调整大小
- javascript - JavaScript中带有嵌套while循环的无限for循环
- git - WSL1 上的 VSCode 未检测到 git repo