게임 수학 - 벡터의 내적
벡터의 내적이란?
벡터의 내적이란, 두 벡터의 각 성분끼리 곱한 후, 합한 것
Inner Product, Dot Product 라고 한다.
2 개의 벡터를 단 하나의 스칼라(실수) 값으로 변환
조건
두 벡터의 길이는 같아야 한다.
내적 공식
내적 공식은 크게 2가지가 있다.
크기와 각도를 이용한 내적 공식
|a| , |b| : 벡터의 크기
θ : 두 벡터 사이의 각도
성분을 이용한 내적 공식
두 벡터가 a = (a1,a2,a3) , b = (b1,b2,b3) 라면,
맨 처음 각 성분끼리 곱한 후 합한 것을 그대로 식으로 푼 공식
그렇다면, 내적의 의미가 도대체 뭘까
많은 수학강의 유투브가 설명하는 상황을 그대로 발췌하면 아래와 같다.



일단 2번 이미지가 삼각비로 설명하기 쉬워, 이를 이용해 쉽게 설명하자면, 아래처럼 된다.
Cosθ = x/a 를 알 수 있고, 이항하게 되면 x = aCosθ 로 구할 수 있다.
즉, 이 사실을 가지고 윗 사진에 대응할 때, 어떻게 설명되냐면, 벡터 A 가 벡터 B에 수선의 발을 내리게 되면, 선분 OH가 나오고 이 선분 OH 가 aCosθ 가 된다는 것이다.
이는 정 사영의 개념에서 위에서 태양이 내리쬘 때, A 벡터가 B의 벡터에 길이가 얼마나 되는 그림자가 나타날 것인가, 이렇게 이해할 수 있다.
결론은 OB * OH 의 실수가 스칼라 값으로 나오게 되고, 이 값으로 두 벡터의 방향성을 측정할 수 있다.
벡터 내적의 직관적 의미
A ⋅ B > 0 ( 두 벡터가 유사한 방향성을 가짐 )
A ⋅ B = 0 ( 두 벡터가 직교함. 투영되는 것이 없음 )
A ⋅ B < 0 ( 두 벡터가 반대되는 방향을 가짐 )
그렇다면, 게임에선 어떻게 사용할까?
시야 판정
내가 바라볼 시야각 B를 설정하고, Look Vector를 기준으로 나 - 오브젝트를 향하는 Dir V를 구하여, Look Vector와 Dir를 내적하여, 바라볼 시야각의 Degree 값과 비교해서 시야각 내에 있는지 판정할 수 있다.
앞뒤 판정
두 오브젝트의 Look Vector 를 기준으로 내적할 때, 음수인 경우라면 내 앞
두 오브젝트의 Look Vector 를 기준으로 내적할 때, 0인 경우라면 수직 (옆)
두 오브젝트의 Look Vector 를 기준으로 내적할 때, 양수라면 내 뒤
조명 및 쉐이딩
노멀 맵이나, 광원이 메쉬 표현에 어떤 법선을 도출했느냐에 따라 조명 강도를 결정할 수 있다.
참고
