Quick Comparison
text
dot(a, b) = |a||b|cos(theta) -> 같은 방향 +, 수직 0, 반대 방향 -
cross(a, b) = 수직 벡터 -> 크기는 평행사변형 넓이, 방향은 순서에 의존각도 의미를 바로 읽으려면 두 입력을 정규화합니다. 외적은 cross(a, b) = -cross(b, a)이므로 좌표계와 winding을 함께 확인합니다.
판정
csharp
Vector3 toTarget = (target.position - transform.position).normalized;
float facing = Vector3.Dot(transform.forward, toTarget);
bool inFront = facing > 0f;
Vector3 triangleNormal = Vector3.Cross(b - a, c - a).normalized;FOV 절반 각도가 halfAngle이면 dot(forward, toTarget) >= cos(halfAngle)로 시야 cone을 판정할 수 있습니다. Lambert diffuse 조명은 max(0, dot(normal, lightDirection)) 형태로 표면이 빛을 향하는 정도를 사용합니다.
Cross product는 삼각형 normal, 카메라 right 축, 좌우 방향 판정에 사용합니다. 하지만 왼손·오른손 좌표계와 vertex 순서가 바뀌면 기대 방향도 뒤집힙니다.
자주 틀리는 점
- 정규화하지 않은 dot 값을 곧바로
-1..1이라고 해석하지 않습니다. - Degree 값을 그대로
cos에 넣지 않고 API가 요구하는 radian 단위를 확인합니다. - 외적 순서를 바꾸고 culling·normal 방향이 그대로일 것이라 기대하지 않습니다.
- 거의 평행한 벡터의 외적을 정규화하기 전에 길이를 확인합니다.
참고 링크
2 sources