Programming/컴퓨터그래픽스 (DX 11)

[DirectX 11] DirectX의 행렬 활용을 위한 2D 기본 행렬 복습

양양줘 2025. 6. 11. 17:19

Direct 2D에서는 변환 연산을 위해 행렬을 활용하는데

행벡터를 기준으로 나타난다.

 옛... 날에 행렬계산으로 이동, 회전, 스케일 연산 등을 배웠었는데

그때는 열벡터를 기준으로 연산을 했었기 때문에

Direct 2D를 공부하기 전에 얄팍하지만 정리를 해본다.

 

📌  행렬 곱셈 특징

  1. 행렬의 곱셈은 앞의 열의 수와 뒤의 행의 원소 수가 같아야 한다.
  2. 행열의 곱셈은 교환법칙이 성립하지 않는다 ( 곱셈의 순서에 따라 결과가 다르다)
  3. 결합법칙 성립한다 (AB)C = A(BC) 반복 사용하는 행렬을 미리 연산하면 계산량을 줄일 수 있다.

 

📌  행렬곱을 통한 변환 순서

Scale → Rotation → Translation

  • Scale 먼저 해야 크기 조정이 원점(0,0)을 기준으로 이루어짐
  • 그 다음 Rotation 을 해야 원점 기준으로 회전됨
  • 마지막으로 Translation 을 하여 원하는 위치로 이동함
XMMATRIX scale = XMMatrixScaling(sx, sy, 1.0f);
XMMATRIX rotation = XMMatrixRotationZ(angle);
XMMATRIX translation = XMMatrixTranslation(tx, ty, 0.0f);

XMMATRIX world = scale * rotation * translation;

 

 

📌  행렬곱 계산

// 수학적 변환행렬 표헌법
| M11  M12  dx | -> x축 방향벡터, 평행이동
| M21  M22  dy | -> y축 방향벡터, 평행이동
| 0    0    1  | -> 동차좌표

// 수학적으로 행렬 곱을 하려면?
// 1. 이동
// 변환행렬은 - dx, dy에 평행 이동 값을 넣으면 된다.
| 1  0  dx |
| 0  1  dy |
| 0  0  1  |

// Vector2 (2,2)를 x축방향으로 3, y축 방향으로 5 이동시키기
// 동차좌표를 적용한 행렬과 벡터를 곱하고, 다시 2차원 좌표로 변환한다. 벡터의 최종 좌표는 (5, 3)이다.
| 1  0  3 |       | 2 |       | 1*2 + 0*2 + 3*1 |       | 5 |       | 5 |
| 0  1  1 |   ×   | 2 |   =   | 0*2 + 1*2 + 1*1 |   =   | 3 |   =>  | 3 |   
| 0  0  1 |       | 1 |   =   | 0*1 + 0*1 + 1*1 |       | 1 |


// 2. 회전
// 변환행렬은 각도 θ에 따라 cosθ, sinθ를 이용해 만든다.
| cosθ   -sinθ   0 |
| sinθ    cosθ   0 |
| 0        0     1 |

// Vector2 (2,2)를 90도 (π/2 라디안) 반시계 방향 회전시키기
// cos90°=0, sin90°=1
// 동차좌표 행렬과 벡터 곱, 다시 2차원 좌표로 변환한다. 벡터의 최종 좌표는 (-2, 2)이다.
| 0  -1  0 |       | 2 |       | 0*2 + (-1)*2 + 0*1 |       | -2 |       | -2 |
| 1   0  0 |   ×   | 2 |   =   | 1*2 + 0*2 + 0*1    |   =   |  2 |   =>  |  2 |   
| 0   0  1 |       | 1 |       | 0*2 + 0*2 + 1*1    |       |  1 |


// 3. 스케일
// 변환행렬은 x축 방향 스케일 sx, y축 방향 스케일 sy를 넣으면 된다.
| sx   0    0 |
| 0    sy   0 |
| 0    0    1 |

// Vector2 (2,2)를 x축 3배, y축 2배 확대시키기
// 동차좌표 행렬과 벡터 곱, 다시 2차원 좌표로 변환한다. 벡터의 최종 좌표는 (6, 4)이다.
| 3  0  0 |       | 2 |       | 3*2 + 0*2 + 0*1 |       | 6 |       | 6 |
| 0  2  0 |   ×   | 2 |   =   | 0*2 + 2*2 + 0*1 |   =   | 4 |   =>  | 4 |   
| 0  0  1 |       | 1 |       | 0*2 + 0*2 + 1*1 |       | 1 |

 

 

 

 


 

 

Matrix Calculator

Free matrix calculator - solve matrix operations and functions step-by-step

www.symbolab.com

 

wooj22 - Overview

🎮 Game Programmer. wooj22 has 22 repositories available. Follow their code on GitHub.

github.com

 

양우정

 

www.youtube.com