Translation 행렬
변환행렬(Translation Matrix)은 위치벡터에서 크기,회전,위치변환을 위해 곱해지는 행렬을 의미한다.
예를 들면 행렬 A(x,y,z)인 1x3의 행렬을 3x3의 행렬로 곱하여 원하는 값을 얻기 위한것이다.
위의 그림과 같이 계산하게된다면
x->X
=ax+dy+gz
y->Y
=bx+hz+ye
z->Z
=cx+fy+jz
가 되며 계산된 각 원소는 x,y,z의 값에 영향을 받게 된다는 것을 알게된다. 이럴 경우 변환행렬에 관계없이 원하는 좌표로 이동이 불가하게 된다.
따라서 변환행렬을 할때는 n차원의 행렬은 n+1차원의 행렬로 변환하여 계산하게 된다.
x->X
=ax+ey+jz+n
y->Y
=bx+fy+kz+o
z->Z
=cx+gy+lz+p
w->W
=dx+hy+mz+q
가 되며 X,Y,Z의 n,o,p는 x,y,z의 영향을 받지 않으므로 n,o,p를 원하는 좌표로 지정하면 원하는 좌표로 이동을 시킬수 있으며, W의 q값은 1로 다시 나와야 되기 때문에 q값은 1이되게된다.
여기서 X=ax+ey+jz+n인데 x를 n만큼 이동하고 싶은것이기에
X=x+n
Y=y+o
Z=z+q
의 식이 되어야 한다.
따라서 Translate행렬이 되기 위해서는
이 되어야 한다.
Scale 행렬
Scale행렬의 경우 좌표가 배수로 변화하기를 원하기 때문에
X=x*a
Y=y*b
Z=z*c
W=1와 같은 형식으로 나와야 하며
와 같은 형태의 행렬이 나와야 한다.
Rotation 행렬
z축으로 회전을 하기 위해서 위의 그래프와 같이 대각의 길이를 a라고 하고 그 각이 c라고 할때
x의 값은 a*cos(c), x'는 a*cos(c+θ)이 되며,
y의 값은 a*sin(c), y'의 값은 a*sin(c+θ)가 되게된다.
z는 축이 되어야 되기 때문에 가지고 있는 z값을 그대로 가져야된다.
이것을 풀어쓰면
x'=a*(cos(c)*cosθ-sin(c)sinθ)
=xcosθ-ysinθ
y'=a*(sin(c)cosθ+cos(c)sinθ)
=xsinθ+ycosθ
z'=z이 되며
이것을 행렬로 바꾸면
z축 회전의 경우
y축 회전의 경우
x축 회전의 경우
※변환행렬은 반드시 Scale->Rotation->Translation순으로 적용해야된다.
'게임수학 > 행렬' 카테고리의 다른 글
게임수학) Chapter6. World,View,Projection,Screen 행렬 (3) (0) | 2021.11.29 |
---|---|
게임수학) Chapter6. World,View,Projection,Screen 행렬 (2) (0) | 2021.11.27 |
게임수학) Chapter6. World,View,Projection,Screen 행렬 (1) (0) | 2021.11.26 |
게임수학) Chapter5. 좌표계 변환행렬 (0) | 2021.11.17 |
게임수학) Chapter3. 행렬 (0) | 2021.11.17 |
댓글