※ 아래의 내용들은 DirectX 11을 이용한 3D 게임 프로그래밍 입문 책의 내용을 바탕으로 작성된 것입니다.
행렬과 벡터
- 3차원 그래픽에서 점과 벡터를 변환할 때 1x4 행벡터, 4x4 행렬을 사용한다
- 동차좌표를 사용하기 때문
- 동차좌표를 사용할 경우 벡터와 점의 구분은 마지막 원소 w가 0이냐 1이냐로 구분하게 되고, 벡터는 w = 0, 점은 w = 1 이다
- 벡터는 이동에 대해서 변화가 없어야 하므로 동차좌표로 변환한 후 w를 0으로 설정해주면 이동에 아무런 영향을 받지 않을 수 있다.
동차좌표
- 벡터는 위치와 무관하게 방향과 크기만 서술하는 것이므로 벡터에 대해서는 이동 변환이 의미가 없다.
- 이동 변환은 오직 점에만 적용이 되어야 한다.
- 여기서 동차좌표를 이용하면 점과 벡터를 동일한 방식으로 다룰 수 있다.
ex)
점 : (a, b, c, w = 1)
벡터 : (x, y, z, w = 0)
- 동차좌표를 이용하면 여러 변환 식에서 위치 변환에 영향을 받지 않는 벡터, 영향을 받는 점의 연산을 하나의 식으로 표현할 수 있다.
아핀 변환
- 아핀변환은 선형변환에 이동 벡터 b를 더한 것이다.
- 3차원 그래픽에 필요한 변환들 중에는 선형변환으로는 서술하지 못하는 것도 있다.
- 그래서 아핀변환이라고 부르는 좀 더 넓은 부류의 함수들을 도입할 필요가 있다.
- 아핀변환 공식 : a(u) = t(u) + b
-- 만일 b = 0 이면 아핀변환은 그냥 보통의 선형변환과 같다.
-- 반대로 b = 0 으로 가정함으로써 임의의 선형변환을 아핀변환으로 표현할 수 있다.
- 임의의 선형변환을 4x4 아핀변환 행렬(이하, 아핀행렬)로 표기할 수 있다
- 모든 종류의 변환을 일관되게 4x4 행렬로 나타낼 수 있으며, 점과 벡터를 1x4 동차 행벡터로 나타낼 수 있다.
강체 변환
- 변환 시 물체의 형태가 그대로 유지되는 변환
- 즉, 물체의 이동이나 회전은 발생하지만 물체 형태는 그대로 유지되어야 한다.
좌표 변경 변환(= 좌표계 변환)
- 물체가 움직이는게 아니라 기준이 되는 좌표계만 변경되는 것
- 3차원 컴퓨터 그래픽스에서는 여러 개의 좌표계를 사용하는 경우가 많으므로 한 좌표계에서 다른 좌표계로의 변환 방법에 익숙해지는 게 좋다.
- 위치는 벡터가 아니라 점의 속성이므로, 점에 대한 좌표계 변환과 벡터에 대한 좌표계 변환은 다르다.
- 좌표계 변환 행렬의 역행렬이 존재할 경우 역행렬은 반대 좌표에서 해당 좌표로의 변환이다
ex) 두 개의 좌표계 F, G 에 대해서 F->G 변환 행렬을 A라고 할 때, A의 역행렬은 G->F로의 변환을 이끌어낸다.
- 현재 학습중인 교재에서 다루는 모든 좌표계 사상은 가역적이다.(항상 역행렬이 존재한다.)
변환들의 합성
- 물체에 변환을 적용하기 전에 변환들을 먼저 합성하고 그 결과물을 물체에 적용하여 주어야 한다.
- S가 비례행렬, R이 회전행렬, T가 이동행렬이라고 가정할 때, 하나의 물체 v에 세 변환을 적용하는 방법
1. (((vS)R)T) 와 같이 하나씩 차례대로 하는 방법
2. (v(SRT)) 결합법칙을 이용해 변환들을 합성한 후 물체에 적용하는 방법
=> 변환 행렬들 또한 행렬이기 때문에 결합법칙이 적용이 가능하다.
실제 변환을 적용할 땐 2번의 방법으로 해야한다.
=> 20,000개의 점들로 이루어진 하나의 3차원 물체에 대해 위의 1번 변환을 적용한다면 매우 많은 비용 소모가 생길 것이다.
- 좌표 변경 변환 또한 마찬가지로 적용할 수 있다.
변환 행렬과 좌표 변경 행렬
- 변환 행렬과 좌표 변경 행렬, 두 종류의 변환은 수학적으로 동등하다.
- 변환 행렬(물체의 이동)과 좌표 변경 행렬(좌표계의 이동)을 구분해서 배웠지만, 두 종류의 변환은 수학적으로 동등하다. 차이는 변환을 해석하는 방법일 뿐이다.
- 상황에 따라 변환 행렬을 사용하는 것이 더 직관적인 경우도 있고 좌표 변경 행렬을 사용하는 것이 더 직관적인 경우도 존재한다.
틀린 부분이나 이상한 부분이 있으면 댓글로 편하게 지적해주세요!
감사합니다!
'DirectX11 > 정보정리' 카테고리의 다른 글
[DirectX11] 렌더링 파이프라인(1) (0) | 2022.11.03 |
---|---|
[DirectX11] 색상 (0) | 2022.11.03 |
[DirectX11] DirectX3D 초기화(2) (0) | 2022.10.28 |
[DirectX11] DirectX3D 초기화(1) (0) | 2022.10.26 |
[DirectX11] 벡터 조작 (0) | 2022.10.24 |
댓글