개발하는 리프터 꽃게맨입니다.

[DX11 물방울책 요약 정리] 챕터3: Transformations 본문

컴퓨터 그래픽스/DirectX 11

[DX11 물방울책 요약 정리] 챕터3: Transformations

파워꽃게맨 2024. 9. 7. 20:36

변환 Transformation

우리는 3D 세계에서 객체를 기하학적으로 표현한다. (객체의 표면을 삼각형들의 집합으로 근사하는 방법을 사용) 객체가 움직이지 않는다면 세계는 흥미롭지 않을 것이다. 따라서 우리는 기하학을 변환하는 방법에 관심을 갖는다. 기하학적 변환의 예로는 이동, 회전, 크기변환이 있다. 이 장에서는 3D 공간에서 점과 벡터를 변환하는 데 사용할 수 있는 행렬 방정식을 개발한다.

 

학습 목표

1. 선형 변환과 아핀 변환이 행렬로 어떻게 표현될 수 있는지 이해한다.

2. 기하학적으로 객체의 크기, 회전, 이동을 위한 좌표 변환을 배운다.

3. 여러 변환 행렬이 행렬 곱셈을 통해 하나의 최종 변환 행렬로 결합될 수 있음을 알아본다.

4. 한 좌표계에서 다른 좌표계로 좌표를 변환하는 방법과 이 변환이 어떻게 행렬로 표현될 수 있는지 알아본다.

5. 변환 행렬을 구성하는데 사용되는 Math 라이브러리 집합에 익숙해진다.

 

선형 변환

(이 부분의 설명은 책과 조금 다름)

함수가 선형성을 가지려면 다음 두 가지 조건을 만족시켜야 한다.

어떤 수학적 함수 f(v) 가 있을 때 이 함수가 3차원 벡터를 받고, 3차원 벡터를 출력함과 동시에 선형성을 만족할 경우. 이를 선형 변환이라고 한다.

 

선형 변환은 3D 벡터 이외의 입력과 출력 값으로 구성될 수 있다. 하지만 해당 책은 컴퓨터 그래픽스에 대해서 다루고 있기에 이러한 일반성을 고려하지 않는다.

 

예를들어 위와 같은 변환 타우는 선형 변환이 아니라고 볼 수 있다.

 

행렬 표현

3차원 벡터 u는 다음과 같이 표현될 수 있다.

 

여기서 i, j, k는 각각 공간의 좌표축을 따라가는 단위 벡터이며

를 의미한다.

 

이러한 벡터들을 R³ 의 표준 기저 벡터라고 부른다.

R³는 모든 3차원 좌표 벡터 (x, y, z)의 집합을 나타낸다.

타우가 선형 함수라고 하자.

그렇다면 선형성의 특성으로 위와같이 나타낼 수 있다.

 

이를 벡터와 행렬의 곱으로 표현해보자.

 

 

그러면 위와같이 나타낼 수 있다.

여기서 t(x)는 3차원 행렬이므로

최종적으로 선형 변환은 위와같이 벡터와 행렬 곱 형태로 표현할 수 있다.

우리는 이것을 행렬 A를 선형 변환 t의 행렬 표현이라고 부른다.

 

여기서 핵심은 어떤 변환이 선형 변환이라면, 벡터와 행렬 곱 형태로 바꿀 수 있다는 의미이다.

 

(개인적으로 좋은 설명인지는 모르겠다. 직관적으로 다가오지 않는 느낌)

 

크기 변환

크기 변환은 위와같은 정의된다.

이 변환은 x축에서는 sx, y축에서는 sy, z축에서는 sz 단위로 스케일링한다.

 

이제 S가 선형 변환임을 확인해보자.

 

가산성과 동차성을 만족하므로, S는 선형 변환이며, 행렬 표현이 존재한다.

행렬 표현을 찾기 위해 우리는 S를 표준 기저 벡터 각각에 적용하고, 그 결과 벡터를 행렬의 행에 배치한다.

우리는 이러한 행렬을 스케일링 행렬이라고 부른다.

 

스케일링 행렬의 역행렬은 다음과 같다.

 

스케일링 행렬의 예시

 

 

회전 변환

