[이득우 게임수학] 11. 외적: 3차원 공간의 분석과 응용
- 📕 Book/이득우 게임수학
- 2023. 3. 1.
11.1 벡터의 외적
3차원 벡터의 외적은 x기호를 사용한다. 3차원 벡터 u와 v의 외적 u x v는 다음과 같다
u = (u_x, u_y, u_z), v = (v_x, v_y, v_z)
u x v = (u_y v_z - v_y u_z, u_z v_x - v_z u_x, u_x v_y - v_x u_y)
외적은 교환법칙이 성립하지 않는다. 외적은 결합법칙도 성립하지 않는다. 하지만 덧셈에 대한 분배법칙은 성립한다.
평행성 판별
동일한 벡터를 내적하면 벡터 크기를 제곱한 값이 나온다. 그러나 동일한 벡터를 외적하면 영벡터가 나온다. 또한 평행한 벡터를 외적해도 여벡터가 나온다. 이처럼 외적의 성질은 평행성을 판별하는 데 사용된다. 내적의 경우 두 벡터의 직교성을 판별하는 데 사용된다. 벡터 외적의 크기는 sin 함수에 비례한다.
|u x v| = |u| |v| |sinθ|
법선 벡터
벡터 외적은 두 벡터에 직교하는 벡터를 생성한다. 두 벡터 u,v 가 있을때 u와 v의 외적결과에 u를 내적하면 0이 된다. 반대로 u와 v의 외적결과에 v를 내적해도 0이 된다. 그래서 외적의 결관는 두 벡터에 모두 직교함을 알수 있다.
점 P1, P2, P3 를 결합해 만든 평면이 있다고 할 때, u = P2 - P1, v = P3 - P1 이 둘을 외적하면 세 점이 만들어내는 평면에 직교하는 벡터가 생성될 것이다. 이는 평면이 향하는 방향을 나타내며 이 벡터를 법선 벡터(Normal vector)라고 한다. 외적은 교환법칙이 성립하지 않기 때문에 u x v와 v x u는 서로 반대 방향으로 법선 벡터가 생성된다. 책에서는 오른손 좌표계를 사용하므로 오른손 법칙을 따르도록 하자.
좌우 방향 판별
캐릭터 정면 시선 벡터를 f, 캐릭터에서 대상으로 향하는 벡터가 v, y축 (0,1,0) 벡터를 y 라고 할 때 f와 v를 외적하고 y를 내적한 결과를 가지고 좌우 방향을 판별 할 수 있다.
- (f x v) · y > 0 : 물체가 시선 방향에서 왼쪽에 있음
- (f x v) · y < 0 : 물체가 시선 방향에서 오른쪽에 있음
- (f x v) · y == 0 : 물체가 시선 방향에 있음
11.2 벡터로부터 회전행렬 생성
직교하는 벡터를 생성하는 외적의 성질은 카메라의 회전을 설정하는데도 사용된다. 카메라의 시선벡터를 v라고 한다면 이 벡터는 카메라 트랜스폼의 로컬 z축이 될 것이다. 월드 공간의 y축과 로컬 z축을 외적하면 카메라의 로컬 x축을 구할 수 있다. 마지막으로 로컬 z축과 x축을 외적하면 로컬 y축을 구할 수 있다.
11-1 실습
항상 물체를 바라보는 카메라의 구현
11.3 렌더링 계산량을 줄여주는 백페이스 컬링
게임은 실시간으로 빠르게 렌더링을 처리해야 하기 때문에 카메라에 노출되지 않는 메시(Mesh)의 뒷면(Backface)은 그리지 않는 것이 효과적이다. 이런 뒷면을 생략하는 기법을 백페이스 컬링(Backface culling)이라고 한다. 삼각형의 세 점을 지정하는 인덱스 버퍼에는 점의 순서가 나열되어 있다. 이를 활용하여 삼각형의 방향을 지정하지 않아도 외적을 사용해 삼각형이 향하는 방향을 파악할 수 있다.
11-2 실습
보이지 않는 뒷면 그리기를 건너뛰기
11.4 오일러 각의 문제를 해결하는 로드리게스 회전 공식
오일러 각의 문제는 임의의 축에 대한 평면의 회전 방식을 사용하여 해결 가능하다. 이 방식을 축-각 회전(Axis-Angle rotation)이라 부른다.
공식 유도 과정 생략
11-3 실습
3차원 공간에서의 자유로운 회전
11.5 삼중곱
벡터의 외적과 내적을 두 번 연속 사용하는 삼중곱(Triple product)연산은, 세 개의 벡터 u,v,w 를 사용하여 내적과 외적의 순서에 따라 4가지 경우의 수가 발생한다.
1. u · (v · w)
2. u · (v x w)
3. u x (v · w)
4. u x (v x w)
그러나 1번은 괄호 안의 벡터 내적의 결과값은 스칼라가 되므로 벡터를 세번 곱햇다고 보기 어렵다. 3번의 경우 벡터와 스칼라는 외적할 수 없으므로 연산이 불가능 하다. 고로 2,4번만이 유효한 삼중곱 연산이다.
스칼라 삼중곱
2번 연산은 (u · (v x w)) 스칼라 삼중곱(Scalar triple product)이라고 부른다. 스칼라 삼중곱은 3차원 공간의 세 벡터가 모두 선형 독립의 관계를 가지는지 판단하는 판별식으로 생각할 수 있다. 결과값이 0이 아니면 세 벡터는 모두 선형 독립의 관계를 가진다.
벡터 삼중곱
4번 연산은 (u x (v x w)) 벡터 삼중곱(Vector triple product)이라고 한다.
u x (v x w) = (u · w) · v - (u · v) · w
위의 식을 삼중곱 전개(Triple product expansion)또는 라그랑주 공식(Lagrange's formula)이라 한다. 다소 복잡한 외적을 두개의 내적 연산으로 변환한다는 특징을 지닌다. 벡터 삼중곱으로 만들어지는 벡터는 두 벡터가 만드는 평면에 속함을 알 수 있다.
11.6 정리
- 벡터 외적은 3차원 공간에서만 사용 가능하다.
- 벡터의 외적과 내적이 가지는 성질은 서로 상반되지만 둘을 이용하여 게임 제작에 유용하게 사용할 수 있다.
- 로드리게스 회전공식은 내적과 외적의 응용력을 높여주는데 도움이 된다.
- 삼중곱 연산은 사원수 수식을 전개할 때 사용된다.