갬장장이
'mathematics' 카테고리의 글 목록 (2 Page)

mathematics

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이며 치역의 범위는 ..

mathematics/linear algebra

[선형대수] 행렬식, 여인수전개 계산

https://datacookbook.kr/78 행렬식(determinant), 소행렬식, 여인수 전개 - 선형대수 5강 | 행렬식의 개요 행렬식 (determinant) - 정방행렬에 실수를 대응 시키는 함수. - 정방행렬 A의 행렬식은 |A| 또는 det A 라고 함 - 행렬식의 귀납적 정의 * n 차 정방행렬의 행렬식은 (n-1)차 정방행렬의 datacookbook.kr

mathematics/game mathematics

[Mathematics] 20. Quaternion을 이용한 정점 회전

사원수를 이용해 정점을 회전시켜보자. 결론부터 정리하면, 어떤 정점이자 벡터 p를 사원수 q를 이용해 회전시켜 얻은 정점 p'은 q*p*q^-1 이다. p는 벡터p를 포함하는 사원수로, 스칼라부의 값은 0이다. q는 회전을 나타내는 사원수로, 어떤 벡터 n에 대해 각 세타만큼 회전시킨 것을 사원수로 나타내는 법을 예전 포스트에서 다뤘었다. 이렇게 곱해서 얻은 p'의 벡터부가 우리가 얻고자 하는 정점이다. p' = q*p*q^-1이 도출되는 과정은 길고 복잡해 본 포스트에서 다루지 않지만, 직관적으로 이해하려면 q 또는 q^-1을 곱해주는 행위는 3차원에서 n에 대해 세타/2만큼 회전시키므로 이 회전을 두번 해주면 원하는 각만큼 회전이 된다고 생각하면 된다. 또 사원수를 곱해주는 것은 사차원에서의 회전도 ..

mathematics/game mathematics

[Mathematics] 19. Quaternion Multiplication

앞선 포스트에서 하나의 사원수로 여러 축에 대한 회전들의 결과를 한 번에 나타낼 수 있다는 것을 언급했다. 두 사원수는 서로 곱해 하나의 사원수로 나타낼 수 있는데, 이는 기하학적으로 두 회전운동의 결과를 하나의 회전운동으로 나타내는 것으로 이해하면 된다. 즉 여러 회전들을 우리는 서로 곱해 하나의 사원수로 나타낼 수 있다. 사원수를 곱하는 공식은 위와 같다. 한 번 공식을 사용해보자. 두 개의 axis-rotation r과 s가 있다고 하자. 이는 각각 사원수 하나씩으로 나타낼 수 있다. r : 벡터 vr을 기준으로 시계 방향으로 wr만큼 회전 s : 벡터 vs를 기준으로 시계 방향으로 ws만큼 회전 r과 s를 합친 q는 다음과 같다. q = rs = [ w, v ] w = ws*wr - vs*vr =..

mathematics/game mathematics

[Mathematics] 18. Quaternion

지난 포스트에선 한 축에 대해 세타만큼 회전시키는 방법을 알아보았는데, 이러한 방식은 하나의 축에 대해서만 회전을 나타낼 수 있다는 문제점이 있다. 동시에 두 축 이상에 대한 회전을 하나의 값으로 나타내고 싶은 경우 우리가 사용할 수 있는 방법이 Quaternion(사원수)의 사용이다. 사원수를 정의내리려면 생각보다 많은 수학적인 설명이 필요한데, 이에 관해선 해당 글을 읽어보는 것을 권장한다. 간략하게 설명하면 사원수는 실수부와 허수부로 나타내어지며, 실수부는 스칼라값 하나 (w), 허수부는 어떤 크기 3인 실수값을 원소로 가지는 벡터에 허수 i,j,k를 벡터의 각 원소에 곱해준 형태이다. (v) 이를 편의를 위해 프로그래밍 시에는 그냥 [w, v] = [w, vx, vy, vz]의 vector4 형태..

mathematics/game mathematics

[Mathematics] 17. Axis-Angle Rotation (Rodrigues formula)

Axis-angle rotation, 혹은 Rodrigues formula란, 축과 각이 주어졌을 때 어떤 벡터를 해당 축에 대해 해당 각만큼 회전시킨 벡터를 구하는 과정이다. v를 n을 기준축으로 시계 방향으로 세타만큼 회전시킨 v'을 구하는 과정을 살펴보자. (축 n은 단위벡터라고 가정한다. 단위벡터가 아닐 경우 그냥 단위벡터로 만들어주면 된다) v를 n에 정사영 내려 p를 구할 수 있고, v - p = e이므로 e도 구할 수 있다. v' = p + e'인데, e'은 f와 e를 축으로 하는 평면에 대해 e를 세타만큼 반시계 방향으로 회전시킨 벡터이다. 이는 우리가 구할 수 있는 값이다. f를 y축, e를 x로 두고 생각하자. 위 그림에선 세타가 둔각이지만 이해를 돕기위해 세타가 예각이라고 해보자. 그..

mathematics/game mathematics

[Mathematics] 16. Plane Intersection & Frustum Culling

Frustum Culling이 무엇인가에 대해서는 이 포스트에서 다루고 있다. Frustum Culling을 구현하기 위해 가장 중요한 것이 어떤 정점이 어떤 평면의 어느 방향에 있는지 (법선벡터의 양의 방향에 있는지 법선벡터의 음의 방향에 있는지) 를 빠르게 판별하는 것이다. 그래야 잘린 피라미드들의 각 면에 대해 해당 연산을 진행하여 해당 정점이 카메라 내부에 있는지 바깥에 있는지를 판별할 수 있다. 크기가 1인 벡터 n을 법선벡터로 가지는 평면이 존재할 때, 어떤 점X를 중심으로 하는 구가 해당 평면의 어느 방향에 위치하고 있느냐를 판정해보자. (파이프라인에선 구가 평면에 겹치기만 해도 어쨌든 구 일부가 카메라 시야 안에 들어오므로 렌더링한다) 우선, 평면에서 좌표계 원점까지의 거리 d를 구한다. ..