오구의코딩모험

[DirectX] 변환 행렬 (Matrix) 본문

Game/DirectX

[DirectX] 변환 행렬 (Matrix)

오구.cpp 2024. 12. 16. 23:49
반응형

 

 

게임 개발에서 배우는 행렬과 좌표 변환

 


게임 개발에서 행렬(Matrix)은 좌표 변환과 3D 공간을 제어하는 데 매우 중요한 역할을 합니다.

이번 글에서는 행렬의 기본적인 연산, 변환의 순서, 그리고 로컬 좌표에서 스크린 좌표로 변환하는 과정을 정리합니다.

초심자의 관점에서 배우고 기록한 내용을 공유합니다.

 


 

 

1. 행렬의 기본 개념

 

행렬의 곱
- 행렬 A(m × n)과 B(n × p)를 곱하면 결과는 C(m × p)가 됩니다.  
- 교환 법칙 : 성립하지 않습니다. (A × B ≠ B × A)  
- 결합 법칙 : 성립합니다. ((A × B) × C = A × (B × C))  

역행렬  
- 역행렬 은 행렬을 곱했을 때 단위행렬로 돌아오게 하는 행렬입니다.  
- 예: A × A⁻¹ = I (단위행렬)  
- 하지만, 모든 행렬이 역행렬을 가지는 것은 아닙니다.  

전치행렬과 직교행렬  
- 전치행렬 은 행렬의 값을 대각선을 기준으로 위치를 뒤바꾼 행렬입니다.  
- 직교행렬 은 행렬끼리의 곱에서 전치행렬이 역행렬과 같은 역할을 합니다.  

 

 


2. 변환의 종류와 순서

 

주요 변환
1. Scale : 크기 키우기.  
2. Rotation : 회전 변환.  
3. Translation : 평행 이동.  

변환 순서의 중요성  
- 변환의 순서는 결과에 영향을 미칩니다.  
- 예: Scale → Rotation → Translation 순서로 변환해야 의도한 결과를 얻을 수 있습니다.  
- Scale과 Rotation은 원점을 기준으로 변환하므로, 원점 위치에 따라 결과가 달라질 수 있습니다.  

 



3. 좌표 변환의 단계


게임 개발에서는 로컬 좌표에서 스크린 좌표까지 여러 변환 과정을 거칩니다.

3.1 Local → World 변환
- Local 좌표를 World 행렬 과 곱하여 월드 좌표로 변환합니다.  
- 월드 좌표는 객체가 전역 공간에서의 위치를 나타냅니다.  

3.2 World → View 변환 (카메라 변환)
- View 행렬 은 카메라 좌표계로 변환하기 위해 사용됩니다.  
- 역행렬 연산 : View 변환은 Rotation × Translation의 역행렬입니다.  
- Translation의 역행렬을 먼저 곱한 후, Rotation의 역행렬을 곱해 좌표를 구합니다.  
- XMMatrixLookAtLH : DirectX에서는 이 함수를 사용하여 View 행렬을 생성할 수 있습니다.  

3.3 View → Projection 변환
- Projection 행렬은 3D 좌표를 2D 좌표로 투영합니다.  
- 주요 공식:  
  - 전체 길이 대비 현재 좌표 계산.  
  - 화면 비율 계산: tan(x/2)로 비율을 조정합니다.  

3.4 Projection → Screen 변환
- 투영된 좌표는 -1 ~ 1 범위로 정규화됩니다.  
- 이 값을 바탕으로 화면 크기에 맞게 조정하여 배치합니다.  



정리

 


1. 변환 순서 확인하기
   - Scale → Rotation → Translation 순서를 엄격히 지키는 것이 중요합니다.  
   - 순서가 잘못되면 원치 않은 결과를 초래할 수 있습니다.  

2. 역행렬 활용하기
   - 좌표 변환이 잘못되었을 경우, 역행렬을 활용하여 이전 단계의 좌표를 복원할 수 있습니다.  

3. 카메라 변환 계산 간소화 
   - XMMatrixLookAtLH 함수와 같은 라이브러리를 활용하면 수동 계산을 최소화할 수 있습니다.  

4. Projection 비율 확인
   - 3D 공간을 2D 화면에 투영할 때, 화면 비율(aspect ratio)을 반드시 일치시켜야 왜곡을 방지할 수 있습니다.  

 


행렬과 좌표 변환은 게임 개발의 핵심 요소로, 객체의 크기, 위치, 회전을 제어하는 데 필수적입니다.

특히, 변환의 순서와 역행렬을 활용한 좌표 복원은 중요한 요소로 보입니다.

이러한 개념을 확실히 이해하고 응용하면 더 나은 그래픽과 물리 시뮬레이션을 구현으로 이어질 수 있습니다.

 

반응형
Comments