🕹️자체엔진/입문

간단하게 DirectX 최신 버전 설치 & 개발 환경 세팅

Mawile 2021. 11. 28.
728x90

간단하게 DirectX 최신 버전 설치 & 사용해보기

안녕하세요!

이번에는 DirectX의 최신버전을 설치하고 비주얼스튜디오에서 환경을 맞추어보도록 하겠습니다.

이 강좌는 간단하게 나중에 여러가지의 포스팅을 위해서 게시된 글입니다.

 

 

다운로드

DirectX의 최신버전은 Microsoft의 정식사이트에서 다운로드가능합니다.

https://www.microsoft.com/ko-kr/download/details.aspx?id=35 

 

Download DirectX 최종 사용자 런타임 웹 설치 관리자 from Official Microsoft Download Center

중요! 아래에서 언어를 선택하면 전체 페이지 내용이 해당 언어로 신속하게 변경됩니다. 네덜란드어독일어러시아어스웨덴어스페인어영어이탈리아어일본어중국어(간체)중국어(번체)체코어포

www.microsoft.com

https://www.microsoft.com/ko-KR/download/details.aspx?id=8109 

 

Download DirectX 최종 사용자 런타임 from Official Microsoft Download Center

중요! 아래에서 언어를 선택하면 전체 페이지 내용이 해당 언어로 신속하게 변경됩니다. 네덜란드어독일어러시아어스웨덴어스페인어영어이탈리아어일본어중국어(간체)중국어(번체)체코어포

www.microsoft.com

 

DirectX 설치하기

우선 DirectX를 설치하기 위해서 다음과 같은 가이드라인에 따라 따라해주시기바랍니다.

우선 "다운로드"라는 버튼을 누르면 패키지파일이 설치됩니다.

 

그다음, 설치된 패키지파일을 실행시키면 다음과 같은 대화상자가 나옵니다.

 

그러면 동의함(A)을 클릭한후 다음(N)을 눌러줍니다.

그러면, Bing 바 설치가 나오는데 체크해제 하시구요 다음(N)을 눌러줍니다.

 

 

그러면은 설치가 진행되는데 저는 이미 설치가 되어있기 때문에 바로 마쳐주었습니다.

중간에 DirectX 설치경로가 나오는데, 그거는 자신이 설치할곳을 직접 정해주는것이 좋습니다.

 

 

설치가 완료되면 이제 비주얼 스튜디오로 넘어가겠습니다.

저는 당연히 C++ 빈 프로젝트를 실행합니다.

 

 

그러면은 솔루션이랑 프로젝트가 열립니다.

거기서 속성(R)을 클릭해줍니다.

 

이제부터 사진에 따라 우리가 설치한 DirectX의 경로에 맞춰서 라이브러리참조와 헤더파일을 연결해줍니다.

그냥 사진처럼 맞춰주시면됩니다.

 

 

저는 다음과 같이 입력했습니다.

(반드시 DirectX의 Include폴더를 가장 밑(가장 처음)에 참조해주세요!)

이렇게 um winrt shared라는 헤더파일을 후에 참조시키는 이유는 DirectX의 Include폴더에는 엄청난양의 중복되는 매크로나 참조가 존재하는 이를 막기 위함입니다.

C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.22000.0\um
C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.22000.0\winrt
C:\Program Files %28x86%29\Windows Kits\10\Include\10.0.22000.0\shared
W:\DirectX\Include

 

이제 라이브러리참조를 추가합니다.

라이브러리는 그냥 DirectX의 Lib(32bit)폴더만 참조해줍니다.

 

이제 간단한 예제코드를 통해 DirectX가 정상작동하는지 알아보겠습니다!

소스코드는 즉석으로 만들어서 좀 더럽습니다.

#pragma comment(lib, "dinput8")
#pragma comment(lib, "dxguid")

#define DIRECTINPUT_VERSION (0x0800)

