[차한잔] 벡터 이야기
스칼라는 방향이 없는 크기를 나타냅니다.
벡터는 방향이 있는 크기를 나타내고요.
해서 자동차를 앞으로 1m 이동시키거나 뒤로 1m 이동시키거나 스칼라로는 구분이 불가능하지만 벡터론 구분이 가능해요.
한편 자동차를 종로에서 앞으로 1m 이동시키건 여의도에서 앞으로 1m 이동시키건 동일한 벡터만큼 이동한 겁니다.
벡터를 정규화한다(Normalize)는 건 크기를 1로 만드는 걸 말합니다.
벡터의 크기를 1로 만들면 방향만이 남게 되죠.
이렇게 한 요소를 1로 만들어 요소 수를 줄이고 간단히 만드는 건 수학에서 자주 이용되요.
V.normalized: 벡터 정규화. 방향만 남음.
V.Normalize(): 벡터 정규화 함수.
V.magnitude: 벡터의 스칼라화. 크기만 남음.
벡터의 내적(Dot Product): 두 벡터 사이의 각도를 구할 수 있다. 두 벡터의 내적이 0이면 두 벡터는 수직 관계, 1 또는 -1이면 평행이다.
Vector3.Dot(aVector, bVector)
벡터의 외적(Cross Product): 두 벡터로 이루어진 평면에서 수직 방향(법선벡터 Normal Vector)을 알 수 있다. 양이냐 음이냐로 좌우, 혹은 상하를 구분 가능하다. 3D 그래픽을 하는 사람이면 폴리곤들에서 털 숭숭 나온 듯 보이는 Normal이 친숙하죠. 이게 외적을 통해 만드는 것.
Vector3.Cross(aVector, bVector)
* 함수 예제들은 Unity C#의 함수들. V는 벡터.
이 벡터를 어디에 이용하느냐. 워낙에 많은 용도로 쓰이지만 게임에서 쓰이는 부분을 간단히 알아봅시다.
1. 물체의 이동, 대각선 이동시 좌우 이동과 동일한 속도를 내게 할 때:
정규화한 벡터에 일정 스칼라 크기를 매 프레임 더하는 방식으로 이동.
2. 특정 적이 있는 방향으로 주인공이 바라보게 할 때:
적 위치 - 내 위치 한 뒤 정규화하면 적쪽을 향하는 벡터가 나옵니다.
현재 주인공 전방을 향하는 벡터 방향을 위에 구한 벡터쪽으로 변화시키면 주인공이 적을 향하게 됩니다.
3. 적이 시각안에 들어왔는지 확인할 때:
관측자의 전방벡터와 적을 향하는 방향벡터를 내적으로 각도 검사하는 방법.
그외에도 여러가지가 있겠지만 이 정도만.
라이브러리나 게임 엔진이 좋은게 개념만 이해하면 공식을 외울 것도 없이 필요한 곳에 함수명만 갖다 붙이면 된다는 거.
혹 잘못된 점 있으면 지적해주세요.
| 글쓰기 |




