【问题标题】:Aframe calculate position in local system from world position.Aframe 从世界位置计算本地系统中的位置。
【发布时间】:2018-10-24 16:27:44
【问题描述】:

我有一个组件可以动画到相机前面的某个位置,但是当它是另一个对象的子对象时,它的动画方向是错误的(远离相机),因为它使用的是实体中的世界位置.

我知道这是因为世界坐标.. 谁能帮我告诉我如何将这个世界位置转换为本地坐标?

    pLocal= new THREE.Vector3(0, 0, -distX)
   this._targetPosition = pLocal.applyMatrix4(this._threeCamera.matrixWorld)

在这个例子中,盒子是球体的一个子对象,动画远离相机。 https://jsfiddle.net/jpvsrnq1/2/

如果盒子不是孩子,它会朝着相机动画。 https://jsfiddle.net/jpvsrnq1/3/

当它是另一个对象的子对象时,如何使其动画到相机?

【问题讨论】:

    标签: three.js aframe


    【解决方案1】:

    您应该使用worldToLocal() 方法:

    来自docs

    .worldToLocal(向量:Vector3):Vector3
    将向量从世界空间更新到局部空间。

    通过使用父级上的方法:parentObj.worldToLocal(vec),您可以将其世界位置应用于本地位置向量。小提琴here.

    小提琴here.


    另一种方法是遍历父实体,并减去它们的位置,但它似乎比 worldToLocal 方法没有任何优势

    【讨论】:

    • 绝对是第一种方式。第二种方式不考虑旋转、缩放、额外的祖先。
    • 是的,它需要遍历祖先,直到你到达现场,当你可以使用worldToLocal ()时,这几乎是多余的
    • 感谢@PiotrAdamMilewski,这太棒了。我知道这与此功能有关,正在努力确定它的应用位置。
    • @user5839 很高兴我能帮上忙 :)
    • @PiotrAdamMilewski 我已将其引入我的代码中,并且 this.el.parentNode.object3D.worldToLocal(this._targetPosition) 没有对 targetPosition 进行任何更改。应该吗?
    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2020-03-14
    • 2018-03-04
    相关资源
    最近更新 更多