如何将全局转换应用于子对象

时间:2018-08-10 05:45:30

标签: javascript three.js

我正在尝试将全局位置(来自WebVR控制器)应用于具有多个转换的父级的子级对象。它不是第一代子级,尽管在这之间没有任何转换应用于任何对象:

场景
  ¦
  ¦
对象(具有转换)
  ¦
  ¦
对象(无变换)
  ¦
  ¦
孩子立方体)(我想在其中应用全球排名的位置)

如果我将这些转换应用于作为场景直接子元素的多维数据集,它将正常工作:

cube.position.copy(globalPosition);

但是我需要将其应用于子对象。我尝试通过以下方式将全球位置转换为本地位置:

const worldToLocal = new THREE.Matrix4().getInverse(cube.parent.matrixWorld);
cube.position.copy(globalPosition);
cube.applyMatrix(worldToLocal);

但是该多维数据集与场景的子元素不在同一位置。不知道还有什么尝试,谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

大家好!我建议重新组合您的网格物体。如果要更改所有组的世界中的位置,则需要在父对象上应用位置,转换在子对象上的使用。对于分组,请尝试使用空网格并使用方法parentMesh.add(childMesh)。希望这个帮助的;)

答案 1 :(得分:0)

很久以前,我就一直困扰着这个问题,最终以不同的方式对它进行分组,使cube成为scene的直接子代,这在当时似乎很有效,但是现在,{ {1}}的前任父母开始表现得很怪异,如果我尝试更改其位置或旋转方式,他们会旋转到一个奇怪的位置而不会移动。这就是为什么我知道想要正确修复它的原因。

所以我最终做了类似于@WestLangley提到的事情,但是我还需要变换旋转,所以我使用了矩阵:

cube

非常感谢大家的帮助!