일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 수식 복원하기
- 잔디 기부 캠페인
- 코드트리 고대 문명 유적 탐사
- 티스토리챌린지
- depth-stencil
- boj 1991
- pcce 기출문제 풀이
- pcce 기출문제 10번 공원
- 고대 문명 유적 탐사
- pcce 기출문제 10번 지폐 접기 풀이
- PCCE
- root signature
- 오블완
- pcce 기출문제 9번 지폐 접기
- pcce 기출문제 10번 공원 풀이
- directx 그래픽스
- constant buffre
- c++ 1991
- boj 5567
- DirectX12
- 렌더링 파이프
- pccp 기출문제 풀이
- python 고대 문명 유적 탐사
- c++ 5567
- texture mapping
- gemmasprint
- 잔디 기부
- DirectX
- 백준 5567
- 프로그래밍공부
- Today
- Total
오구의코딩모험
[DirectX] 변환 행렬 (Matrix) 본문
게임 개발에서 배우는 행렬과 좌표 변환
게임 개발에서 행렬(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)을 반드시 일치시켜야 왜곡을 방지할 수 있습니다.
행렬과 좌표 변환은 게임 개발의 핵심 요소로, 객체의 크기, 위치, 회전을 제어하는 데 필수적입니다.
특히, 변환의 순서와 역행렬을 활용한 좌표 복원은 중요한 요소로 보입니다.
이러한 개념을 확실히 이해하고 응용하면 더 나은 그래픽과 물리 시뮬레이션을 구현으로 이어질 수 있습니다.
'Game > DirectX' 카테고리의 다른 글
[DirectX] Component, 삼각 함수, Vector (4) | 2024.12.10 |
---|---|
[DirectX] Input과 Timer, Material (1) | 2024.12.07 |
[DirectX] Texture Mapping, Depth Stencil View (1) | 2024.12.04 |
[DirectX] Window Application (0) | 2024.11.28 |
[DirectX] 그래픽스, 렌더링 파이프 (2) | 2024.11.22 |