이 절에서는 벡터 v를 축 n을 기준으로 각도 세타만큼 회전시키는 방법을 설명한다.

각도는 축 n를 따라 내려보았을 때 시계방향으로 측정된다.

또한 축 n은 정규화 벡터라고 가정한다.

 

먼저 벡터 v를 회전축에 수직인 성분과 수평인 성분으로 분해한다.

회전축에 수직인 성분만 세타만큼 회전시킨다음, 수평 성분과 더하면 회전시킨 벡터를 구할 수 있을 것이다.

 

이제 사실상 2차원 평면에서의 회전과 같게 된다.

그러므로 회전 궤도 평면만 분해해서 살펴보도록 하자.

 

이제 이 회전 변환의 행렬 표현을 찾아보자.

표준 기저 벡터 각각에 회전 변환을 적용하고, 그 결과를 행렬의 행에 배치한다.

 

 

구한 R에 n을 (x, y, z) 라 하고 (1, 0, 0) (0, 1, 0) (0, 0, 1) 를 각각 곱해서 행렬을 만들어보자.

참고로 c, s는 cos, sin을 나타내는 약어이다.

 

회전 행렬에는 흥미로운 성질이 있다. 각 행 벡터는 단위 벡터이고, 행벡터들은 서로 직교한다.

따라서 행 벡터들은 직교 정규이다. (어떻게 보면 당연한..)

(첨언 하자면 위와같은 선형 변환을 강제 변환이라고 한다.)

 

일반적으로 직교 행렬은 역행렬 쉽고 효율적으로 계산할 수 있다.

직교 행렬의 역행렬은 전치 행렬과 같다.

 

만약, 회전축을 x축 y축 z축 중 하나로 설정할 경우 식은 다음과 같이 간단해진다.

 

아핀 변환 Affine Transformation

(조금 더 이해하기 쉽게 내용을 수정)

 

아핀 변환은 이동을 선형 변환으로 수행하기 위한 시도이다.

벡터의 경우 위치와 무관하게 방향과 크기만을 설명하기 때문에, 이동을 벡터로 정의하기에는 무리가 있다.

 

동차 좌표계는 점과 벡터를 균일하게 처리할 수 있는 편리한 표기법을 제공한다. 동차 좌표계에서는 4차원소 확장하며, 네 번째 w좌표에 무엇을 넣는지는 우리가 점을 설명하는지 벡터에 설명하는지에 따라 다르다.

 

(수정! 설명이 너무 부족하다!)

 

기본적으로 이동 변환은 선형성을 가지지 않는다.

어떤 점을 이동시키기 위한 공식은 다음과 같다.

 

 

이것이 선형성을 가지는지 알아보자.

 

얼추봐도 위 두 식은 다르다... 가산성부터 만족하지 않는다.

 

동차성은 두말하면 잔소리다. 만족하지 못한다.

 

왜, 이동 변환은 선형성을 가지지 못할까?

벡터의 경우 위치를 이동시켜서 변화를 가져다주지 못한다.

 

벡터라 함은 방향과 크기만 가지고 있는 양으로, 위치에 대한 정보를 가지지 않는다.

만약, 시작점은 원점으로 고정시킨 상태에서 끝점만 바꾸는 형태라면, 이는 선형성을 가진다.

그러나 벡터 자체를 평행이동 시키는 것은 그 어떤 의미도 가지지 않는다.

 

그래서 그런지 책에서는 이를 위치 벡터를 변환해야한다! 라고 말한다.

 

조금 더 엄밀하게 말해보겠다.

 

우리가 이때까지 사용한 공간

즉, 벡터와 점을 혼용한 좌표계는 데카르트 좌표계라고 하는 것이다.

해당 좌표게는 초중고 교육과정에서 흔히 사용하는 좌표계이고 가장 친숙하고 직관적인 좌표계이다.

 

데카르트 좌표계에서는 원점을 기준으로 벡터와 점이 동시에 정의된다.

그러나 앞서 보았듯 데카르트 좌표계에서는 이동 변환이 선형성을 가지지 않기 때문에

우리는 동차 좌표계라는 특수한 좌표계를 사용해야 한다.

 

