728x90
반응형
- 게임과 같은 3차원 가상 공간은 많은 물체들로 구성되어 있는데, 각 물체의 위치는 이동(translation)에 의해, 방향은 회전(rotation)에 의해 결정된다. 또한 각 물체는 축소확대(scaling)될 수도 있다.
- 이러한 이동, 회전, 축소확대를 총칭하여 변환(transform)이라고 한다.
4.1 2차원 변환의 행렬 표현
4.1.1 축소 확대
4.1.2 회전
- 시계방향으로의 회전 행렬을 얻으려면 R(∂)에 ∂대신 -∂를 넣으면 된다.
- -∂만큼 회전은 2π-∂만큼 회전하는 것과 동일하다.
4.1.3 이동과 동차 좌표
- 축소확대와 회전은 이른바 선형 변환(linear transform)이라는 범주에 속한다.
- 축소확대와 회전 말고도 컴퓨터 그래픽스에서 자주 사용되는 또 다른 변환은 이동(translation)이다.
- (x, y)에 놓인 점을 (x+dx, y+dy)로 이동시키는데, (dx, dy)를 변위 벡터(displacement vector)라고 부른다.
- 이동은 선형 변환의 범주에 속하지 않으며, 벡터 덧셈으로 구현된다.
- 이는 행렬 곱셈으로 구현되는 축소확대 및 회전과 다르다. 하지만, 동차좌표(homogeneous coordinates)를 사용하면, 이동 역시 행렬 곱셈으로 구현될 수 있다.
- 한 점의 2차원 카테시안 좌표(x, y)가 주어질 때 이에 대한 동차 좌표는 간단히 (x, y, 1)로 표현할 수 있다.
- 3 X 3 단위 행렬의 마지막 열에 아래처럼 (dx, dy)를 삽입하면, 이것이 바로 이동 행렬이 된다.
- 하나의 동차 좌표를 카테시안 좌표로 바꾸려면 이 직선을 따라 w = 1 평면으로 투영(project)시키면 된다.
- 동차 좌표는 (x, y, 1)로 국한되지 않는다. 대신, (wx, wy, wz)로 표현된다. 단, w는 0이 아니어야 한다.
- 2차원을 구성하는 x축과 y축에 w축이 추가되어 3차원 공간을 만들었는데, 원점을 지나는 3차원 직선은 카테시안 좌표 (2,3)에 해당하는 무한히 많은 동차 좌표들이 모인것으로 보면 된다.
4.1.4 2차원 변환의 결합
- 행렬 곱셈에서는 교환 법칙이 성립하지 않는다.
- 앞의 회전은 원점을 중심으로 한 것이다. 임의의 점을 중심으로 하는 회전에 대해서는 먼저 원점으로 옮긴 후 회전을 시키고 다시 이동을 시켜주면 된다.
- (x, y)를 (-a, -b)만큼 이동
- 이동된 점(x-a, y-b)를 원점 중심으로 회전
- 회전 결과를 (a, b)만큼 이동
4.2 아핀 변환
- 축소확대, 회전, 이동의 세 변환 중, 축소확대와 회전은 선형 변환 범주에 속하지만, 이동은 그렇지 않다. 선형변환과 이동을 포함하는 범주를 아핀 변환(affine transform)이라 한다.
- 2차원 아핀 변환은 3x3 행렬로 표현되므로, 몇 개의 아핀 변환이 주어지건 이는 모두 하나의 행렬로 결합 가능하다.
- 행렬의 3번 행은 항상 (0 0 1)로 고정된다는 것
- 이렇게 고정불변인 3번 행을 무시하고 나머지 2x3 행렬을 [L | t]로 표기하자. L은 왼쪽의 2x2 행렬을, t는 3번열을 말한다.
- 여러 개의 아핀 변환이 결합된 [L | t]에서, L은 '누적된 선형 변환'을, t는 '누적된 이동'을 표현한다.
- [L | t]로 변환하는 것을 개념적으로 해석하면, 그 물체에 L을 먼저 적용하고 그렇게 선형 변환된 물체에 t를 적용하는 것과 같다. 즉, 폴리곤 메시로 표현된 물체의 각 정점을 p라 할 때, Lp + t 방식으로 변환이 이뤄지는 것이다.
- 축소확대 없이 회전과 이동이 결합된 변환을 생각해보자. 이 변환은 물체의 방향과 위치를 변경시킬 뿐 그 물체의 외양에는 영향을 미치지 못한다.
- 이런 점에서 이를 강체 변환(rigid motion)이라 부른다.
4.3. 3차원 변환의 행렬 표현
- 2차원 아핀 변환과 크게 다르지는 않은 3차원 행렬 표현이다.
4.3.1 축소확대
- 모든 축소확대 인자가 같으면 균등(uniform)하다고, 그렇지 않다면 비균등(non-uniform)하다고 부른다.
4.3.2 회전
- 회전 중심을 필요로 했던 2차원 회전과는 달리, 3차원 회전은 회전축(axis of rotation)을 필요로 한다.
- z축을 중심으로 ∂만큼 회전하는 Rz(∂)를 유도하면, 이 벡터의 z좌표는 Rz(∂)에 의해 바뀌지 않는다.
- 한 물체를 z축 중심으로 ∂만큼 회전시키려면, 그 물체의 폴리곤 메시를 구성하는 모든 정점에 Rz(∂)를 적용한다.
- Rx(∂)는 x좌표를 바꾸지 못한다.
- y축 중심 회전도 마찬가지다.
- 회전이 반시계 방향으로 이뤄지는 것으로 보이면 회전 각도 ∂는 양수가 되고, 반대로 회전이 시계방향으로 이뤄지면 ∂는 음수가 된다.
4.3.3 이동과 동차 좌표
- 동차 좌표를 이용한 3차원 이동은 4x4 단위 행렬의 마지막 열에 (dx, dy, dz)를 삽입한 것으로 정의된다.
4.4 월드 변환
- 하나의 물체를 모델링하는 데 사용된 좌표계를 오브젝트 공간(object space)이라 부른다.
- 각자의 오브젝트 공간에서 정의된 물체들로 3차원 가상 환경을 구성하려면 이들을 하나의 좌표계로 통합해야 하는데, 이 좌표계를 월드 공간(world space)이라 부른다.
- 그림과 같이 각각의 구와 주전자를 만들고 월드 변환(world transform)을 통해 월드 공간으로 옮겨진다.
- 이 과정에서 앞서 말한 아핀 변환의 모든 것이 적용된다.
- 2차원 아핀 변환의 특성은 3차원에서도 그대로 유지되며, 행렬 곱셈에서는 교환 법칙이 성립하지 않는다.
4.5 회전과 오브젝트 공간 기저
- 오브젝트 공간에서 한 물체의 모델링이 완료되면, 그 물체는 자신의 오브젝트 공간과 일체가 된다. 즉, 물체를 움직이게 되면 그 오브젝트 공간도 따라서 같이 움직인다.
- (e1, e2, e3)는 월드 공간의 기저를, (u, v, n)은 오브젝트 공간의 기저를 나타낸다.
- 초기에 그 둘은 일치하지만, 물체가 회전하며, 오브젝트 공간 기저 (u, v, n)은 (e1, e2, e3)와 다르게 된다. → 회전 후 물체의 방향은 (u, v, n)으로 표현할 수 있다.
- 예시에서 확인할 수 있듯, 회전된 물체의 오브젝트 공간 기저인 (u, v, n)이 주어졌다면, 그 회전 행렬을 즉각 정의할 수 있다. 즉, (u, v, n)으로 세 열을 채우면 된다.
4.6 역변환
- 컴퓨터 그래픽스에서 역변환(inverse transfrom)은 매우 자주 사용되는 개념이다.
- 변위 벡터가 (dx, dy, dz)인 이동 T의 역변환은 (-dx, -dy, -dz_)만큼 이동하는 것이다.
T와 T의 역변환, T의 역행렬
- 회전의 역변환을 정의해 보자. 우리는 항상 오브젝트 공간 기저 (u, v, n)이 직교 정규 성질을 가진다고 가정한다.
- 따라서, 하나의 기저 벡터가 자신과 내적되었을 때 그 결과는 1이다. 반면, 서로 다른 기저 벡터 간 내적은 0이 된다.
- 회전의 전치행렬을 취하면 바로 역변환을 얻게 된다.
출처
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.
728x90
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 6 - OpenGL ES와 쉐이더 (0) | 2022.02.14 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 5 - 정점 처리 (0) | 2022.02.13 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 3 - 모델링 (0) | 2022.02.11 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 2 - 수학 기초 (0) | 2022.02.11 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 1 - 서론 (0) | 2021.07.10 |