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 태그 사이에서 위 그림을 반영하는 테스트 코드를 넣어봅니다.





가정한대로 잘 나왔습니다.
Posted by 멍충한아싸

댓글을 달아 주세요