N차원 동차 좌표계는 N+1개의 차원을 사용하는 좌표계이다.

 

즉 2차원 동차 좌표계는 3개의 기저를 가진다.

 

2차원 동차좌표계를 시각적으로 나타내보았다.

 

기저가 3개라고 해서 모든 공간을 다 사용하는 것은 아니고..

z = 1, z = 0 평면 2개만 사용한다.

 

z = 0 인 평면은 벡터들의 집합인 벡터 공간

z = 1 인 평면은 점들의 집합인 아핀 공간

으로 나뉜다.

 

벡터 공간은 원점을 기준으로한 위치벡터들의 집합이다.

이는 앞서 많이 설명했기에 넘어간다.

 

이젠 아핀 공간이라는 요상한 공간에 집중해보자.

벡터는 위치정보를 가지고 있지 않기 때문에 점을 정의하지 못한다.

 

그렇기 때문에 아핀 공간을 이용하여 점을 정의한다.

아핀 공간에선 점이 정의되며, 점과 점사이의 상대적인 차이를 벡터로 표현할 수 있는 공간이다.

 

P1, P2, P3 가 있다면..

P2 = P1 + v

P3 = P1 + u

 

와같은 형식으로 점P2는 점P1으로부터 벡터 v만큼 떨어져있다.

점P3는 점P1으로부터 벡터 u만큼 떨어져있다.

라고 표현한다.

 

데카르트 좌표계처럼 절대적인 기준이 존재하는 것은 아니고, 점들 사이의 상대적인 위치에 의해서 점을 정의하는 공간이다.

 

만약, (0, 0) 이라는 원점을 기준으로 잡고, 다른 점들을 원점에서의 상대적인 위치로 정의한다면?

이와같은 특수한 형태의 아핀 공간은 데카르트 좌표계와 동일한 성질을 가진다.

 

자, 그럼 아핀 공간에 대해서 알아보았고, 이제 동차 좌표계에 대해서 알아보자.

2차원 동차좌표계에서 4번째 원소는 0 또는 1의 값을 가지는데

 

(x, y, 0)은 벡터를

(x, y, 1)은 점을 나타낸다.

 

시각적인 자료를 한 번 더 보자.

 

 

 

앞서 데카르트 좌표계가 이동을 선형 변환으로 설명할 수 없듯..

동차좌표계도 마찬가지이기에 아핀 변환이라는 더 큰 범주의 함수로 확장해야한다.

 

아핀 변환은

선형 변환 + 평행이동(벡터)

을 의미한다.

 

이를 행렬곱 형태로 나타내면 다음과 같다.

위와 같은 표현 방식을 아핀 변환의 행렬 표현이라고 부른다.

여기서 b는 본직적으로 평행 이동을 의미한다.

 

(본인은 이런 방식보다는 전단 변환으로 설명하는 것이 이해가 더 쉽다고 생각한다.)

 

평행 이동

항등 변환이란 주어진 입력을 그대로 반환하는 선형 변환이다.

즉, I(u) = u이다.

 

이제 우리는 평행 이동 변환을 정의해보겠다.

아핀 변환에서 선형 변환이 항등 변환이라면, 평행 이동만 수행한다.

그러므로 해당 변환을 평행 이동 변환이라고 할 수 있을 것이다.

 

 

해당 아핀 변환은 물체의 모든 점을 동일한 벡터 b로 평행 이동시킨다.

 

 

시각적으로 확인하면 위와 같다.

 

기본적으로는 평행이동이기 때문에 덧셈으로 정의하고, 비선형적이어야 하나.

동차좌표계의 특성에 기인하여 행렬곱으로 바꿀 수 있다.

 

즉, 마치 선형 변환인양 평행이동을 정의할 수 있게 되었다.

 

해당 행렬의 역행렬은 다음과 같다.

아핀 변환은 선형적인가?

X, 선형적이지 않다.

 

그러나, 동차좌표계라는 특수한 좌표계를 사용하기 때문에 선형 변환처럼 처리되며, 하나의 행렬로 연산이 가능해진다.

그러므로 아핀 변환 행렬은 선형성을 띄고, 역행렬을 구할 수 있다.

 

