2017-11-27 5 views
0

나는 현재 다음과 같은 코드가 있습니다 : Threejs Object3D에 절대 변환을 설정하는 방법은 무엇입니까?

const scene = new THREE.Scene() 
const root = new THREE.Group() 
scene.matrixAutoUpdate = false 
root.matrixAutoUpdate = false 
scene.add(root) 

나는 내가 root 노드 아래 주위를 이동하려는 물건을 올려. 다음으로 사용하여 3D 공간에서 특정 위치로 루트 노드를 설정하려는 Matrix4

문제는이 아무런 효과가 없다는 것입니다 :

root.matrix = translationMatrix 
    root.updateMatrixWorld() 

을하고 내 매트릭스의 적용 않습니다 다음 있지만, 그것을 덮어 쓰지 않고 기존의 변환 위에 적용합니다.

root.applyMatrix(translationMatrix) 
    root.updateMatrixWorld() 

어떻게하면 전체 매트릭스를 올바르게 대체 할 수 있습니까?

+0

을,'당신'root.matrix.copy (translationMatrix)를 시도 않았다'? – Brakebein

+0

네, 똑같은. –

답변

0

코드를 보면 applyMatrix()이 행렬을 위치, 4 원 및 축척으로 분해 함을 알 수 있습니다. 수동으로 이러한 속성을 설정하는 것이 중요 할 수 있습니다

root.matrix = translationMatrix; 
root.matrix.decompose(root.position, root.quaternion, root.scale); 

또 다른 한가지 : matrixAutoUpdate 또는 matrixWorldNeedsUpdatefalse로 설정되어있는 경우 updateMatrixWorld()는 아무것도하지 않습니다. matrixWorld를 업데이트 force 매개 변수로 true 전달 대신`root.matrix = translationMatrix의

root.updateMatrixWorld(true);