簡體   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