T를 변환 행렬이라 하고, 점/벡터를 변환하는 방식은 vT = v' 을 계산하는 것이다.

만약 T의 역행렬을 구할 수 있다면, 역으로 v를 구할 수 있다.

 

변환 행렬의 역행렬은 기하학적으로 반대 변환을 수행한다고 말할 수 있다.

 

크기 변환과 회전을 아핀 행렬로 나타내기

 

평행 이동이 없을 경우, 아핀 변환은 선형 변환으로 축소된다.

모든 선형 변환은 b = 0 인 아핀 변환으로 표현할 수 있다.

 

이는 곧 모든 선형 변환을 4x4 아핀 행렬로 나타낼 수 있다는 것을 의미한다.

이 방법으로 우리는 모든 변환을 일관되게 4x4 행렬로 표현하고, 점과 벡터를 1 x 4 동차 행 벡터로 나타낼 수 있다.

 

아핀 변환 행렬의 기하학적 해석

이 절에서는 아핀 변환 행렬 내부의 숫자가 기하학적으로 무엇을 의미하는지 직관적으로 설명한다.

 

먼저, 모양을 보존하는 변환인 강체 변환을 고려해본다.

강체변환은 회전과 이동 두가지 요소만 사용하는 변환을 의미한다.

행렬 표기법에서 동차좌표계를 사용하면 위와같이 나타낸다.

 

이제 이 식이 기하학적으로 무엇을 의미하는지 살펴보자.

벡터 b는 원점에서의 변위를 나타내는 위치 벡터이다.

타우는 표준 기저 벡터 i, j, k를 새로운 방향으로 회전시키는 일을 수행한다.

 

변환점 점들은 변환된 기저 벡터와 오브셋 b의 선형 결합으로 정듸된다.

 

같은 개념이 스케일링 혹은 전단 변환에도 적용된다.

사각형을 평행사변경으로 변경시키는 선형 변환의 경우에도 변형된 점은 단순히 변형된 기저 벡터들의 선형 결합이다.

 

핵심, 변형된 점은 아핀 변환에 의해 변환된 기저 벡터들의 선형 결합이다.

 

 

변환 합성

S가 크기 변환 행렬

R이 회전 변환 행렬

T가 이동 변환 행렬

 

이라고 해봅시다. 

 

어떤 벡터를 변환한 다 했을 때, 행렬들 끼리는 교환법칙이 적용되지 않으므로 벡터에 어떤 행렬을 먼저 곱하느냐에 따라서 그 결과가 달라질 수 있다.

 

SRT 행렬이어야 하는 이유..

 

기존 형태를 지키기 위해서는 S -> R -> T 순서로 곱해야하며 

v' = vSRT

와 같은 식을 통해서 변환된 v'를 얻을 수 있다.

 

행렬 곱은 결합법칙은 성립하기에

SRT 행렬을 미리 곱하면 행렬 곱의 계산량이 없어진다.

 

만약 20000개의 정점이 존재한다면

미리 곱하지 않았을 경우 (1번의 행렬 벡터 곱 + 2번의 행렬곱) * 20000 

대락 60000번의 곱셈이 발생하는데,

 

미리 곱할 경우 1 * 20000 + 2 

대략 20002번의 곱셈이 발생한다.

 

이는 계산의 복잡도를 매우 줄여준다.

 

좌표계 변환 Change Of Coordinate Transformations

우리는 어떤 좌표계의 좌표를 다른 좌표계로 변환하는 것을 좌표계 변환이라고 부른다.

좌표계 변환에서는 기하학적 형태가 변한다고 생각하는 것이 아니라, 참조 좌표계를 변경하여 기하학의 좌표 표현만 바꾸는 거싱다.

 

이것은 회전, 평행 이동, 스케일링처럼 실제로 기하학적 형태를 물리적으로 이동하거나 변형한다고 생각하는 것과 대조적이다.

 

3D 컴퓨터 그래픽스에서는 여러 좌표계를 사용하므로, 한 좌표계에서 다른 좌표계로 변환하는 방법을 알야야 한다.

 

1. 벡터

두 개의 좌표계 A와 B 및 벡터 p가 주어졌다고 가정해보자.

