본문 바로가기

Graphics

[Graphics] 05. 3차원상 물체 변환

 

앞서 알아본 2차원상 물체 변환에서 3차원으로 확대를 시키면 어떤 식으로 처리를 해야될까에 대해 고민을 해보자.

정말 간단하게도 회전을 뺸다면 대부분의 내용은 이어진다.

 

3차원상 Translation
3차원상 Scaling

 

그럼 3차원 공간상 회전은 어떻게 이뤄질 지에 대해 알아보자.

 

1. 회전

3차원 공간상에서 단순히 회전하라고 준다면 어디로?라는 질문이 따라온다. 즉 회전축(Rotation axis)을 명시를 해주지 않는다면 안 된다는 것이다. 표기는 다음과 같다.

 

또 추가한다면 보통 오른손 좌표계라고 말하는 것을 이용한다. 이는 시계 반대방향으로 회전하는 것이 +축이라는 것이다. 그럼 z축을 먼저 정리를 해보겠다.

이 때 z축이 1인 이유는 z는 회전축이기 때문에 사용되지 않기 때문이다
이 때 x축이 1인 이유는 x는 회전축이기 때문에 사용되지 않기 때문이다

 

 
y축 회전

 

 
y만 다른 이유

그렇다면 만약 x,y,z축이 아닌 어떤 벡터를 가지고 회전을 한다면 어떻게 될 것인가?

저 V벡터를 기준으로 회전하자.

 

if(sqrt(a*a + b*b) Rz(C>0? theta: -theta)
else // v가 z+가 되도록 변환 
   Rz(theta)  // 역변환
 
임의의 점 C를 기준으로 p가 회전

 

C를 원점으로 이동시키고 p도 그만큼 움직인 뒤 회전

 

{
   i) Rz(a) : { r = sqrt(a*a + b*b), cos(a) = b/r, sin(a) = a/r}
      Rx(b) : { r = sqrt(b*b + c*c), cos(b) = c/r, sin(b) = b/r}
   ii) Rz(theta)
   iii) inverse of (i)
}