갬장장이
'mathematics/game mathematics' 카테고리의 글 목록

mathematics/game mathematics

mathematics/game mathematics

[Mathematics] 28. 회전목마

바로 이전 포스트에서 우리는 회전목마와 상자의 운동을 행렬곱으로 표현해보았다. 그러나 해당 방식은 물체가 회전목마에서 닿았다 떨어졌다 하는 상황에서 동적으로 변경해줄 수 없다는 문제가 있다. 즉 게임 내의 회전하는 원판 장애물 등으로는 활용할 수 없다는 이야기다. 이번 포스트에서는 Move parents라는 개념을 사용해 이를 개선해보자. 사실 지난 포스트에서 다룬 회전운동을 표현하는 수학적 원리는 전부 동일하다. 단 이제부터는 각 오브젝트가 Move parents를 가질 수 있고, 만약 Move parents가 있을 경우 이 오브젝트의 transform은 Global transform 대신 Local transform을 통해 표현한다. 이를 회전목마 운동에 대입시켜보자. 우선 회전목마는 move par..

mathematics/game mathematics

[Mathematics] 27. 기준점을 중심으로 한 원형 회전

지난 포스트에 이어 우리가 그동안 배운 행렬 연산을 실제로 어떤 식으로 활용할 수 있는지 다른 예시도 살펴보자. 회전목마 같이 회전하는 원판 위에 어떤 물체가 놓여 있을 때, 회전목마가 S(=회전행렬) 만큼 회전했을 경우 이 물체의 위치는 초기 위치 B에서 어떻게 표현할 수 있을까? 우선 회전목마의 Transform부터 표현해보자. 우리는 Transform을 TRS 중 S를 생략한 TR matrix로 표현가능하며, 회전목마의 회전하기 전 TR Matrix를 M이라고 하자. 또 y축에 대해 일정 각도만큼 회전운동을 하는 행위를 나타낸 회전행렬 S가 있다고 하자. 이때 회전 후 Transform인 M'은 단순히 SM으로 표현할 수 없는데, 이는 M이 기준점에 있다는 보장이 없으므로 S만큼 회전했을 때 M의 ..

mathematics/game mathematics

[Mathematics] 26. Camera view transformation matrix