벡터 p는 어떤 좌표계를 사용하냐에 따라서 다른 점을 정의한다.

그러면 해당 벡터가 나타내는 점은 어떻게 찾을 수 있을까?

 

각각 좌표계의 x축과 y축을 담당하는 단위 벡터들과 벡터의 곱으로 정의하면 된다.

3D로 일반화 하면 위와같이 점을 정의할 수 있다.

 

점 

점에 대한 좌표 변환은 벡터와는 약간 다르다.

이는 점의 위치가 중요하기 때문에, 벡터를 변환한 것처럼 점을 변환할 수 없기 때문이다.

점은 위와같이 표현될 수  있다.

여기서 Q는 좌표계의 원점이다.

 

따라서 p = (x, y) 가 주어지고, 기저 벡터 + 원점을 알고있다고 우리는 항상 점을 식별할 수 있다.

3D로 일반화하면 위 식과 같다.

 

행렬 표현

지금까지의 내용을 요약하자면, 벡터와 점에 대한 좌표 변환은 위와 같다.

 

동차좌표계를 사용하면, 벡터와 점을 하나의 식으로 처리할 수 있다.

w = 0 일 때, 이 식은 벡터에 대한 좌표 변환으로 축소되고

w = 1 일 때, 점에 대한 좌표 변환으로 축소된다.

 

이제 w 좌표를 적절히 설정하면, 벡터와 점 모두에 적용할 수 있는 좌표 변환 식이 완성되게 된다.

우리는 이를 좌표 변환 행렬, 좌표계 변환 행렬 등으로 부르며, 이는 A 좌표계를 B 좌표계로 변환하는 역할을 한다.

 

(추가적인 설명입니다.)

이는 모델링 행렬을 설명하기 위한 장치로 보인다.

 

정점들이 원점을 기준으로 설정되어 있고

게임 오브젝트가 이동, 스케일링, 회전을 하면서 자신의 좌표축을 마음껏 변환한다.

게임 오브젝트가 가지는 로컬 좌표계를 나타내는 행렬을 모델링 행렬이라고 한다.

 

모델링 행렬을 이용하면, 월드에 정의된 정점을 원하는 만큼 변환할 수 있다.

앞선장과 지금 장에서 말하는 좌표 변환 행렬이란..

 

월드에 정의된 정점을 로컬로 사상시키는 행렬이라고 볼 수 있다.

 

설명이 쉽게 되어있지는 않은듯..

 

어쨌든 .. 좌표 변환이란

한 좌표계에서 정의된 점과 벡터는 다른 좌표계에서 어떻게 표현되는가? 를 설명하는 도구이다.

벡터의 경우 위치가 딱히 중요하지는 않기에, 기저 벡터와 기존 벡터의 연산으로 정의할 수 있다.

그러나 점의 경우 위치가 중요하기 때문에, 다른 좌표계로 변환하기 위해서는

점의 위치벡터를 좌표 변환한 다음, 기존 좌표계의 원점 위치벡터를 더해줌으로써 좌표 변환을 수행할 수 있다.

 

쉽게 다가오는 개념은 아니다.

 

가장 중요한건 이 대목이다.

좌표 변환은 행렬곱으로 나타낼 수 있고,

동차 좌표계를 이용하면 굳이 점과 벡터의 공식을 나눠서 사용하지 않아도 된다는 것

 

결합법칙과 좌표 변환 행렬

세 개의 좌표계 F, G, H가 있다고 가정해보자.

A를 F에서 G로의 좌표 변환 행렬, B를 G에서 H로의 좌표 변환 행렬이라고 하자.

 

F 좌표계의 벡터 pF 가 주어졌을 때, H 좌표계의 좌표 pH를 구한다고 가정해보자.

 

이 작업은 위 그림처럼 단계별로 수행할 수 있지만,

행렬 곱셈은 결합법칙을 만족하기 때문에, 위와 같이 쓸 수 있다.

 

이러한 의미에서 F에서 H로 직접 변환하는 좌표 변환 행렬을 미리 계산할 수 있다.

 

이 개념을 통해서..

나중에 모델링 행렬, 뷰 행렬, 원근 행렬 등.. 수많은 좌표계로 변환을 수행할 것인데,

