KoreanFoodie's Study
DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection) 본문
Game Dev/DirectX
DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection)
GoldGiver 2021. 10. 28. 07:51
DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection)
D3DXMATRIX를 활용한 공간 생성
- D3DXMATRIX는 총 16개의 float형 데이터로 구성되어 있다. (정의 확인)
- 행렬은 항상 단위행렬로 초기화해야 한다. (D3DXIdentityMatrix 함수)
- 공간이 커지거나 이동하면 내부의 데이터도 동일하게 변형된다. (위치나 벡터 데이터 크기)
Projection 알아보기
- 원근투영은 절두체 모양의 시야 공간을 가진다
- 직교투영은 직육면체 모양의 시야 공간을 가진다
단축키
- 영역 지정 후 Ctrl + H 단축키를 누르면 해당 범위의 특정 단어들을 바꿀 수 있다. (Alt + A 누르면 모두 바뀜)
- OpenGL : RH (Right Hand) 좌표계를 사용함
- DirectX : LH (Left hand) 좌표계를 사용함
Execute.h
이전에 했던 공간 이야기에 이어, Execute.h에 D3DXMATRIX 행렬 타입 world, view, projection을 선언한다.
// D3DXMATRIX : 4X4 float 행렬
// 행렬은 항상 단위행렬로 초기화해야 한다.
D3DXMATRIX world; // 4X4
D3DXMATRIX view;
D3DXMATRIX projection;
/*
1 0 0 0 // x
0 1 0 0 // y
0 0 1 0 // z
0 0 0 1 // 동차가 1이면 위치를 의미 (위치가 변경되면 0 0 0 부분이 바뀐다.)
y z
^ /
| /
| /
|------> x
(0, 0, 0)
: x, y, z 축으로 1만큼 가는, 위치가 (0, 0, 0)인 방향벡터
OpenGL - RH (Right Hand)좌표계
DirectX - LH (Left Hand)좌표계
*/
Execute.cpp
Execute.cpp에서는 헤더 파일에서 정의한 world, view, projection 값들을 직접 설정해주면 된다.
// Create World View Projection
{
// 함수를 활용해서 모든 행렬을 단위행렬로 만들어주기
D3DXMatrixIdentity(&world);
D3DXMatrixIdentity(&view);
D3DXMatrixIdentity(&projection);
D3DXVECTOR3 LHeye(0, 0, 0);
D3DXVECTOR3 LHat(0, 0, 1);
D3DXVECTOR3 LHup(0, 1, 0);
D3DXMatrixLookAtLH(&view, &LHeye, &LHat, &LHup);
// 투영 방식 :
// Perspective : 원근감이 느껴지는 투영, 절두체로 표현된다.
// Orthographic : 직교 투영, 원근감이 느껴지지 않음. 직교투영의 시야공간은 직육면체로 표현된다.
D3DXMatrixOrthoLH(&projection, Settings::Get().GetWidth(), Settings::Get().GetHeight(), 0, 1);
std::cout << "View Matrix" << std::endl;
// D3DMATRIX 정의 참고
std::cout << view._11 << " " << view._12 << " " << view._13 << " " << view._14 << std::endl;
std::cout << view._21 << " " << view._22 << " " << view._23 << " " << view._24 << std::endl;
std::cout << view._31 << " " << view._32 << " " << view._33 << " " << view._34 << std::endl;
std::cout << view._41 << " " << view._42 << " " << view._43 << " " << view._44 << std::endl;
std::cout << std::endl;
std::cout << "Projection Matrix" << std::endl;
std::cout << projection._11 << " " << projection._12 << " " << projection._13 << " " << projection._14 << std::endl;
std::cout << projection._21 << " " << projection._22 << " " << projection._23 << " " << projection._24 << std::endl;
std::cout << projection._31 << " " << projection._32 << " " << projection._33 << " " << projection._34 << std::endl;
std::cout << projection._41 << " " << projection._42 << " " << projection._43 << " " << projection._44 << std::endl;
}
std::cout 으로 실제 좌표값을 콘솔창에 출력했다.
더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
'Game Dev > DirectX' 카테고리의 다른 글
DirectX 11 2D 게임 프로그래밍 - 12. 행렬 결합 : 이동과 회전 (0) | 2021.10.31 |
---|---|
DirectX 11 2D 게임 프로그래밍 - 11. Constant Buffer 개념과 응용 (0) | 2021.10.31 |
DirectX 11 2D 게임 프로그래밍 - 9. Index Buffer & 공간 변환 (0) | 2021.10.27 |
DirectX 11 2D 게임 프로그래밍 - 8. Pixel Shader Stage & 도형 그리기 (0) | 2021.10.27 |
DirectX 11 2D 게임 프로그래밍 - 7. Vertex Shader Stage (0) | 2021.10.25 |
Comments