본문 바로가기
DirectX/[Inflearn_rookiss] Part2: DirectX12

9. SRT 변환 행렬

by 헛둘이 2023. 1. 21.

행렬을 배우는 이유는 벡터를 변환시키기 위한 것

 

벡터 변환의 종류는 아래 3가지가 있다.

S(Size) : 크기

R(Rotation) : 회전

T(Translation) : 이동

 

벡터와 행렬을 곱함으로써 원하는 변환이 가능하다

 


1. 이동 행렬 (Translation Matrix)

- 이동하려면? x, y, z에 값을 더해줘야 한다

- 그런데 행렬곱의 계산 과정은 x, y, z 각각의 요소에 다른 요소들도 같이 묶여 있다

- 그래서 4차원 요소 w를 추가한다

 

*동차 좌표계

- 벡터의 3요소 (x, y ,z)에 w를 추가한다.

- w를 추가함으로써 4차원 벡터가 되고, 다른 축에 관여받지 않는 값을 추가할 수 있다.

 

임의의 벡터 (x, y, z, 1)에 (a, b, c) 만큼 이동하려면?

 

- 위와 같이 행렬을 구성하면

x = (x * 1) + (x * 0) + (x * 0) + (x * a)

y = (y * 0) + (y * 1) + (y * 0) + (y * b)

z = (z * 0) + (z * 0) + (z * 1) + (z * c)

w = (w * 0) + (w * 0) + (w * 0) + (w * 1)이 된다.

 

따라서 (x + ax, y + by, z + zc, w)가 나오게 된다.

 


2. 크기 행렬 (Scale Matrix)

- 크기를 키우려면? 위의 이동 행렬에서 w좌표를 지우고 행렬의 대각요소에 각각 a, b, c를 곱하면 된다.

 

- 4행 4열을 1로 두는 이유는 결과값의 w값을 1로 유지하기 위해서임

 

 


3. 회전 행렬(Rotate Matrix)

- Z축 회전의 경우 Z축은 그대로 두고 나머지 두 요소(X, Y)에 대해서만 식을 계산하면 된다

- 회전하는 방법은 오일러 각을 구해서 회전

 

- 위 식을 통해 이렇게 변환된 위치(x', y')을 구할 수 있게 된다

- 이걸 행렬에 대입하면

 

- 이 식을 통해 회전을 구현할 수 있다.

'DirectX > [Inflearn_rookiss] Part2: DirectX12' 카테고리의 다른 글

11. World, View 변환 행렬  (0) 2023.01.22
10. 좌표계 변환 행렬  (0) 2023.01.22
8. 행렬  (0) 2023.01.19
7. Component  (0) 2023.01.18
6. Material  (0) 2023.01.18

댓글