【问题标题】:RealityKit – Anchor is ignoring parent anchor transformRealityKit – Anchor 忽略父锚转换
【发布时间】:2021-09-04 01:00:05
【问题描述】:

说我有这个:

var a = getSphere(0.05, .white)
var b = getSphere(0.04, UIColor.brown)
var c = getSphere(0.03, UIColor.cyan)
    
var aa = AnchorEntity()
var bb = AnchorEntity()
var cc = AnchorEntity()
aa.transform.translation.y = -0.5
aa.addChild(bb)
bb.addChild(cc)
aa.addChild(a)
bb.addChild(b)
cc.addChild(c)
scene.anchors.append(aa)

aa 锚点及其对象将正确位于 y -0.5,但 bb 和 cc 锚点/对象仍将定位在 0,0,0....

这感觉非常有问题。比如...为什么子对象会忽略其父变换?

任何人都可以阐明如何“解决”这个问题吗?

【问题讨论】:

  • 锚点是 D1cks,我转而使用 modelEntity.addChild() 流。

标签: swift augmented-reality arkit realitykit


【解决方案1】:

您不需要这么多嵌套的 AnchorEntities。 RealityKit 的场景可以包含嵌套模型实体(也称为父子对)的任何层次结构。然而,为了自动跟踪此结构中每个 3D 元素的位置和方向 - 只需要 一个 锚(这是在任何 AR 框架中使用锚的常规方式)。

let container = Entity()
let modelA = ModelEntity()
let modelB = ModelEntity()

container.addChild(modelA)
modelB.setParent(modelA)

container.position.x = -1.2
modelA.position.x = 0.5          // adjust transform independently
modelB.position.y = 1

let anchor = AnchorEntity()      // object being tracked
anchor.addChild(container)
arView.scene.addAnchor(anchor)

【讨论】:

  • 是的,我最终做到了。但奇怪的是 AnchorEntity 忽略了父变换!这不应该发生在基于层次结构的结构中。
  • 看起来很合乎逻辑。应用程序如何在被跟踪的锚点和被跟踪的锚点内跟踪锚点?!
  • 这真的很有意义......谢谢!我不太了解锚点的概念... :-) 所以如果我在场景中放置锚点,当我四处移动和跟踪调整/更改时,它会像普通对象一样漂移吗?或者它会比物体粘得更好?
  • AnchorEntity(和 ARAnchor)将比任何其他实体更好地粘合,但是它可能会漂移...stackoverflow.com/questions/52893075/what-is-aranchor-exactly/…
  • Uuu 非常棒,构造函数:AnchorEntity(.world(transform: mtx)) 和 AnchorEntity(raycastResult: myRaycastResult) 在跟踪质量方面的执行方式相同吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-17
  • 2019-01-07
  • 2022-08-05
  • 2015-06-17
  • 2019-07-13
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
相关资源
最近更新 更多