Orthogonal Matrix 는 직교행렬입니디
이전에 Obj3d가 좌표계라고 생각하고 구현했스빈다
즉 로컬 좌표계에서 위치에 있는 점에 대해서
월드 좌표계에서는 어디에 위치하느냐를 알아내는 부분이라고 할수 있겟스빈당.
단순화 시켜서 2차원 좌표계를 생각해보면 다음과 같습니다.
cos(45도) sin(45도) 를 생각하시믄 됩니다.
어떤 회전시키는 행렬,, 그 자체는 자신의 성분을 행렬원소로 합니다.
장난 아니죠, 감동스럽습니다.
잘 보면 검정색 좌표계를 기준으로 (1/sqrt(2) , - 1/sqrt(2)) 는
빨간색 좌표계를 기준으로 봤을때 (1,0) 이 됩니다.
검정색을 월드 좌표계라고 보고
빨간색을 로컬 좌표계라고 합시다.
그리고 두 좌표계는 원점은 일치하나 회전정도가 다르다고 합시당
즉 빨간색 좌표계의 포즈벡터를 성분으로 하는 저 행렬은
월드좌표 -> 로컬좌표
로 변환시켜주는 겁니다.
그러면
로컬좌표 -> 월드좌표
변환하려면? 역행렬을 구하면 됩니다.
근데 진짜 소름끼칠만한게 있습니다.
Orthogonal Matrix 의 역행렬을 구하는것은
그냥 전치행렬을 구하는것과 같습니다.
제가 Obj3d 에서 lookAt 연산을 구현할때 그렇게 up, at, _hv 벡터를 직교시킨뒤에
크기를 1로 정규화 시키려고 난리를 폈던 이유가 있습니다.
걍 포즈 벡터들만 있으면 , 그냥 다 되는겁니다. 엄충 짱이죠
우선 Mat4 에다가 기능을 추가해보도록 하겠습니다.
(Mat4.js)
그럼 이게 실제로 될까요??
그냥 45도 일때만 운좋게 맞은거지 다른 각도는 안되는거 아닐까요??
그래서 실험을 해보겠습니다.
좌표계를 하나 만들고 lookAt 으로
(0, -2, 1) 지점을 바라보는 로컬 좌표계를 가정해봅니다.
실제로 테스트를 해 봅시다.
html 의 script 태그 사이에서 위 그림을 반영하는 테스트 코드를 넣어봅니다.
가정한대로 잘 나왔습니다.
'프로젝트 > 초간단3d엔진 2011' 카테고리의 다른 글
8. 뷰포트 변환과 간단한 그리기 테스트 (1) | 2011.12.29 |
---|---|
7. Camera (0) | 2011.12.29 |
6. Orthogonal Matrix와 로컬좌표계, 월드좌표계 (0) | 2011.12.29 |
5. Matrix 4 by 4와 Vector 4 만들기 (0) | 2011.12.29 |
4. 테스트용 html 정의와, 3차원 객체 기능 부가하기 (0) | 2011.12.28 |
3. 3차원객체 만들기 (0) | 2011.12.27 |
댓글을 달아 주세요