Vector의 가장 기본적인 계산은 내적 (inner Product or Dot Product)과 외적(Outer Product or Cross Product) 이다
이 페이지에서는 내적에 관해서 이야기 해볼꺼다.
일단 내적에 대해 살펴보자
내적은 a, b 벡터의 크기의 곱하고 두 벡터 사이의 각도를 cos 한 값이다.
결과적으로 내적은 스칼라 값으로 결과가 나온다.
내적은 주 벡터간의 투영 정도이다.
만약 두 직선이 평행하다면 투영정도가 100%가 되기 때문에 -1 or 1 (방향벡터 기준)
두 벡터가 직각이라면 투영도가 하나도 없기 때문에 0이 된다.
위에 식을 쉽게 풀이한다면
a = (ax, ay, az)
b = (bx, by, bz)
두 벡터를 가정한다면
로 쉽게 내적을 계산 할 수 있다.
그럼 내적을 한 결과 값으로 게임에서 어떤것들을 활용 할 수 있을까??
1. 플레이어 기준으로 몬스터가 내 뒤에 있는지 앞에 있는지 판별.
- 플레이어 기준으로 -90 & 90 사이에 있다면 앞에 있는 것이다.
방향벡터 a (플레이어 기준 forward) 와 b 를 내적하면
양수 : 몬스터가 앞에 있는 것.
0 : 방향벡터가 서로 지각으로 있다는 것 즉 몬스터가 바로 내 오른쪽이나 왼쪽에 있는 것.
음수: 몬스터가 뒤에 있는 것.
2. 두 벡터의 사이 각
두 벡터의 정보가 있다면 크기를 구 할 수 있으므로 크기와, 내적, cos 역삼각함수 활용하여 두 벡터간의 사이각을 구 할 수 있다.
3. 몬스터가 플레이어 시야에 들어왔는지 판별
- 플레이어의 시야가 θ라고 가정하면 방향벡터 a (forward 벡터) 양쪽으로
-θ/2 ~ θ/2 각도 안에 있어야한다.
몬스터와 플레이어 각각 벡터를 위에 나와 있는 공식에서 내적을 활용하여 두 벡터간의 각도를
구하여 시야 안에 있는지 밖에 있는지를 판별한다.
내적을 통해 게임 안에서 활용할 수 있는 것들은 정말 많다.
참고 자료 : 인프런 다이렉트12 강의
http://rapapa.net/?p=2974
'개발 공부 > DirectX12 및 게임수학' 카테고리의 다른 글
[게임수학] 변환행렬 (0) | 2022.10.10 |
---|---|
[게임수학] 행렬 (0) | 2022.10.10 |
[게임수학] Vector 외적 (0) | 2022.03.13 |
[게임수학] 기하 벡터 기초 (0) | 2022.02.22 |
[게임 수학] 삼각함수 (0) | 2022.02.17 |