본문 바로가기
DirectX11/정보정리

[DirectX11] 행렬과 변환

by 마두식 2022. 10. 25.
반응형

※  아래의 내용들은 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

댓글