보통 고등학교 때 기하와 벡터를 다루며 기본적으로 내적과 외적을 배우는데,
다들 전문적인 물리 엔진 제작과 같은 전문적인 업무가 아니면 쓸모없다고 생각하지만, 의외로 단순한 작업에서도 간간히 쓰이곤 한다.
그래서 이번 시간에는 게임 제작에서 사용될 수 있는 내적, 외적에 대해서 간단히 정리해보려 한다.
우선 내적과 외적을 구하는 방법이나, 등장하는 단어의 의미를 모른다면 다른 포스트에서 기본적인 내용을 확인하고 오도록 하자.
내적
우선 내적에 대해 기본적인 것만 설명 하자면,
내적은 A*B = |A| * |B| * cosX 이다.
A벡터와 B벡터의 크기에 코사인 값을 곱한 것이다.
1. 두 벡터 사이의 각도
첫 번째로 두 벡터 사이의 각도를 구할 수 있다.
|A| 와 |B|를 반대쪽으로 이항한 후 코사인의 역함수를 구해주면 된다.
특히 정규화된 단위벡터의 경우 크기가 1이므로 더 간단하게 구할 수 있다.
오브젝트 위치벡터 사이의 각도는 항상 유용하게 쓰일 수 있다.
2. 물체가 앞에 있는지 뒤에 있는지 판별
내적을 이용해서 물체가 앞에 있는지, 뒤에 있는지 판별할 수 있다.
플레이어의 시선(forward)를 중심으로 좌, 우 90도가 넘어가는 순간 코사인 값은 음수를 갖기 때문에,
플레이어 시선의 벡터와 target의 위치벡터를 내적해서 양수값이면 플레이어의 정면, 음수값이면 플레이어의 후면에 존재한다는 뜻이다.
3. 시야각 내에 물체 판별
내적을 이용해서 특정 오브젝트가 플레이어의 시야각 내에 위치하는지 여부를 판별할 수 있다.
플레이어의 시야각을 X라고 했을 때, 플레이어의 시선과 오브젝트의 위치벡터를 내적해서 얻는 각도가
X/2보다 크다면 시야 내부에 위치한다는 뜻이고, 그 반대의 경우는 오브젝트가 시야 내에 없다는 뜻이다.
외적
외적은 보통 좌, 우를 판별할 때 많이 사용된다.
아까 내적을 살펴봤을 때 눈치챈 사람도 있겠지만, 내적은 좌, 우를 구분하지 않는다.
왼쪽이던 오른쪽이던 같은 각도라면, 같은 값을 반환해낸다.
같은 의미로 인자의 순서에 관계가 없어 교환법칙이 성립한다.
A*B 나 B*A나 같은 값을 반환한다는 뜻이다.
하지만 외적은 다르다.
외적은 우선 내적과 다르게 스칼라 값이 아닌 벡터 값이므로 방향성을 갖고,
인자의 순서가 반대일 경우, 같은 절대값의 반대부호를 가진 값을 반환하게 된다.
1. 좌 우 판별
아까 언급했었던 대로 외적은 보통 오브젝트가 왼쪽에 있는지, 오른쪽에 있는지 판별하는데 사용된다.
플래이어의 시선과 Up 벡터를 중심으로 외적을 구한다면 플레이어의 왼쪽에있는 오브젝트는 양수,
플레이어의 오른쪽에 있는 오브젝트는 음수를 반환할 것이다.
물론 이 외에도 사용되는 곳이 많지만, 게임이라는 조건에서 보편적으로 사용될 수 있는 기법은 이정도 인 것 같다.
'ETC > Unity' 카테고리의 다른 글
[유니티] 마우스 방향으로 2D Object 회전시키는 방법 (2) | 2020.02.29 |
---|---|
[유니티] Lerp 와 Slerp 의 차이 - 선형 보간, 구면 선형 보간 (1) | 2020.02.12 |