게임 수학 시리즈 – 게임 개발에서 삼각함수가 중요한 이유

게임 개발을 공부하는 과정에서 걸림돌이 되는 것 중 하나가 바로 게임 수학입니다.

그렇게 게임 수학을 공부하다 보면, 고등학교 시절 우리를 어렵게 했던 삼각함수를 만납니다.

그리고 많은 개발자와 개발 지망생들이 삼각함수를 공부하기 시작하면서 어려움을 느끼는 경우가 많습니다.

sin, cos, tan 같은 개념과 공식들이 등장하고, 각도와 라디안까지 나옵니다.

“게임 개발자가 왜 이런 수학까지 알아야 하지?”라는 생각이 들기도 합니다.

하지만 실제 게임 개발에서 삼각함수는 단순한 수학 공식 수준이 아닙니다.

게임 안에서 “회전”과 “방향”,
그리고 “움직임”을 표현하기 위한 핵심 도구 중 하나입니다.

따라서 삼각함수는 게임 개발자라면 필수적으로 넘어야 할 산 중에 하나입니다.

즉, 삼각함수는 시험 문제를 풀기 위한 수학이 아니라,
게임 안에서 공간을 계산하기 위한 수학이라고 보는 편이 훨씬 자연스럽습니다.

지금은 수학 문제를 잘 풀어서 점수를 높게 받기 위함이 아니라
우리가 만들고 싶은 게임에 필요한 어떤 기능을 구현하기 위해 필요하기 때문에 배우는 것입니다.

게임 개발자가 되려면 게임 수학이 필요하다는 말은 많이 들어보셨을 거라 생각합니다.
그래서 여러분은 지금 이 글을 읽고 계실 겁니다.

앞으로 게임에 자주 활용되는 실제 예시를 중심으로 설명하려고 합니다.

하지만 그보다 먼저, 여러분 스스로 지금 왜 이걸 배우고 있는지를 이해하는 것이 더 중요하다고 생각합니다.

그리고 앞으로는 좋아보여서, 남들이 배우라고 해서 배우는 것보다
이걸 배우면 어떤 걸 얻을 수 있고,
어디에 활용할 수 있는 지를 스스로 이해한 상태에서 학습을 시작하는 것이 좋다고 생각합니다.


게임에서는 방향 계산을 끊임없이 사용한다

게임 안에서는 생각보다 훨씬 많은 상황에서 방향 계산을 해야합니다.

우리가 플레이하는 대부분의 게임에서는 객체가 단순히 직선으로만 움직이지 않습니다.

캐릭터는 특정 방향을 바라보며 이동하고,
카메라는 플레이어 움직임에 맞춰 회전하며,
총알 역시 특정 방향으로 발사됩니다.

또한 적 AI가 플레이어를 바라보고 있는지 판단하거나,
마우스 위치를 기준으로 캐릭터가 회전하는 경우 모두 방향 계산과 관련되어 있습니다.

특히 2D 게임에서도 방향 계산은 자주 등장합니다.

예를 들어 탑다운 슈팅 게임을 만든다고 가정해보겠습니다.

플레이어 캐릭터가 마우스 방향을 바라보도록 만들고 싶다면,
현재 플레이어 위치와 마우스 위치 사이의 방향을 계산해야 합니다.

플레이어 위치와 마우스 위치 사이의 방향 벡터를 계산하는 게임 수학 예제
플레이어 위치에서 마우스 위치까지의 방향 벡터를 계산하는 과정입니다. 게임에서는 이 방향 벡터를 이용해 캐릭터 회전, 총알 발사 방향, 카메라 방향 계산 등을 구현하게 됩니다.

 

그리고 이 방향을 기반으로 캐릭터 회전 각도를 결정하게 됩니다.

결국 게임 안에서 “어디를 바라볼 것인가”를 계산하는 순간부터 삼각함수가 필요합니다.

따라서 삼각함수는 단순한 수학 공식이 아니라,
게임 안에서 방향과 회전을 계산하기 위한 핵심 도구 중 하나입니다.


원 위의 좌표를 계산하기 시작한다

삼각함수를 이해할 때 가장 중요한 개념 중 하나는 바로 원입니다.

