06장 아핀 공간: 움직이는 가상 세계의 구축
6.1 아핀 공간
- 벡터 공간에서 이동 변환을 행렬 곱으로 표현하기 위해서 마지막 차원 값을 1로 한정한 부분 공간을 아핀 공간(affine space)라고 한다.
- 원래 행렬 곱으로는 이동 변환을 표현할 수 없다. 하지만 차원 값이 항상 1인 새로운 차원을 도입하면 가능하다.
- 이동 변환 행렬(translate transformation matrix)
- 이동 변환 행렬은 선형 변환의 일종인 전단 변환을 응용한 것이다.
- 1차원에서 y = 1이라는 조건에서 a만큼 미는 전단 변환은 x + a로 나타난다.
- 2차원에서 z = 1이라는 조건에서 (a, b)만큼 미는 전단 변환은 (x + a, y + b)로 나타난다.
- n차원에서 n + 1차원으로 차원을 높여 설계한 선형 변환을 아핀 변환(affine transformation)이라고 한다.
- 크기 변환(scale), 회전 변환(rotation), 이동 변환(translate)
6.2 아핀 공간의 구성 요소
■ 6.2.1 점
- 아핀 공간의 원소는 점(point)으로 마지막 차원 값이 항상 1이다.
- 점은 물체를 표현하고 위치를 지정하는 데 사용한다.
- 2차원 공간에서 점은 항상 (x, y, 1)의 형태여야 한다.
- 3차원 공간에서 점은 항상 (x, y, z, 1)의 형태여야 한다.
■ 6.2.2 이동 벡터
- 아핀 공간의 벡터는 이동 벡터(변위 벡터, displacement vector)로 마지막 차원 값이 항상 0이다.
- 이동 벡터는 물체를 움직이는 데 사용한다.
- 아핀 공간 위의 점 P1의 좌표가 (x1, y1, 1)이고 점 P2의 좌표가 (x2, y2, 1) 일 때, 두 점을 빼서 만든 이동 벡터의 마지막 차원 값은 x, y 값과 무관하게 항상 0이 되기 때문이다.
■ 6.2.3 아핀 공간의 성질
- 점과 벡터 사이에는 다음과 같은 연산 규칙이 성립한다.
- 점 - 점 = 벡터
- 점 + 벡터 = 점
- 벡터 + 벡터 = 벡터
- 점 + 점은 성립하지 않는다.
6.3 아핀 결합
- 여러 개의 점을 결합해 새로운 점을 생성하는 수식을 아핀 결합(affine combination)이라고 한다.
- 2차원 평면 위의 임의의 두 점 P1(x1, y1, 1)과 P2(x2, y2, 1)에 각각 스칼라 a, b를 곱한 선형 결합이 되려면 a + b가 1이 되어야 한다.
■ 6.3.1 두 점의 결합
- 두 점을 P1, P2로 지정하고 아핀 결합으로 생성된 점을 P'으로 지정하면 다음 수식이 성립한다.
- a · P1 + (1 - a) · P2 = P'
- 위의 식에 모든 실수 a를 대입하면 직선의 방정식을 얻을 수 있다.
- L(a) = a · P1 + (1 - a) · P2
- -∞ < a < ∞일 때, 두 점의 양쪽 방향으로 무한히 뻗어나가는 직선(line)이 된다.
- 0 ≤ a < ∞일 때, 지정한 위치에서 한쪽 방향으로만 뻗어나가는 반직선(ray)이 된다.
- 0 ≤ a ≤ 1일 때, 시작점과 끝점의 위치가 정해진 선분(line segment)이 된다.
6.4 선 그리기 알고리즘
■ 6.4.1 벡터를 모니터의 점으로 표현
- 스크린 좌표계(screen coordinate system)
- 이산적인(discrete) 정수로 평면을 채운다.
- 스크린 좌표와 색상에 대응하는 화면의 구성 요소를 픽셀(pixel)이라고 한다.
- 실수로 표현된 벡터 좌표를 정수로 변환한 후 색상을 부여하는 과정을 픽셀화(rasterization)라고 한다.
데카르트 좌표계 | 스크린 좌표계 | |
수 집합 | 실수 | 정수 |
수의 성질 | 연속적 | 이산적 |
단위 원소 | 벡터 | 픽셀 |
수의 범위 | 실수 범위 | 0부터 해상도 크기까지 |
■ 6.4.2 선 그리기 알고리즘
- 브레젠험 알고리즘(bresenham's algorithm)은 화면을 8등분으로 구분한 후 각 영역별로 그려내는 중점 알고리즘(midpoint algorithm)이다.
■ 6.4.3 라인 클리핑 알고리즘
- 선분이 가진 성질은 유지하면서 지정된 영역에 맞는 데이터로 잘라주는 작업을 클리핑(clipping)이라고 한다.
- 라인 클리핑 알고리즘(line clipping algorithm)
- 두 점이 모두 0이면 두 점이 보라색(화면) 안에 위치해서 자를 필요가 없으므로 그대로 그린다.
- 두 점을 &연산한 결과가 0보다 크면 두 점이 화면 밖에 위치해 있으므로 그릴 필요가 없다.
- 두 점을 &연산한 결과가 0이면 두 점이 화면을 가로지르므로 유효한 영역만 남도록 클리핑한다.
'Computer Science > 게임 수학' 카테고리의 다른 글
게임 수학 | 3부 3차원 콘텐츠 제작 | 11장 외적 (0) | 2023.03.08 |
---|---|
게임 수학 | 3부 3차원 콘텐츠 제작 | 10장 3차원 공간 (0) | 2023.02.27 |
게임 수학 | 2부 콘텐츠 제작 기초 | 09장 게임 엔진 (0) | 2023.02.20 |
게임 수학 | 2부 콘텐츠 제작 기초 | 08장 삼각형 (0) | 2023.02.18 |
게임 수학 | 2부 콘텐츠 제작 기초 | 07장 내적 (0) | 2023.02.17 |
댓글