→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.
■ 세 점의 결합
아핀 공간에서 두 점의 결합에 사용되는 스칼라의 범위를 조절하여 직선, 반직선, 선분을 생성하였다.
그렇다면 3개의 점$(P_1, P_2, P_3)$을 결합하는 경우는 어떻게 되는지 살펴보자.
$$ P' = s\cdot P_1 + t\cdot P_2 + (1-s-t)\cdot P_3 $$
세 점을 결합하는 경우에도 결국 모든 스칼라의 합이 1이어야 점들의 선형 결합이 여전히 점으로 남아있을 수 있다.
위 식을 점-점의 형태로 본다면, 다음과 같이 변경할 수 있다.
$$ P' - P_3 = s(P_1-P_3) + t(P_2-P_3) $$
이제 위 식의 괄호를 벡터로 치환하면,
$$ \vec w = s\cdot \vec u + t\cdot \vec v $$
따라서 두 벡터 $\vec u, \vec v$가 선형 독립 관계라면 벡터 $\vec w$는 2차원 벡터 공간에 존재하는 모든 벡터를 생성할 수 있다.
세 점의 결합에서 스칼라 $s,t$의 범위를 $[0,1]$로 제한하면 선분의 형태가 만들어지는데, 이를 시각적으로 확인해 보면 위와 같은 삼각형의 형태가 나온다.
- 아핀 결합에서 모든 스칼라 값을 $[0,1]$범위로 한정한 결합을 컨벡스 결합이라 하며, 컨벡스 결합으로 만든 영역을 컨벡스 영역(Convex region)이라 한다.
컨벡스는 “볼록한 형태의 영역”이라 말할 수 있는데, 여기서 볼록함이란 영역 내 임의의 두 점을 연결한 선분을 만들었을 때 그 선분은 언제나 해당 컨벡스 영역 안에 속하는 성질을 의미한다.
- 반대로는 컨케이브(Concave)라 한다.
$$ \vec x = a\cdot \vec u + b\cdot \vec v + c\cdot \vec w $$
위와 같이 4개의 점을 결합하는 형태를 벡터로 치환하면 위와 같이 되고, 스칼라에 곱해지는 모든 벡터가 선형 독립의 관계라면 3차원 공간에서 모든 벡터를 생성할 수 있다.
마찬가지로 모든 스칼라의 값을 [0,1] 범위로 제한한다면, 위와 같은 삼각뿔 형태의 도형이 형성된다.
삼각뿔 영역 또한 내부의 두 점을 연결한 선분은 항상 해당 영역에 속하는 성질을 지닌다.
■ Mesh
3차원 공간에서 입체적인 물체는 삼각형을 이어붙이면 표현이 가능하다. 물체를 표현하기 위한 삼각형 데이터를 체계적으로 읽고 쓰기 위한 방법을 바로 메시(Mesh)라 한다.
메시는 다수의 삼각형으로 구성되고, 메시를 이루는 삼각형은 3개의 점으로 구성된다. 여기서 메시는 삼각형을 중심으로 물체 관련 정보를 기록한 것을 의미한다.
- 삼각형을 표현하는 각 점을 정점(Vertex)이라고 한다.
- 삼각형을 구성하는 정점 순번을 기록한 것을 인덱스 버퍼라고 한다.
두 개의 삼각형으로 이루어진 정사각형 메시를 정점 버퍼와 인덱스 버퍼로 저장한 예시이다. 정점 버퍼에는 각 정점(Vertex)의 위치를, 인덱스 버퍼엔 삼각형이 그려지는 순서를 저장한다.
- 삼각형의 외곽선만 그려 메시를 표현하는 방법을 와이어프레임(Wireframe)이라 한다.
■ 무게중심좌표
아핀 결합에서 사용된 3개의 스칼라$(s,t,1-s-t)$는 모두 실수이므로, 이를 묶으면 하나의 3차원 벡터로 만들 수 있는데 이를 "무게중심좌표"라 한다.
무게 중심 좌표는 삼각형에 관련된 정보를 담고있어서 관련된 기능을 구현할 때 유용하게 사용된다.
1. 무게중심좌표 계산
세 점의 아핀 결합이 삼각형이 되려면, 모든 스칼라의 범위는 [0,1]이어야 한다. 이 범위를 벗어나면 아핀 결합으로 생성된 점은 삼각형 "외부"에 위치한다.
아핀 결합으로 생성되는 점 $P'$이 삼각형 내부에 위치하고 있는지를 확인하기 위해 내적을 사용하여 식을 전개하면 다음과 같다.
$$ \vec w \cdot \vec v = (s\cdot \vec u + t\cdot \vec v) \cdot \vec v\\\vec w \cdot \vec u = (s\cdot \vec u + t\cdot \vec v) \cdot \vec u $$
위 식을 정리하여, s에 대한 식과 t에 대한 식으로 정리하면 아래와 같이 정리된다.
$$ s = \frac{(\vec w \cdot \vec v)(\vec u \cdot \vec v) - (\vec w \cdot \vec u)(\vec v\cdot \vec v)}{(\vec u \cdot \vec v)^2 - (\vec u\cdot \vec u)(\vec v \cdot \vec v)} $$
$$ t = \frac{(\vec w \cdot \vec u)(\vec u \cdot \vec v) - (\vec w \cdot \vec v)(\vec u\cdot \vec u)}{(\vec u \cdot \vec v)^2 - (\vec u\cdot \vec u)(\vec v \cdot \vec v)} $$
이렇게 얻어진 무게중심좌표의 세 값 모두 [0, 1]안에 있다면, 점 P는 삼각형 안에 있다고 판단할 수 있다.
하지만 여기서 공통분모 $(\vec u \cdot \vec v)^2 - (\vec u\cdot \vec u)(\vec v \cdot \vec v)$의 값이 0이 나오면 무게중심 좌표를 구할 수 없다.
$$ (|\vec u||\vec v|)^2\cdot \cos^2\theta - (|\vec u||\vec v|)^2 $$
공통분모를 cos공식으로 바꾸면 위와 같이 되는데, 이 값이 0이 되기 위한 조건은 벡터u 또는 v의 크기가 0이거나, $\cos\theta$값이 0인 상태를 의미한다.
위 값이 0이 되기 위한 조건은 벡터u혹은 v의 크기가 0이거나, 두 벡터가 이루는 각 세타가 0도 혹은 180도 일 때다.
- 이는 두 벡터가 선형 종속 즉, 평행하다는 것을 의미한다.
- 이러한 삼각형을 퇴화삼각형이라 한다.
■ 텍스쳐 매핑
무게중심좌표는 메시에 이미지를 입히는 용도로 활용할 수 있는데, 메시에 이미지를 입히기 위해 변환된 데이터를 텍스쳐라고 하고, 메시에 이미지를 입히는 과정을 텍스쳐 매핑이라 한다.
텍스쳐를 매핑하기 위해 물체를 구성하는 메쉬의 각 정점에 UV좌표를 추가해야 한다. 이 UV좌표는 정점이 텍스처 이미지에서 어디에 대응되는지를 기록한 값이며, 보통 언래핑(Unwrapping) 과정에서 각 정점에 UV 좌표를 할당한다.
이런 물체를 렌더링하여 화면에 뿌릴 땐, 삼각형을 픽셀 단위로 잘게 쪼개서 그려야 한다. 이때, 정점 UV 좌표를 무게중심좌표로 보간하여 화면의 각 픽셀이 텍스쳐의 어디를 보여줄지 결정한다.
'게임수학' 카테고리의 다른 글
[게임수학] 8-1. 오일러 각(Euler's angle) (0) | 2025.10.14 |
---|---|
[게임수학] 7. 게임 엔진 (0) | 2025.09.24 |
[게임수학] 6-2. 투영 벡터 (0) | 2025.09.12 |
[게임수학] 6-1. 내적(Dot product) (0) | 2025.09.12 |
[게임수학] 5.아핀공간 (1) | 2025.09.08 |