특히 반지름이 1인 단위원(Unit Circle)은 이후 게임 수학 전체와 계속 이어지기 때문에 굉장히 중요합니다.

예를 들어 원 중심에서 특정 방향으로 이동한다고 가정해보겠습니다.

각도가 정해지면 원 위의 위치 역시 함께 결정됩니다.

그리고 이 좌표는 아래처럼 계산할 수 있습니다.

이 식에서 cos는 X축 방향 위치를 계산하고, sin은 Y축 방향 위치를 계산하게 됩니다.

게임 개발에서는 이 개념이 그대로 방향 계산으로 이어집니다.

예를 들어 캐릭터가 45도 방향을 바라보고 있다면, 캐릭터를 실제로 이동시키기 위해서는 X축 방향 이동량과 Y축 방향 이동량을 각각 계산해야 합니다.

단순히 “45도 방향으로 이동한다”라는 정보만으로는 실제 좌표를 변경할 수 없기 때문입니다.

즉, 게임 엔진 내부에서는 방향 정보를 좌표의 변화량으로 변환하는 과정도 필요합니다.

그리고 이 과정에서 cos는 X축 방향 이동량 계산에 사용되고, sin은 Y축 방향 이동량 계산에 사용됩니다.

Z축 회전 행렬

| x' |   | cosθ  -sinθ   0 | | x |
| y' | = | sinθ   cosθ   0 | | y |
| z' |   |  0      0     1 | | z |

따라서 2D 평면 기준으로 보면 아래와 같이 계산됩니다.

x' = x cosθ - y sinθ
y' = x sinθ + y cosθ

결국 cos과 sin은 단순히 X축과 Y축 이동량을 계산할 때만 사용하는 것이 아니라,
회전 행렬 안에서도 핵심 요소로 사용합니다.

특히 Z축 회전은 2D 평면에서의 회전과 같은 형태로 이해할 수 있습니다.

따라서 삼각함수는 단순 기하학 공식이 아니라,
게임 안에서 방향 정보를 실제 움직임으로 변환하기 위한 핵심 계산 도구입니다.


캐릭터 이동에도 삼각함수가 사용된다

예를 들어 플레이어가 바라보는 방향으로 이동하는 경우를 생각해봅시다.

플레이어의 회전 각도가 angle이라고 하면, 아래처럼 이동 방향을 계산할 수 있습니다.

float x = cos(angle);
float y = sin(angle);

여기에서 cos과 sin이 각각 X와 Y위치가 되는 원리를 아래 이미지를 통해 알 수 있도록 했습니다.

단위원에서 cos(angle)이 x좌표이고 sin(angle)이 y좌표가 되는 이유를 설명하는 게임 수학 이미지
단위원(Unit Circle) 위의 좌표는 (cosθ, sinθ) 형태로 표현됩니다. 게임 개발에서는 이 좌표를 방향 벡터로 사용해 캐릭터 이동과 회전 방향 계산 등을 구현하게 됩니다.

 

그리고 이렇게 얻은 x와 y 값을 이동 속도와 곱하면 실제 이동 방향 벡터를 만들 수 있습니다.

position.x += x * speed * deltaTime;
position.y += y * speed * deltaTime;

즉, 삼각함수는 단순 공식을 외우는 문제가 아니라,
게임 안에서 방향과 움직임을 계산하기 위한 핵심 수학 개념이라고 할 수 있습니다.

그리고 이런 방향 계산은 캐릭터 이동과 총알 발사, 카메라 회전 같은 다양한 시스템 안에서 계속 사용됩니다.


라디안을 사용하는 이유

수학에서 각도를 다룰 때 라디안(Radian)이라는 개념을 많이 사용합니다.

우리가 일상에서 각도를 다룰 때는 주로 각도(Degree)를 사용하는 경우가 많아 라디안은 익숙하지 않습니다.

우리는 보통 90도나 180도, 그리고 360도 같은 각도 표현에는 익숙합니다.

직각과 반 바퀴, 한 바퀴 회전을 일상적으로 각도 기준으로 표현하기 때문입니다.

그런데 수학을 공부하면서 각도를 다루다보면 파이(π)가 등장하고, 어렵게 느껴집니다.

특히 학교 수학 시간 이후로 π를 자주 사용할 일이 없었다면,
게임 수학에서 다시 등장하는 순간 거리감이 느껴질 수도 있습니다.

하지만 컴퓨터 그래픽스와 수학 라이브러리에서는 대부분 라디안 기준 계산을 사용합니다.

예를 들어 C++의 sin(), cos() 함수 역시 라디안 값을 기준으로 동작합니다.

float value = sin(3.141592f / 2.0f);

이 코드는 90도를 의미합니다.

왜냐하면 π는 180도이기 때문입니다.

따라서 π / 2 는 90도, π는 180도, 2π는 360도를 의미합니다.

즉, 라디안은 원의 회전을 수학적으로 표현하기 위한 단위라고 볼 수 있습니다.

그리고 게임 엔진 내부에서는 회전 계산이 굉장히 자주 발생합니다.

캐릭터 회전과 카메라 이동,
총알 방향 계산,
행렬 회전 계산 같은 다양한 시스템들이 계속 회전 연산을 수행합니다.

이런 계산들은 대부분 삼각함수와 함께 사용되는데,
수학 라이브러리 자체가 라디안 기준으로 동작하기 때문에 게임 엔진 내부에서도 자연스럽게 라디안을 기본 단위로 사용하는 경우가 많습니다.

즉, 게임 개발에서 라디안은 단순 수학 공식의 일부가 아니라,
회전과 방향 계산을 표현하기 위한 기본 단위에 훨씬 가깝다고 볼 수 있습니다.


게임 엔진은 결국 공간을 계산하는 시스템이다

게임 엔진 안에서는 수많은 시스템들이 방향과 회전 계산 위에서 동작합니다.

캐릭터 이동과 카메라 회전뿐 아니라,
렌더링과 물리 계산,
애니메이션 처리 같은 다양한 시스템들 역시 공간 계산을 기반으로 움직이게 됩니다.

그리고 이런 구조를 이해하기 시작하면 이후에 배우게 되는 벡터와 행렬 같은 개념들도 훨씬 자연스럽게 연결되기 시작합니다.

예를 들어 벡터는 방향과 거리, 속도를 표현하기 위해 사용하고,
행렬은 객체의 위치와 회전, 크기 변환을 처리하기 위해 사용합니다.

또한 카메라 역시 단순 화면 출력 장치가 아니라,
3D 공간 안에서 특정 방향을 바라보는 객체처럼 동작합니다.

렌더링 과정 역시 결국 “현재 객체가 어느 방향에 존재하는가?”
그리고 “카메라 기준으로 어떤 위치에 보이는가?”
를 계산하는 과정에 가깝습니다.

그리고 삼각함수는 바로 이런 공간 계산의 가장 기초가 되는 수학 도구 중 하나입니다.

따라서 삼각함수는 단순 시험용 공식이 아니라,
게임 엔진 전체 구조를 이해하기 위한 출발점에 가까운 개념이라고 볼 수 있습니다.


마무리

게임 개발에서 삼각함수는 단순 시험용 수학 공식이 아닙니다.

캐릭터 이동과 회전,
카메라 제어,
총알 발사 방향 같은 다양한 시스템을 계산하기 위한 핵심 수학에 가깝습니다.

특히 게임 안에서는 “방향”과 “회전” 계산이 끊임없이 발생하기 때문에,
삼각함수는 게임 수학의 출발점처럼 사용되는 경우가 많습니다.

그리고 이 개념을 이해하기 시작하면 이후에 등장하는 벡터와 행렬,
카메라 변환 같은 구조들도 훨씬 자연스럽게 연결되기 시작합니다.

다음 글에서는 게임 개발에서 벡터(Vector)가 왜 중요한지,
그리고 위치와 방향,
거리 계산이 어떻게 게임 시스템 전체와 연결되는지를 이어서 정리해보겠습니다.


👉 게임 엔진 구조를 더 깊이 이해하고 싶다면

아래 강의를 통해 직접 구현해보는 것을 추천드립니다.

C++로 만드는 게임 엔진 프레임워크 강의

👉 C++로 만드는 게임 엔진 프레임워크 강의 바로가기

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다