기본적으로 자식 객체의 [x, y, z] 좌표는 부모의 객체 공간을 기준으로 표시되는 반면 그룹 Object3D의 자식 object3D가 있습니다. 개체, 3D 공간 내에서 자식 개체의 위치를 변경하려고합니다. 그래서 저는 먼저 세계 공간에 상대적인 아이 오브젝트의 위치를 얻습니다.Three.JS, 자식 3D 객체의 세계 위치 변경
var wrld_pos = childobject.matrixWorld.multiplyVector3(new THREE.Vector3);
이것은 월드 공간 내에서 어린이의 위치에 대한 세 요소 벡터를 반환합니다. 이제 나는 내 자신의 위치를 설정하고 싶다. 그래서 세 요소 벡터를 만듭니다. setPosition를위한 기능의 정의를 제공
var new_pos = THREE.Vector3();
new_pos.x = 1;
new_pos.y = 2;
new_pos.z = 3;
childobject.matrixWorld.setPosition(new_pos);
, 그것은 기본적으로는 이와 같이 월드 공간에서 물체의 위치를 변경하는 인수로 전달 벡터의 값을 객체의 월드 행렬의 마지막 세 요소를 설정한다. 그리고 이러한 변경 후에 행렬이 업데이트되는지 확인하기 위해 다음 함수를 호출합니다.
childobject.matrixWorldNeedsUpdate = true;
childobject.updateMatrixWorld();
이제 개체의 새로운 세계 행렬을 검사 할 때 setPosition 함수가 아무것도 수행하지 않은 것으로 나타났습니다.
왜? 실제 코드 예제가 필요한 경우이를 제공합니다. 그러나 위의 내용은 응용 프로그램 도메인과 구문을 정확하게 나타내야합니다. three.js를에서
왜 새 위치 값이 저장되지 않는지 설명합니다. 그러나 문제의 물체의 세계 공간 위치를 바꾸는 것이 도움이되지 않습니다. – user1349206
예를 들어 두 개의 그룹 객체가 모두 10 개의 큐브 링이고 하나의 링에서 큐브를 다른 링의 큐브와 교환하려는 경우 원래 큐브의 위치를 다음과 같이 설정하여 쉽게 수행 할 수 있습니다. 불행하게도 큐브의 위치는 부모 개체의 원점에 상대적이며 그 개체에서 이루어진 모든 회전 및 변경에 주관적이므로 로컬 좌표를 다른 링의 좌표로 설정하면 큐브가 무작위로 전송됩니다 위치. – user1349206
부모 회전 행렬을 적용한 후 새 위치가 지정한 위치에서 끝나도록 자식 위치를 설정할 수 있습니까? – WestLangley