일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 25.06.11dir
- 게임개발
- leveleditor
- 프로그래밍
- DX
- ipc(inter process communication)
- c++
- 월드아웃라이너
- 자료구조정리
- 언리얼ai
- 게임엔진튜토리얼
- directx
- c언어정리
- 자료구조
- 수학용어정리
- livrary
- uaiperception
- 자료형타입
- c++용어정리
- 영단어정리
- c++porinter
- 언리얼엔진
- bttask
- 언리얼비헤이어비어트리
- 언리얼엔진공부
- 프로그래밍일기
- 각도변환
- c++class
- unrealengineai
- 언리얼엔진5
- Today
- Total
루리코딩 세상
행렬 개념정리 본문

DirectX에서 사용하는 행렬이 4*4인 것까지는 흐름적으로 이해했으나, 행렬을 까먹었다..ㅜ-ㅜ
회전을 위해서 값을 계산하고자 해도 행렬의 규칙 자체를 까먹어서 정리해둬야겠다..


정점을 z축(x,y,z)로하여 8개만 찍어서 사이값을 이어주게 된다면 정육면체를 그릴 수 있지 않을까?
[x, y, z]의 3개의 축을 행렬료만 나타냈을때 발생되는 문제점은 평면상으로 보인다는 것이다. Z축을 회전을 주게되어도, 각 정점까지 이어지는 비율이 필요해지는데 이로 인해서 4*4 행렬로 계산하는 것인가? 라는 의문점이 생겼다. Gtp에 물어보자..
Q.
Directs에서 4*4 행렬을 사용한다고 수업때 들었는데 xyz축을 기준으로 만들 수 있는 도형은 3d형태를 가지잖아 근데 단순히 생각했을때에는 회전값을 넣어도 평면이미지로 출력될거같은데 4행 4열에는 비율을 넣는다 라고 이해되는데 그렇게 보는게 맞을까?
A.
아주 날카로운 질문이에요! 🎯
DirectX나 OpenGL에서 3D 그래픽에 4×4 행렬을 사용하는 이유, 그리고 "평면 이미지로 출력되는데 왜 회전이 입체처럼 보이는가?" 같은 궁금증은 3D 렌더링의 본질을 잘 짚어보고 계신 겁니다.
✅ 핵심 요약
4×4 행렬은 3D 좌표 변환(이동, 회전, 크기, 투영 등)을 위한 도구이며,
최종적으로는 2D 평면(화면)에 투영된 결과가 렌더링됩니다.
✅ 왜 4×4 행렬을 쓰는가?
3D 공간에서 점이나 벡터를 나타내려면 (x, y, z)가 필요하죠?
그런데 여기에 **동차 좌표(homogeneous coordinates)**를 도입해서 (x, y, z, 1)로 표현합니다.
이유는:
| 변환 종류 | 3×3 가능? | 4×4 필요? | 이유 |
| ------ | ------- | ------- | ------------------------------------- |
| 이동 | ❌ | ✅ | 이동은 덧셈이 필요 → 4차원 벡터로 확장해야 표현 가능 |
| 회전 | ✅ | ✅ | 3×3도 가능하지만, 이동과 함께 하려면 4×4 필요 |
| 스케일 | ✅ | ✅ | 가능하지만 동일한 이유로 4×4가 편리 |
| 투영(원근) | ❌ | ✅ | z값에 따라 x, y를 줄여야 함 → 행렬로 표현하려면 4×4 필수 |
그래서 모든 변환을 하나의 4×4 행렬에 통합해서 계산합니다.
✅ 회전값을 넣어도 "왜 입체처럼 보이는가?"
정답: **투영 변환(projection)**과 깊이(depth) 정보 덕분입니다.
3D 오브젝트는:
월드 공간에서 회전 (World Matrix)
카메라(뷰) 공간으로 변환 (View Matrix)
원근 투영을 거쳐 2D 화면으로 내려옴 (Projection Matrix)
즉, 우리가 보는 것은 2D 평면에 투영된 결과지만,
투영 행렬에서 z축 깊이에 따라 x, y가 축소되기 때문에 입체감이 생깁니다.
📌 회전만 하고 투영이 없으면 → 그냥 평면이 돌아가는 듯 보임 (입체감 없음)
✅ "4×4 행렬은 비율을 넣는다"는 표현에 대해
어느 정도 맞는 관점이에요. 특히 투영 행렬에서는
z값에 따라 x, y가 얼마나 줄어드는지를 결정하기 때문에
공간의 비율이나 축소 정도를 설정하는 역할을 합니다.
하지만 전체 4×4 행렬이 단순히 비율만 담는 것은 아니고,
이동(translation)
회전(rotation)
스케일(scale)
투영(projection)
등 다양한 변환 정보를 조합해서 표현하는 구조입니다.
✅ 시각적으로 표현하면
[ Rotation / Scale / Shear | Translation ]
[ 투영 관련 값들 | 깊이 제어 ]
| Rx Ry Rz Tx |
| ... |
| ... |
| Px Py Pz 1 |
✅ 마무리 요약
4×4 행렬은 3D에서 이동·회전·스케일·투영 등을 하나로 계산하기 위한 도구
단순히 회전만 하면 평면처럼 보일 수 있지만, 투영 변환을 통해 깊이 정보가 반영되기 때문에 입체처럼 보임
"비율을 넣는다"는 표현은 투영 변환에서 맞는 표현이지만, 4×4 행렬은 그것보다 훨씬 다양한 역할을 함
프로그래밍으로 돌아와서,
행렬을 통해서, 가상의 공간에 2D로 생성된 이미지의 깊이(w)와 깊의의 좌표를 나타낼 수 있는 z축의 임의의 값을 메모리에 할당해주고 표현해줘야하는 구조를 조금이나마 이해하는데 도움이 됬다. 3*3의 행렬로 계산을 하여 작성하게됬을 때 생기는 문제점은 평면처럼 보이지 않을까? 하는 의구심이 조금이나마 해결됨
——용어정리 해두기
Trancelation : 이동
Rotation : 회전
Scale : 왜곡되는 비율
Projection : 투영
Homogeneous Coordinate : 동차 좌표, (x, y, z, w)처럼 4차원으로 확장된 좌표계
Perspective Divide : w로 나누는 연산, 투영효과를 만드는 단계
Depth(in projection) : 깊이 정보로 해석 (z/w형태로 사용)
