행렬을 배우는 이유는 벡터를 변환시키기 위한 것
벡터 변환의 종류는 아래 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 |
댓글