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

mathematics

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가 항상 이를 만족함을 알 수 있다.) 선형사상(=행렬곱)은 기하학적으로 해석이 가능하다. 이를 이해하면 우리는 그동안 다뤄왔던 다양한 종류의 변환행렬들이 왜 그런 형태를 하고 있는지도 이해할 수 있다. 예시를 보면 직..

mathematics/game mathematics

[Mathematics] 12. TRS Matrix

3차원 공간에 있는 오브젝트의 가장 기본적인 물리적 연산 세가지가 바로 Translation(이동), Rotation(회전), Scaling(크기 변환)이다. 그동안 앞선 글들에서 우리는 이 세가지의 기본 연산을 행렬곱으로 표현할 수 있음을 배웠다. 그렇다면 이 변환들을 해주는 행렬들을 미리 다 곱해놓으면 단 한 번의 행렬곱으로 모든 물리적 연산을 표현할 수 있지 않을까? 실제로도 그렇다. 그러나 여기서 주의해야 하는 것은 어떤 연산을 먼저 하는지가 중요하다는 점이다. 위 사진처럼 물체를 이동시킨 후 회전시키고 그 다음 크기를 변화시키면 우리가 원하는 결과가 나오지 않았음을 알 수 있다. 때문에 우리는 항상 Scaling, Rotation, Translation의 순서로 연산을 해주어야 한다. 이 연산은..

mathematics/game mathematics

[Mathematics] 11. Translation

x,y,z에 v 벡터를 더해주는 대신 사진 하단처럼 4x4 행렬을 만들고 그 행렬에 (x,y,z,1)을 곱해주는 것으로 결과값을 구할 수 있다. 이는 캐릭터 이동 등에 쓰일 수 있다. 이때 쓰인 4x4 행렬을 이동행렬(Translation Matrix)라고 한다.

mathematics/game mathematics

[Mathematics] 10. Rotation

3차원 회전에 대한 각 축별 회전행렬(Rotation Matrix)도 같은 원리로 도출할 수 있다. 회전방향은 마찬가지로 기준이 되는 축에 대해 반시계 방향이다. (위 식을 보면 2차원 회전행렬과 3차원 z축 기준 회전행렬이 거의 유사함을 볼 수 있다) void Matrix4x4::SetRotation(float flAngle, const Vector& v) { // Normalize beforehand TAssert(fabs(v.LengthSqr() - 1) < 0.000001f); // c = cos(angle), s = sin(angle), t = (1-c) // [ xxt+c xyt-zs xzt+ys ] // [ yxt+zs yyt+c yzt-xs ] // [ zxt-ys zyt+xs zzt+c ..

mathematics/game mathematics

[Mathematics] 9. Scaling

어떤 벡터의 크기를 키우거나 줄이려면 Identity Matrix의 각 열벡터에 상수배를 해준 후 Identity Matrix에 벡터를 곱해주면 된다. 이때 만약 I 대신 다른 기저벡터 좌표계에 대해 크기를 변경하고 싶다면 I 대신 그 기저벡터들을 열벡터로 가지는 행렬을 대신 사용하면 된다.

mathematics/game mathematics

[Mathematics] 8. 좌표계 변환

어떤 좌표계A에서 좌표계B로 좌표를 이동시키거나 그 반대로 이동시키는 방법을 나타내면 다음과 같다. 위 예시에서는 Our coordinates는 기본적인 3차원 좌표계이며 Jennifer's coordinates는 기본 좌표계에서의 벡터 (2,1), (-1,1)을 basis 혹은 기저벡터로 하는 좌표계이다. 이때 Jennifer의 좌표계에서 표현된 어떤 좌표를 우리 좌표계의 표현방식으로 표현하려면 위처럼 jennifer의 기저벡터를 행렬A로 표현한 후 A에 좌표를 곱해주면 된다. 반대로 우리 좌표계에서의 좌표를 Jennifer의 좌표계에서 표현하려면 A의 역행렬에 좌표를 곱해주면 된다. 참고: https://youtu.be/P2LTAUO1TdA (영상 후반부의 다른 좌표계로의 rotation을 하는 법도..