2012-05-26 1 views
2

세계 공간에서 오브젝트를 조작하는 올바른 방법을 배우려고합니다. 테스트로서 나는 큐브를 만들고 임의의 벡터에서 큐브의 각 꼭지점으로 몇 개의 선을 그립니다.세계 공간에서 오브젝트 매치 매트릭스 - Three.js

correct

을하지만 난 큐브를 회전 할 경우, 다음 줄은 더 이상 정점을 일치하지 :

내가 어떤 방법으로 큐브를 변경하지 않으면 다음 라인은 잘 정점에 충돌

wrong

은 분명히 내가 큐브를 회전하고 나는이 같은 양만큼 선을 회전 할 수 있습니다 알고 있지만, 나는이 작업을 수행하는 행렬이나 벡터를 조작해야한다 알고있다.

누구나이 두 가지 객체를 회전시키지 않고도 이와 같은 일반적인 문제에 어떻게 접근해야하는지 설명 할 수 있습니까?

// scene.add(line); 
cube.add(line); 

를하지만, 경우 : 편의를 위해

나는

+0

선의 끝이 정육면체의 정점과 일치하는 동안 선의 원점이 동일한 월드 위치에 유지되기를 원합니 까? 또는 두 개체를 동시에 회전하여 원본 구조를 따르고 싶습니까? – mrdoob

+0

둘 다 설명해 주시겠습니까? 그것의 학습 운동, 나는 벡터와 행렬에 대해 읽기 시작했는데 어디에 적용 할 지 확신이 서지 않습니다. – Neil

답변

5

방금 ​​큐브에 대신 현장에 줄을 추가하는 데 필요한 코드를 회전 할 수있는 라인을 원하는 경우 jsfiddle to play with이 원하는 것은 선의 원점을 같은 위치에 유지하고 대신 선의 끝을 업데이트하는 것입니다.

cube.updateMatrixWorld(); // make sure that cube.matrixWorld is updated. 

for(var i = 0; i < 8 ;i++){ 
    var vertex = cube.matrixWorld.multiplyVector3(cube.geometry.vertices[i].clone()); 
    lineGeometry.vertices.push(vertex); 
    lineGeometry.vertices.push(lineStart); 
} 
+0

감사의 말, 그 두 번째 부분은 내가 배울 점이 많습니다. 좌표 공간을 혼합하여 모든 것을 배우고 싶습니다. – Neil

+0

모든 객체는'matrix' 및'matrixWorld' 속성을가집니다. 'matrix'는 로컬 위치, 회전 및 크기를 저장합니다. 'matrixWorld'는 세계에서 객체의 위치, 회전 및 크기를 저장합니다 (부모와 부모의 부모를 고려하여 ...). 점을 객체의 로컬 공간으로 "변환"하려면 matrixWorld를 사용하여 점을 곱해야합니다. 이것이 무엇인가를 분명하게 해줄 지 모르겠다면, 이것은 항상 설명하기가 어렵습니다 ... – mrdoob

+0

당신은 그것을 아주 잘 설명했습니다, 대단히 감사합니다. – Neil