📒 갈무리 - 행렬
📌 행렬이란?
- 어떠한 숫자들의 배열을 사각형 형태로 표현한 것
- 가로 숫자를 행(row)
- 세로 숫자를 열(column)
📌 행렬의 합
- 행과 열의 개수를 맞추어 주어야 계산이 가능하다.
- 각 원소끼리 연산을 수행한다.
📌 행렬의 곱
- 앞에 있는 행렬의 행의 길이와 뒤에 있는 행렬의 열의 길이가 같아야 계산이 가능하다.
ex) [1, 0][3, 1]을 A, [-1,2][1, 4]를 B, 연산 결과를 C라고 했을 때,([1행1열, 1행2열][2행1열, 2행2열])
C의 1행1열 = A의 1행1열 x B의 1행1열 + A의 1행2열 x B의 2행1열 = 1 x -1 + 0 x 1 = -1
C의 1행2열 = A의 1행1열 x B의 1행2열 + A의 1행2열 x B의 2행 1열 = 1 x 2 + 0 x 1 = 2
C의 2행1열 = A의 2행1열 x B의 1행1열 + A의 2행2열 x B의 2행 1열 = 3 x -1 + 1 x 1 = -2
C의 2행2열 = A의 2행1열 x B의 1행2열 + A의 2행2열 x B의 2행 2열 = 3 x 2 + 1 x 4 = 10
C = [-1, 2][-2, 10]
📌 동차좌표계
ex) (x, y, z)가 있을 때, 동차좌표계를 사용했을 때 (x, y, z, 1) 한 차원이 늘어난 좌표계가 만들어 진다.
- 변환행렬의 곱셈을 할 때 유용하게 사용할 수 있다.
📌 변환행렬
- 항등행렬, 크기변환행렬, 이동행렬, 회전행렬 등이 있다.
- 회전행렬은 y > x > z 순으로 연산을 수행한다.
- 크기 > 회전 > 이동 순으로 연산을 수행한다.
🎯 그렇다면 게임에서 어떻게 활용할 수 있을까?
행렬을 직접 게임에서 적용을 하는 경우는 DirectX, OpenGL을 공부할 때, 유니티 내에서 math 값을 직접 바꿀 때 또는 shader에 대해 공부할 때 유용하게 사용이 된다.
💎 핵심
💡 TIP
오일러 회전 : 축마다 순서대로 계산하는 방식
- 회전축을 순서대로 계산하다 보니 짐벌락 현상이 발생
짐벌락 현상 : 회전을 하다 보면 축이 겹치게 되어 한 축에 대한 계산이 불가능해지는 현상
- 짐벌락 현상을 피하기 위해 쿼터니언 회전 방식을 사용한다.
쿼터니언 회전(TCB) : 한 번에 계산하는 방식
// C#
transform.position = new Vector3(1, 1, 1); // 포지션 set
//transform.rotation = new Vector3(1, 1, 1); // 오일러 각으로 대입 - 오류 발생
Quaternion rot1 = Quaternion.Euler(45, 0, 45); // 오일러 각을 쿼터니언 방식으로 변환하여 사용
- 유니티는 내부적으로 쿼터니언 방식을 사용하여 연산하기 때문에 회전에 관한 것은 모두 쿼터니언 방식으로 변환하여 사용해야 함