繁体   English   中英

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

[英]How to apply global transformation to child object

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

现场
|
|
对象 (带有转换)
|
|
对象 (无变换)
|
|
子级多维数据集 )(我想在其中应用全局位置的位置)

如果我将这些转换应用于作为场景直接子对象的多维数据集,则可以正常工作:

cube.position.copy(globalPosition);

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

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

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

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

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

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

const worldToLocal = new THREE.Matrix4().getInverse(cube.parent.matrixWorld);
const poseMatrix = new THREE.Matrix4();
poseMatrix.makeRotationFromQuaternion(globalQuaternion);
poseMatrix.setPosition(globalPosition);
poseMatrix.multiplyMatrices(worldToLocal, poseMatrix);
poseMatrix.decompose(cube.position, cube.quaternion, {});

非常感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM