게임프로그래밍의 시작은 벡터부터
요즘 백수되어서 시간이 남아돌아서 배운걸 복습하는 차원에서 이글을 쓴다. 나만봐도 되지만 기초부분은 누구에게나 항상 중요하니 꼭 기억해야된다.
게임과 물리에서 벡터라는 수학적 도구를 자주 사용한다. 이 벡터라는 도구는 방향과 길이(크기)를 가지는 속성이 있는데 이 속성으로 많은 것을 알수있다. 그리고 굉장히 중요하기 때문에 꼭 기억해야될 부분이다.
내가 예전에 처음 게임을 제작하고자 했을때 벡터를 알고있었지만 어떻게 써야되는지 그리고 이것을 이용해서 무엇을 할수있는지 왜 사용해야되는지 몰랐다. 그리고 나중에 문제해결을 위해서 벡터가 필요하다는 것을 나중에 알게되었다.
예를 하나들어보겠다. 사각형이 있는데 이사각형을 표현하자면 아래와 같이 4개의 모서리에 좌표가 필요하다.
4개의 사각형이 있는데 이사각형을 이동하려고 한다면 4개의 (x,y)순서쌍 좌표가 필요하다 이것을 오른쪽으로 10픽셀씩 움직이려면 4개의 모서리에 x값을 더해줘야된다. 이런방식으로 계산하면 복잡하기 때문에 다른 방식으로 사각형을 표현하면
가운데 붉은생 원이 중심으로 사각형의 출력위치의 기준이다.그리고 그 원점을 기준으로 각각 4개의 모서리 값을 설정할수있다.이렇게 되면 가운데 원점의 값만 이동시켜주면 사각형을 표현하기가 한결 수월해진다.
벡터의 필요성을 이해하기위해서 간단위치 이동을 예를 들어보자 (x,y)의 값에서 오른쪽으로 50픽셀 위쪽으로25픽셀을 움직여야 된다고 생각해보자 그리고 이동이라는 말은 이동 에니메이션을 해야된다는 의미로 생각하길 바란다.
움직이는 예제를 작성해보라고 하면 막상 쉽게 떠오르지가 않을것이다. 왜냐하면 단순히 x,y의 좌표값으로 더하는것으로는 직선움직임을 할수없기때문에다. 그렇기 때문에 여기에서 벡터가 필요한것이다.
물론 직선의 방정식을 이용하면 해결할수도있고, y절편 공식을 이용해도된다. 이 공식은 (게임프로그래머를 위한 수학과 물리 라는 서적에 잘나와있는데 한번 보길바란다.) x가 2픽셀을 이동하면 y은 몇픽셀을 움직여야되는지에 대한 값을 알수있다.
위의 내용은 벡터의 필요성을 얘기한 예를 든거고 우선 벡터를 이용하면 방정식을 이용하는것보다 수월하게 직선을 정의 할수있다.
위의 이미지에서 보와 같이 A벡터 B벡터를 정의 하였다. 처음에 설명처럼 방향과 길이가 있는것을 벡터라고 한다. 그럼 이것을 이용해서 아까 위와 같은 상황에서의 움직임을 적용해보자.
일단 가고자하는 방향의 벡터를정의 해야되는데 벡터를 정의 하는것은 쉽다. 물체A(10,100),물체B가 (200,50)위치에 있다고 생각해보자. 이 두 물체 A, B를 벡터라고 생각해보자 조금 추상적이지만 아래 그림과 같이 나올것이다.
조금 기괴한 모양이라고 생각할수도있다. 위에서 벡터를 정의할때 벡터는 방향과 크기만을 가지고 있다고 하였다. 벡터는 위치가 없기때문에 위치의 원점에서부터 벡터시작된다고 생각할수있다. 벡터의 시작지점부터 A,B의 좌표를 기준으로 벡터를 만들면 위와 같은 요상한 모양이 나온다.
이벡터를 기준으로 B - A를 하면 아래와 같이 가고자 하는방향의 벡터를 구할수가있다.
벡터의 연산은 각각 다른데 덧셈과뺄셈은 연산 결과가 벡터이고 벡터와 벡터의 곱은 내적이라고 하는 연산이다.벡터와 벡터의 나눗셈은 연산할수없다.