행렬 곱을 수시로하는 것이 아니라, 미리 행렬들을 모두 곱해서 계산을 간략화할 수 있다.

 

이는 마치 미리 SRT 행렬을 곱해서 계산량을 줄인 것과 동일한 원리다.

 

다시 말하지만, 행렬 곱은 교환법칙을 만족하지 않기 때문에 AB와 BA가 다르다는 것에 주의하자.

 

역행렬과 좌표 변환 행렬

만약, 좌표 변환 행렬 M이 가역적이라면, A좌표계에서 B좌표계로의 변환이 아닌

B 좌표계에서 A 좌표계의 좌표 변환 행렬 역시 구할 수 있다.

 

역행렬의 성질을 이용하면 역변환 행렬을 간단히 구할 수 있다.

 

 

변환 행렬과 좌표 변환 행렬

지금까지 우리는 스케일링, 회전, 평행 이동과 같은 변환과 좌표 변환을 구분했지만,

이 둘은 동등하며, 아핀 변환은 좌표 변환으로 해석될 수 있고, 그 반대도 가능하다.

 

그림 (a)는 아핀 변환의 예시를 보여준다.

B좌표계에서 작업하고, 큐브의 위치와 방향을 변경하기 위해 아핀 변환을 적용한다.

그림 (b)는 좌표 변환의 예시를 보여준다.

A 좌표계 큐브의 점들을 B 좌표계로 변환하는 모습을 보여준다.

이 그림을 보면, 아핀 변환 행려과 좌표 변환 행렬은 기하학적으로 유사하다는 것을 보여준다.

그 이유는 간단하다. 한 좌표계에서 다른 좌표계로 변환하는 과정에서 회전과 평행 이동이 필요하며, 그 결과 동일한 수학식이 나오게 되는 것이다.

 

즉, 두 경우 동일한 수학식이 나오지만, 변환을 해석하는 방식에 있어서 차이가 있다.

아핀 변환은 프레임 B에서 작업한 기하학 도형을 변환하는..

좌표 변환은 프레임 A에 존재하는 기하학 도형을 프레임 B 입장에서 재정의하는..

 

어떤 상황에서는 아핀 결합의 관점으로 해석할 필요가 있고 어떤 상황에서는 좌표 변환의 관점으로 해석할 필요가 있다.

 

이것은 중요한데, 왜냐면 우리는 종종 월드 공간에서의 좌표 변환 행렬을 스케일링, 회전, 평행 이동 변환의 합성으로 정의할 것이기 때문이다.

 

(덧붙임말..)

경험상 모델링 행렬의 경우, 아핀 결합적 해석을

월드 행렬의 경우, 좌표 변환적 해석을 적용하는 것이 이해하는데 도움이 된다.

 

좌표 변환과 아핀 결합의 식은 서로 상호적이기 때문에 아핀 결합을 구하는 과정을 통해서 좌표 변환식을 유도할 수 있다.

 

DirectXMath 변환 행렬 사용

 

크기변환 행렬

 

 

각도 관련 함수들은 매개변수를 라디안으로 받는 것에 유의

 

그리고 DirectX에서는 기본적으로 시계방향으로 회전한다!

XMMatrixRotationAxis 라는 축-각 회전방식도 제공함

 

 

참고로 FromVector의 앞의 값 3개만 읽기 때문에 W 축의 값은 무시된다.

 

 

아핀 변환

 

 

XMVector3Transform 는 나이브하게 벡터와 행렬을 곱하는 아핀 변환이다.

XMVector3TransformCoord 는 개념적으로는 점을 좌표 변환하는 함수이다.

 

앞서, 아핀 변환과 좌표 변환의 식은 동일하다고 말했는데

두 함수의 차이는 뭘까?

 

XMVector3Transform 얘는 진짜 벡터와 행렬을 곱하기만 한다.

XMVector3TransformCoord 얘는 벡터와 행렬을 곱한 후, 모든 요소를 W로 나눠준다.

이것이 가지는 의미는.. 행렬 곱 후 동차좌표계로 다시 맞춰준다.. 라고 보면 된다.

