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

mathematics/game mathematics

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를 구한다. ..

mathematics/game mathematics

[Mathematics] 15. 3차원 Line-AABB Intersection

앞서 우린 어떤 2d 벡터와 각 변이 축과 직사각형의 Collision 판정을 위해 Line-AABB Intersection이라는 방법을 사용할 수 있음을 배웠다. 이전엔 이 방법을 보다 넓은 범위로 확대해, 3차원 직육면체와 선의 충돌을 계산할 수 있도록, 또 물체가 축과 평행한 변을 가진 AABB(Axis Aligned Bounding Box)가 아닌 일반적인 직육면체이더라도 계산할 수 있도록 확장해보자. 일단 2D line aabb intersection을 3D로 변환하는 과정은 다음과 같다. https://sudhamr.wordpress.com/2019/05/01/week-12/ Week 12 : AABB-Ray Intersection The next intersection test that we..

mathematics/game mathematics

[Mathematics] 14. Line-Plane Intersection

벡터 v와 점C를 지나고 법선벡터가 n인 평면과의 충돌지점 I를 찾으려면? v의 시작점 x에서 점 C까지 향하는 벡터를 w라 할 때, 우리는 w를 n에 대해 정사영시켜 w'을 구하고 v를 n에 대해 정사영시켜 v'을 구한 후 v'과 w'과 삼각형의 닮음비를 이용하여 x부터 충돌지점 I까지의 거리를 구할 수 있다. 참고: https://youtu.be/fIu_8b2n8ZM

mathematics/game mathematics

[Mathematics] 13. 선형변환의 기하학적 의미

그동안 앞선 글들에서 우린 변환행렬들과 벡터의 행렬곱을 이용한 벡터의 물리적 변환들(회전, 크기변화, 이동)을 살펴보았다. 또한 행렬곱을 이용해 좌표계를 변환하는 법에 대해서도 알아보았다. 이번 글에서는 이 두 내용이 본질적으로는 같은 내용이라는 것을 설명하고자 한다. 우리는 행렬에 벡터를 곱하는 행위를 정의역과 치역이 모두 벡터인 어떤 함수라고 생각할 수 있다. 즉, 행렬곱은 선형변환이고, 선형변환은 행렬곱이다. (선형변환의 정의는 아래와 같으며, 임의의 행렬 A에 대해 T(x) = Ax가 항상 이를 만족함을 알 수 있다.) 선형사상(=행렬곱)은 기하학적으로 해석이 가능하다. 이를 이해하면 우리는 그동안 다뤄왔던 다양한 종류의 변환행렬들이 왜 그런 형태를 하고 있는지도 이해할 수 있다. 예시를 보면 직..