관리 메뉴

KoreanFoodie's Study

DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection) 본문

Game Dev/DirectX 11

DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection)

머니덕 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 으로 실제 좌표값을 콘솔창에 출력했다.


더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!

 
0 Comments
댓글쓰기 폼