즉. XMVector3TransformCoord 해당 함수는 동차좌표계에 닫혀있고,

XMVector3Transform 얘는 동차좌표계에서 닫혀있지 않다. 

W값이 의미있는 값을 가지려면.. 원근 투영을 해야하므로 지금은 딱히 큰 의미를 가지진 않는다. 

 

XMVector3TransformNormal 얘는 개념적으로는 벡터를 좌표 변환하는 함수이다.

 

XMVector3Transform, XMVector3TransformCoord  이 친구들은 점을 연산하기에.. w 값이 뭐든 상관없이 1로 고정한다.

XMVector3TransformNormal 얘는 벡터를 연산하기에.. w 값을 0으로 고정한다.

 

XMVector3TransformCoord  는 평행 이동, 크기 변환, 회전 변환 모두 수행하고

XMVector3TransformNormal 는 크기 변환, 회전 변환을 수행한다. 내부적으로 행렬의 4행을 아예 무시하도록 설계되어있다.

 

요약

1)

\\

아핀 변환 행렬은 위와 같다.

회전 변환 행렬의 베이스는 로드리게스 축-각 회전공식이다.

3D 차원에서 선형 변환을 위해서 4x4 행렬을 사용하기 위해서는 평행 이동 때문이다.

이동 연산은 비선형 변환이기 때문에 동차좌표계를 사용하기위해서 4x4 행렬을 사용한다. 

 

동차 좌표계에서는 점의 평행 이동을 정의하기 위해서 아핀 변환을 수행한다.

아핀 변환 역시 본질적으로는 비선형 변환이나.. 동차 좌표계의 특성에 의해 선형 변환으로 바꿀 수 있다.

 

이것이 컴퓨터 그래픽스에 3D 표현에서 동차좌표계를 사용하는 이유

더하여 후에 원근 투영을 표현하기에도 3x3 행렬을 쓰는 것 보다 4x4 행렬을 사용하는 것이 유리하다.

 

2)

우리는 4x4행렬을 사용하여 변환을 표현하고, 1 x 4 동차 좌표계를 사용하여 점과 벡터를 설명한다.

벡터의 경우 w = 0, 점의 경우 w = 1 으로 설정한다.

 

이렇게 하면 평행 이동은 점에만 적용되고, 벡터에는 적용되지 않는다.

 

이 문장을 이해하려면 아핀 변환식을 보면 된다.

w = 0일 때는 평행이동을 담당하는 QB가 없어지기에

w = 0인 아핀 변환은 벡터 변환이라고 볼 수 있고

w = 1인 아핀 변환은 점 변환이라고 볼 수 있다.

 

3)

행렬의 모든 행 벡터가 단위 기링를 가지고 상호 직교하면, 그 행렬은 직교 행렬이다. (강체 변환이라고도 한다.)

직교 행렬의 경우 그 역행렬이 전치 행렬과 같다.

모든 회전 행렬은 직교 행렬이다.

 

4)

행렬 곱셈의 결합 법칙에 따라, 여러 변환 행렬을 하나의 변환 행렬로 결합할 수 있으며, 이는 개별 행렬을 순차적으로 적용한 최종 효과를 나타낸다.

 

5)

 

QB, uB, vB, wB 가 각각 B 좌표계에 대한 A 좌표계의 원점, x축 기저, y축 기저, z축 기저를 나타낸다고 할 떄

A 좌표계에서 정의도딘 좌표 p는 B 좌표계에서 다음과 같은 좌표를 가진다.

이러한 좌표 변환은 동차 좌표계를 사용하여 행렬로 나타낼 수 있다.

 

6)

세 개의 좌표계 F, G, H가 있고, A가 F에서 G로의 좌표 변환 행렬이며, B가 G에서 H로의 좌표 변환 행렬이라면

AB를 합성한 C는 F에서 H로의 좌표 변환 행렬이다.

 

7)

아핀 변환은 좌표 변환으로 해석될 수 있으며, 그 반대도 가능하다.

어떤 상황에서는 한 좌표계에서 객체를 변환한다고 생각할 수 있고

어떤 상황에서는 한 좌표계에서 다른 좌표계로 좌표 표현을 변경한다고 생각할 수 있다.