【问题标题】:RealityKit – Updating Entity's translation returns unexpected valuesRealityKit – 更新实体的翻译返回意外值
【发布时间】:2022-07-11 15:42:23
【问题描述】:

我写的这个小方法,将spotlight1的位置更改为意想不到的值。

如果我理解得很好,setPosition 方法应该设置聚光灯相对于电视位置的平移

电视的翻译:[0.0, 0.0, -5.0] setPosition 相对于 Tv 的平移为 [0.0, 5.0, 0.5]。

所以:

[0.0 + 0, 0.0 + 5, -5.0 + 0.5] = [0.0, 5.0, -4.5] 

但我得到的是:

[0.0, 0.9999994, -4.9]

我在这里遗漏了一些重要信息吗?

func loadLights() {
    arView.scene.addAnchor(lightAnchor)
    lightAnchor.addChild(spotlight1)
    print(tv?.position)             // 0.0, 0.0, -5.0
    spotlight1.setPosition([0, 5, 0.5], relativeTo: tv)

    if let tv = tv {
        spotlight1.look(at: tv.position, 
                      from: spotlight1.position, 
                relativeTo: nil)
    }        
    print(spotlight1.position)     // 0.0, 0.99999994, -4.99
}

【问题讨论】:

    标签: swift realitykit


    【解决方案1】:

    参考坐标系

    尽管听起来很矛盾,但 RealityKit 做的一切都是正确的。您需要考虑frame of referencetv 模型的框架)。据我了解,您将tv 模型的规模缩小了五倍。我对吗?但是,引用的转换很重要。

    换句话说,您已经缩小了电视模型的局部坐标系(也称为局部坐标系),您正在尝试相对于 spotLight1 定位。


    关于relativeTo参数

    阅读this postthis post 了解可能存在的问题。

    【讨论】:

    • 嘿安迪。不确定我是否跟随。我不想将电视的比例缩小 5 倍。我的意图是:
    • 这就是为什么将 ModelEntity 放在 Entity 中以分隔两个转换是一个好习惯的原因。 :)
    • 抱歉,好像删了我的一部分评论..
    • 我们是在谈论创建实体“TV”的子类并为其分配模型吗?或者在那个新的子类中创建一个嵌套的“tv”变量,然后在那里分配那个实体?在那之后,哪个翻译是修改的最佳实践?谢谢!
    • 您需要将嵌套模型放入空实体 (entity.addChild(model))。实体就像模型的容器。
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    相关资源
    最近更新 更多