게임에서 행렬을 활용하는 대표적인 방법은 Transfrom 변환이다.
어떤 물체의 위치, 크기, 회전에 변화를 주기 위해 그 물체의 벡터에 변환 행렬을 곱해주는 방식이다.
이 방식의 장점은 행렬의 곱 특성 상 결합법칙이 성립하기 때문에 여러 가지 변환 행렬들 끼리 먼저 곱해주고 나중에 도형 벡터에 곱해주면 된다는 것이다.따라서 특정 값 만큼 이동하고 회전하고 크기를 늘려주고 싶으면 해당 변환에 해당하는 변환행렬들을 모두 곱해주기만 하면 결과 값이 나온다는 것이다.
그런데 서로 다른 종류의 변환행렬을 곱할 떄 주의할 사항이 있다. 곱하는 순서가 Scale, Rotation, Transfrom이어야 한다는 것이다. 왜냐하면 Rotate 하고 Scale 하는 것과 Scale 하고 Rotate 한 결과가 다르기 때문이다.
또한 변환하려는 도형은 보통 3차원인데, 3차원 크기의 벡터를 Translation 변환 시 변환행렬의 합으로는 표현할 수 있지만, 변환행렬의 곱으로는 힘들다. 따라서 벡터에 1 차원을 더한 4차원 벡터와 그에 맞춘 4x4 크기의 변환행렬을 사용한다.
그럼 어떤 행렬을 곱해주어야 원하는 변환을 수행할 수 있는지 알아보자.
여기 도형벡터 V[x,y,z,1]이 있다.

그리고 변환행렬 M이 있다.

그리고 변환된 벡터 V2[x2,y2,z2,w]가 있다.

Translaiton
이 때 M이 V를 (a, b, c) 만큼 이동시키는 Translation 행렬이라면, V2는 아래와 같은 상태가 될 것이다.

즉 아래의 방정식들이 생긴다.
- xm11+ ym21+ zm31+ m41 = x+a
- xm12+ ym22+ zm32+ m42 = y+b
- xm13+ ym23+ zm33+ m43 = z+c
- xm14+ ym24+ zm34+ m44 = 1
위 방정식을 보고 올바른 m 값들을 찾기만 하면 변환 행렬 M 완성이다.
즉 Translation 변환행렬 T는

와 같은 형태가 된다.
Scale
Scale 행렬 S도 위와 같은 프로세스를 따르면 구할 수 있다.
Scale 행렬을 곱한 V2는 아래와 같은 형태이다.

그러면 아래와 같은 방정식들이 도출된다.
- xm11+ ym21+ zm31+ m41 = ax
- xm12+ ym22+ zm32+ m42 = by
- xm13+ ym23+ zm33+ m43 = cz
- xm14+ ym24+ zm34+ m44 = 1
즉 Scale 행렬 S는 아래와 같다.

Rotation
Rotation의 경우 기본적으로 위와 같은 과정을 거쳐서 구할 수 있지만, 회전된 벡터를 구하는 데 약간 어려움이 있다.
일단 삼각함수 코코싸싸 이런걸 알아야된다. 근데 귀찮으니 그냥 인터넷에서 긁어온 자료 첨부.

'수학, 알고리즘' 카테고리의 다른 글
Kruscal 알고리즘 (0) | 2022.01.20 |
---|---|
상호 배타적 집합(DIsjoint Set) (0) | 2022.01.20 |
레드블랙트리 (0) | 2022.01.18 |
행렬 (0) | 2021.12.29 |
VECTOR (0) | 2021.12.28 |