게임 수학 - 행렬) 복습을 위해 작성하는 글 2023-04-04

rizz·2023년 4월 4일
0

수학

목록 보기
3/4

📒 갈무리 - 행렬

📌 행렬이란?

- 어떠한 숫자들의 배열을 사각형 형태로 표현한 것

- 가로 숫자를 행(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에 대해 공부할 때 유용하게 사용이 된다.


💎 핵심

내부적으로 trasnform의 값이 행렬을 이용해서 연산이 된다는 것을 숙지하고 추후에 DirectX와 OpenGL, 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); // 오일러 각을 쿼터니언 방식으로 변환하여 사용

- 유니티는 내부적으로 쿼터니언 방식을 사용하여 연산하기 때문에 회전에 관한 것은 모두 쿼터니언 방식으로 변환하여 사용해야 함

profile
복습하기 위해 쓰는 글

0개의 댓글