24, 25번 포스트의 내용을 먼저 숙지하는 것을 권장합니다. 카메라가 월드 좌표계의 원점에 위치하고, 사진과 같이 -z 축을 바라본다고 가정하자. 또 월드 상에 어떤 월드 좌표계상의 점 g가 존재한다고 가정하자. 이 때 카메라가 원점을 벗어나 이리저리 이동하고 회전한다면 카메라는 점 g를 어떻게 그려야 할까? 사실 카메라가 어떤 점을 그리기 위해 필요한 정보는 해당 점이 카메라 자신을 중심으로 한 상대좌표계에서 어디에 위치하고 있는지에 대한 정보뿐이다. 즉, 점 g의 좌표를 카메라의 상대좌표계로 변환한다면 우리는 점 g를 카메라에서 그려낼 수 있다. (카메라가 물체를 2D 평면에 그리는 세부적인 원리는 여기서는 무시해도 좋다.) 카메라의 공간 정보는 TR Matrix로 표현할 수 있다. (Scaling..

mathematics/game mathematics

[Mathematics] 25. Local vs Global Coordinate System(3D)

앞선 여러 포스트들(https://gamesmith.tistory.com/133?category=1032694, https://gamesmith.tistory.com/143?category=1032694)에서 우리는 선형변환이란 결국 어떤 벡터를 다른 좌표계로 이동시키는 것에 불과하다는 것을 배웠다. 이는 3D 환경에서도 마찬가지이다. 우리가 앞서 배운 T, R, S 모두 결국 선형사상이고, 때문에 TRS 행렬들의 곱인 Transform matrix(TRS Matrix) 또한 하나의 이동, 회전, 확대를 합쳐놓은 하나의 선형사상이다. 때문에 이는 하나의 좌표계에서 다른 좌표계로 점(벡터)을 이동시키는 것으로 표현이 가능하다. 반대로 (TRS)^-1을 곱해주는 것으로 해당 좌표계에서 다시 원래 좌표계로 점..

mathematics/game mathematics

[Mathematics] 24. Fast TR Matrix Inversion

TRS Matrix에서 Scaling Matrix를 뺀 TR Matrix의 역행렬은 T^-1 * R^-1을 해주지 않더라도 아주 빠르게 구할 수 있다. 사진에서 보듯이, (TR)^-1 은 우측 하단 노란색 M^-1의 형태처럼 행렬 내의 부분행렬들로 표현이 가능하며, 때문에 굳이 T와 R을 각각 Inverse해준 뒤 이를 곱해줄 필요 없이 한번에 M^-1을 구할 수 있다. 즉 TR Matrix 역행렬 구하기는 일종의 공식화가 가능하다. * R^-1과 T^-1을 역행렬 공식을 이용해 구한 후 이를 곱해주면 M^-1이 나오는 걸 확인할 수 있다. ** 일반적으로 Scaling Matrix는 쓸 일이 많이 없다. 때문에 TRS 대신 사실상 TR matrix만 사용할 일이 많다.

mathematics/game mathematics

[Mathematics] 23. Eigenvectors, Eigenvalues

예전 포스트에서 우리는 선형사상/선형변환의 본질적인 의미는 좌표축을 변경하는 것이라는 것을 다뤘다. 즉 선형사상을 했을 때 벡터가 변하는 이유, 즉 점이 이동하는 이유는 기준이 되는 좌표축이 변했기 때문이다. 그런데 만약 어떤 벡터/점이 선형변환을 했음에도(=기준이 되는 좌표축이 변했는데도) 이전 위치와 동일 선상에 있다면(=원래 벡터의 span 직선 위에 있다면) 해당 좌표는 eigenvector(고유벡터)이다. 이때 동일 선상에 있더라도 벡터의 크기는 변할 수 있는데, 변화 전후의 벡터는 동일직선상에 있으므로 상수배로 표현할 수 있다. 이 상수값을 eigenvalue(고유값)이라고 하며, 기호로는 람다(λ)로 나타낸다. 고유벡터들은 이 직선 위의 무수히 많은 모든 점(=벡터)들이며, 이러한 직선은 여..

mathematics/game mathematics

[Mathematics] 22. Euler angle vs Matrix vs Quaternion

우리는 지금까지 총 세가지의 방법으로 회전운동을 표현하는 방법을 배웠다. 오일러각, 행렬곱, 그리고 사원수이다. 이들은 각각 장단점을 가지고 있는데, 다음과 같다. transform vector는 벡터값을 바로 해당 방법을 이용해 회전시킬 수 있는지의 여부이고, coordinate space는 좌표공간 전체를 회전시킬 수 있는지의 여부이며, interpolate는 linear interpolation이 가능한지의 여부이다. size의 경우 float 몇 개가 필요한지를 나타낸다. 특히 오일러각과 사원수의 경우 slerp하는 과정에서 차이가 두드러지는데, 양쪽의 특성을 모두 알고 필요한 곳에 사용할 줄 아는 게 좋다. 그 차이를 시각적으로 보려면 아래 영상 초반부를 참고할 것. https://www.you..

mathematics/game mathematics

[Mathematics] 21. Quaternion Slerp (Spherical Linear Interpolation)

Lerp 또는 Linear Interpolation은 예전 포스트에서 다룬 적이 있다. 간단히 말해 어떤 값 A와 B 사이를 P * t로 표현하는 법으로, 위 식을 보면 t=0일때 A이고 1일때 B임을 알 수 있다. (A와 B는 스칼라 값 또는 벡터값 모두가 될 수 있다) Quaternion의 경우에도 이러한 interpolation이 가능하다. 즉 어떤 두 사원수 q와 r 사이를 p라는 사원수로 선형으로 왔다갔다 할 수 있다는 것이다. (구면을 따라 움직이는 회전 운동을 Interpolate하는 것이므로 Spherical interpolation이라고 표현한다.) 우리가 구하려는 식은 t가 0일때 q이고 t가 1일때 r인, p에 대한 식을 찾는 것이다. 즉 정의역은 t이고 치역은 p이며 치역의 범위는 ..