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

mathematics

mathematics/game mathematics

[Mathematics] 7. Billboarding

둠이나 단간론파처럼 스프라이트가 2D이지만 게임 저체는 3D인 환경에서 스프라이트가 항상 플레이어를 바라보도록 하려면 어떻게 해야할까? 플레이어, 그리고 스프라이트의 3차원 상의 위치가 주어졌다고 가정하자. (E, P) 일단 스프라이트에서 플레이어로 향하는 방향을 구하면 F = P - E 이다. 이걸 구하면 우리는 플레이어의 시야와 스프라이트가 우측으로 90도를 이루는 R벡터를 구할 수 있다. 어떤 두 벡터를 외적하면 그 두 벡터 모두에 수직인 벡터를 구할 수 있다는 것을 우리는 이미 한 차례 다뤘었다. R = F x (0,1,0) (여기서 F와 외적중인 벡터가 (0,1,0), 즉 global한 up vector임을 기억하자. U벡터는 스프라이트 자체의 상대좌표계상에서의 up벡터를 의미한다.) 이제 F와..

mathematics/game mathematics

[Mathematics] 6. 총알 소리 (Bullet whizzes)

총알이 어떤 경로를 따라 발사되었을때 주변의 플레이어에게 총알이 바람을 가르는 소리를 들려주려고 한다. 이때 음원의 위치는 어디가 되어야 하는가? 플레이어의 위치를 P, 총알의 발사경로를 a, proj a b를 b프라임이라고 할때 우리는 간단한 벡터 연산을 통해 a와 b와 세타각을 이용해 b프라임을 표현 가능하다. (b 프라임이 음원의 위치이다.)

mathematics/game mathematics

[Mathematics] 5. AABB Intersection

삼각형의 닮음 성질을 이용해 어떤 벡터와 x,y 축에 평행한 변을 가진 사각형의 collision check를 하는 방법이다. 3차원에서도 여기서 축 하나만 더 추가하면 같은 원리로 판정이 가능하다. 만약 사각형이 축에 평행하지 않다면 어떻게 해야 할까? 뒤에서 다루는 내용인 사각형의 각 좌표에 TRS Matrix를 곱해주어 사각형이 회전한 상태라고 가정해보자. 이 상태에서 어떤 벡터(직선)와의 충돌을 판정하려면 단순히 이 사각형을 다시 축에 평행하게 이동시키고, 이 벡터도 동일한 상대적 위치를 유지하도록 이동시켜주면 된다. 정리하면, 각 변이 축에 평행하지 않은 사각형과 어떤 벡터의 충돌을 판정하려면, 사각형의 꼭짓점들과 판정하려는 벡터에 TRS의 역행렬, 즉 S^-1 * R^-1 * T^-1을 곱해주..

mathematics/game mathematics

[Mathematics] 4. Interpolation

t1~t2동안 s1~s2 사이를 움직이게 하는 함수 Remap(t)를 구하는 방법: 두 개의 함수로 분할한다

mathematics/game mathematics

[Mathematics] 3. 벡터의 외적

이전글에서 오일러각을 이용해 플레이어 카메라의 방향벡터를 구할 수 있었고, 그 벡터의 x, z 성분이 플레이어의 평면 상에서의 방향벡터라는 것도 알 수 있었다. 이때 플레이어의 평면 상의 방향벡터가 forward 벡터가 된다. FPS에서 W나 S를 누르면 바라보는 방향으로 이동하는데, 즉 플레이어의 속도= forward 방향*스칼라*캐릭터 이동속도 가 된다. (여기서 스칼라 값은 W를 눌렀는지 S를 눌렀는지에 따라 결정되며 보통 W를 1, S를 -1로 둔다. 조이스틱에선 조이스틱을 기울인 정도까지 고려해 -1~1 사이의 값을 줄 수 있다.) 마찬가지로 A나 D를 누르면 속도 = right방향*스칼라*캐릭터 이동속도 가 된다. (이 경우엔 D가 1, A가 -1) 종합하면 플레이어의 xz평면 상에서의 was..

mathematics/game mathematics

[Mathematics] 2. Euler angle

오일러각은 어떠한 3차원 회전을 세 개의 값으로 표현하는 방법이다. 각 값은 pitch, yaw, roll이며 다음과 같이 쉽게 이해가 가능하다 pitch: 고개를 위아래로 들었다내렸다 하는것 yaw: 고개를 좌우로 도리도리 roll: 머리를 어깨 쪽으로 까딱까딱 (뭔가 잘 이해가 안 갈때 하는 동작처럼) FPS 게임에 대입하면 마우스의 x는 yaw, y는 pitch에 대응된다. 오일러각을 원점에서 시작하는 3차원 벡터로 변한할 수 있다. (fps의 경우 플레이어 카메라의 방향벡터) 플레이어가 서있는 평면이 xz평면이라고 생각하면 공식은 다음과 같다. (p,y,r) -> (vx,vy,vz) vx = cos y * cos p vy = sin p vz = sin y * cos p (vx, vz) 가 플레이어..

mathematics/game mathematics

[Mathematics] 1. Delta time

게임과 수학 카테고리의 포스트들은 학습 기록용으로 작성중이기 때문에 글이 정돈되지 않을 수 있다는 점 양해 부탁드립니다🙏 본 카테고리의 글들은 Dunn and Parberry의 책 에서 다루는 내용들 위주로 작성되고 있습니다. 30 fps인 게임에서의 dt(delta time)는 1/30s이다. 어떤 오브젝트의 현재 변위를 s, 현재 속도를 v, 다음 프레임에서의 변위를 s' 이라고 했을 때 s' = s + dt * v이다. 마찬가지로 현재 속도를 v, 현재 가속도를 a, 다음 프레임에서의 속도를 v'이라고 했을 때 v'=v + dt * a 이다.

mathematics/game mathematics

오일러 각도 (Euler Angle)

오일러 각도: 3개의 값 만으로 모든 3차원 회전을 표현하는 방법. Pitch - 고개를 끄덕거릴 때 변하는 값 Yaw - 고개를 좌우로 흔들 때 변하는 값 Roll - 목을 스트레칭 할 때 머리를 어깨 쪽으로 기울일 때 변하는 값 (P,Y,R) 순으로 쓴다. 오일러 각도를 3차원 벡터로 변환하는 법: (x, y, z) = (cos Y cos P, sin Y cos P, sin P) 참고: