2012-06-20 2 views
4

three.js의 좌표 공간을 이해하려고하는데 object.matrix와 object.matrixWorld가 있음을 이해합니다.THREE.JS의 Matrix4에 수동으로 회전 및 변환 적용

이 블로그 게시물 Matrix Basics. How to step away from storing an orientation as ’3 angles’에 걸려 넘어지면서 Matrix4의 속성을 수동으로 조작하여 오일러 회전을 피하는 방법을 배우기로 결정했습니다.

내가하려는 것은 원점 0,0,0에서 제 큐브를 멀리 옮긴 다음 세계 공간에서 회전시키는 것입니다. 결과는 제 큐브가 먼저 y 축으로 변환 된 다음 회전이 큰 원호를 비행기로 가져 오는 것이지만 실제로 일어나는 일은 번역을 무시하고 원점으로 되돌아가는 것입니다.

나는 벡터와 행렬에 대해 많은 책을 읽었으며 나는 그 이론을 충분히 이해하고 있다고 확신한다. 내가 실제로 얻지 못하는 것은 three.js가 matrixWorld와 행렬을 어떻게 처리하는지에 있습니다. 나는 둘 다 시도했다! http://jsfiddle.net/SCXNQ/151/

그냥 내가 할 노력하고있어 확인하기 위해 렌더링() 함수를 보면 : 여기

을 입증하는 바이올린입니다!

편집 - [해결] 업데이트] JS 뿐인 작업 VERSION 아래의 답변의 도움으로

14/09/12, 나는 내 업데이트 바이올린 내가 달성하기 위해 원하는 것을 보여주는 게시 할 것이라고 생각 - http://jsfiddle.net/SCXNQ/363/

+0

단지 제쳐두고, Three.js를 간략히 살펴 보았으므로 여기서는별로 도움이되지 않을 것입니다.하지만 3D 회전을보고 있다면 벡터뿐만 아니라 Quaternions에 대해서도 이해해야합니다. 및 행렬. – phenomnomnominal

+0

@phenomnomnominal - 예, three.js가 Quats를 구현하므로 목록에 있습니다. 내가 실행하기 전에 걷는 법을 배울 것입니다 :) – Neil

답변

2

this을 보시오. 당신이 원하는 것 같아요.

편집 : 죄송합니다. 매트릭스 순서가 잘못되었습니다 (단단한 파악이 필요합니다). ->this도 시도해보십시오.

+0

행렬에 물건을 적용하는 순서에 대해 읽었습니다. 그 점을 지적 해 주셔서 감사합니다. 또한 make 함수의 요점은 무엇입니까? 예 : translate를 사용하는 대신 makeTranslation을 사용 하시겠습니까? – Neil

+0

소스를 간략하게 살펴 보았습니다. makeTranslation은 실제로'Matrix'를 물리적으로 변경하는 반면, translate는 기존'Matrix'에서 변환 작업을 수행하는 것으로 보입니다. 나는 새로운 것을 만드는 것보다'Matrix' 객체를 완전히 덮어 쓰는 특별한 이유를 생각할 수 없다. 아마도 메모리 최적화로서 어떤 가치가 있을까? – phenomnomnominal

+0

여러분의 도움에 감사 드리며, 대부분의 행렬 연산에서 예상되는 결과를 얻고 있습니다. – Neil

관련 문제