KoreanFoodie's Study
DirectX 11 2D 게임 프로그래밍 - 12. 행렬 결합 : 이동과 회전 본문
DirectX 11 2D 게임 프로그래밍 - 12. 행렬 결합 : 이동과 회전
행렬 결합하기
- 스케일 행렬에는 0이 들어가면 절대 안 된다
- 행렬은 교환 법칙이 성립하지 않는다
- 행렬 결합 순서는 스! 자! 이! 공! 부! (스케일, 자전, 이동, 공전, 부모)
Execute.cpp
D3DXMATRIX를 이용해서 행렬 연산을 통해 공간의 크기와 위치를 바꾸고, 회전을 시켜보자!
// World : Scaling은 공간의 크기를 바꿀 수 있다.
D3DXMATRIX S;
D3DXMatrixScaling(&S, 100, 100, 1);
std::cout << "Scale Matrix" << std::endl;
std::cout << S._11 << " " << S._12 << " " << S._13 << " " << S._14 << std::endl;
std::cout << S._21 << " " << S._22 << " " << S._23 << " " << S._24 << std::endl;
std::cout << S._31 << " " << S._32 << " " << S._33 << " " << S._34 << std::endl;
std::cout << S._41 << " " << S._42 << " " << S._43 << " " << S._44 << std::endl;
std::cout << std::endl;
// Translation : 공간을 이동시켜줌. 이전 공간의 정보를 계승하지 않음
D3DXMATRIX T;
D3DXMatrixTranslation(&T, 100, 100, 0);
std::cout << "Translation Matrix" << std::endl;
std::cout << T._11 << " " << T._12 << " " << T._13 << " " << T._14 << std::endl;
std::cout << T._21 << " " << T._22 << " " << T._23 << " " << T._24 << std::endl;
std::cout << T._31 << " " << T._32 << " " << T._33 << " " << T._34 << std::endl;
std::cout << T._41 << " " << T._42 << " " << T._43 << " " << T._44 << std::endl;
std::cout << std::endl;
D3DXMATRIX R;
// 회전의 중심이 되는 축은 고정이다!
D3DXMatrixRotationZ(&R, static_cast<float>D3DXToRadian(45));
std::cout << "Rotation Matrix" << std::endl;
std::cout << R._11 << " " << R._12 << " " << R._13 << " " << R._14 << std::endl;
std::cout << R._21 << " " << R._22 << " " << R._23 << " " << R._24 << std::endl;
std::cout << R._31 << " " << R._32 << " " << R._33 << " " << R._34 << std::endl;
std::cout << R._41 << " " << R._42 << " " << R._43 << " " << R._44 << std::endl;
std::cout << std::endl;
// 스 * 자 * 이 * 공 * 부
// S * R * T * R * P
// 스케일 * 자전 * 이동 * 공전 * 부모
world = S * R * T; // T * S와는 다르다! 행렬은 교환법칙이 성립하지 않음
만약 계속 회전을 시키고 싶다면, Update( )에서 해당 조작을 해 주면 된다.
static float radian = 0.0f;
radian += 0.01f;
D3DXMATRIX P;
D3DXMatrixRotationZ(&P, radian);
// 부모 행렬을 곱해주면 부모 행렬에 종속된다!
world = world * P;
더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
'Game Dev > DirectX' 카테고리의 다른 글
DirectX 11 2D 게임 프로그래밍 - 14. Texture 설정과 이미지 띄우기 (0) | 2021.11.03 |
---|---|
DirectX 11 2D 게임 프로그래밍 - 13. Rasterizer state과 좌표계 (0) | 2021.10.31 |
DirectX 11 2D 게임 프로그래밍 - 11. Constant Buffer 개념과 응용 (0) | 2021.10.31 |
DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection) (0) | 2021.10.28 |
DirectX 11 2D 게임 프로그래밍 - 9. Index Buffer & 공간 변환 (0) | 2021.10.27 |
Comments