#include <iostream>
#include <dinput.h>


HRESULT DIMouseDeviceStart(IDirectInputDevice8** mouseDevice) {
	HWND hwnd = GetConsoleWindow();
	HRESULT result;

	// 데이터형식은 마우스로 설정
	result = (*mouseDevice)->SetDataFormat(&c_dfDIMouse);
	if (FAILED(result)) {
		OutputDebugStringA("Error: SetDataFormat\n");
		return -1;
	}

	// 협력레벨은 다른 프로세스간의 상호간접적으로 영향을 끼칠것인가..
	// 그냥 아니요로 한다
	result = (*mouseDevice)->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
	if (FAILED(result)) {
		OutputDebugStringA("Error: SetCooperativeLevel\n");
		return -1;
	}

	// 시작!
	result = (*mouseDevice)->Acquire();
	if (FAILED(result)) {
		OutputDebugStringA("Error: Acquire\n");
		return -1;
	}

	return 1;
}

void DIMouseDeviceEnd(IDirectInputDevice8** mouseDevice) {
	(*mouseDevice)->Unacquire();
	(*mouseDevice)->Release();
	(*mouseDevice) = nullptr;

	return;
}

int main(int argc, char** argv) {
	HMODULE hInst = GetModuleHandle(0);
	HRESULT result;

	IDirectInput8* directInput;
	IDirectInputDevice8* mouseDevice;
	DIMOUSESTATE mouseState;

	int mousePosX, mousePosY;
	int screenWidth, screenHeight;

	screenWidth = GetSystemMetrics(SM_CXSCREEN);
	screenHeight = GetSystemMetrics(SM_CYSCREEN);

	// 입력값객체 디바이스에 대한 포인터 만들고
	result = DirectInput8Create(hInst, DIRECTINPUT_VERSION, IID_IDirectInput8, (LPVOID*)&directInput, 0);
	if (FAILED(result)) {
		OutputDebugStringA("Error: DirectInput8Create\n");
		return -1;
	}

	// 마우스디바이스에 대한 포인터 만들고
	result = directInput->CreateDevice(GUID_SysMouse, &mouseDevice, 0);
	if (FAILED(result)) {
		OutputDebugStringA("Error: CreateDevice\n");
		return -1;
	}

	result = DIMouseDeviceStart(&mouseDevice);
	if (FAILED(result)) {
		OutputDebugStringA("Error: DIMouseDeviceStart\n");
		return -1;
	}

	// Running Point (Begin)

	// 마우스위치를 (0, 0)으로 초기화
	mousePosX = 0;
	mousePosY = 0;
	SetCursorPos(mousePosX, mousePosY);

	for (;;) {
		// 마우스상태를 가져온다
		result = mouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (LPVOID)&mouseState);
		if (FAILED(result)) {
			if (result == DIERR_NOTACQUIRED || result == DIERR_INPUTLOST) {
				OutputDebugStringA("Error: GetDeviceState\n");
				return -1;
			}
			else {
				mouseDevice->Acquire();
			}
		}

		// 마우스 절대적 위치 계산
		mousePosX += mouseState.lX;
		mousePosY += mouseState.lY;

		if (mousePosX < 0) { mousePosX = 0; }
		if (mousePosY < 0) { mousePosY = 0; }

		if (mousePosX > screenWidth) { mousePosX = screenWidth; }
		if (mousePosY > screenHeight) { mousePosY = screenHeight; }

		// 콘솔로 출력
		std::cout << "Mouse X: " << mousePosX << "\t\tMouse Y : " << mousePosY << std::endl;
		std::system("cls");

	}

	// Running Point (End)

	DIMouseDeviceEnd(&mouseDevice);

	return 0;
}

 

컴파일하고 실행시키면??

 

와우~~~

현재 마우스커서의 위치를 실시간으로 계산해내는군뇨~~!!

굿!!!

 

그럼 안녕!!

 


728x90

댓글