간단하게 DirectX 최신 버전 설치 & 개발 환경 세팅
간단하게 DirectX 최신 버전 설치 & 사용해보기
안녕하세요!
이번에는 DirectX의 최신버전을 설치하고 비주얼스튜디오에서 환경을 맞추어보도록 하겠습니다.
이 강좌는 간단하게 나중에 여러가지의 포스팅을 위해서 게시된 글입니다.
다운로드
DirectX의 최신버전은 Microsoft의 정식사이트에서 다운로드가능합니다.
https://www.microsoft.com/ko-kr/download/details.aspx?id=35
https://www.microsoft.com/ko-KR/download/details.aspx?id=8109
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;
}
컴파일하고 실행시키면??
와우~~~
현재 마우스커서의 위치를 실시간으로 계산해내는군뇨~~!!
굿!!!
그럼 안녕!!
'🕹️자체엔진 > 입문' 카테고리의 다른 글
[번역강좌] 2. 조명 - 물리 기반 렌더링(Physically Based Rendering) (1) | 2022.09.30 |
---|---|
[번역강좌] 1. 이론 - 물리 기반 렌더링(Physically Based Rendering) (1) | 2022.09.30 |
댓글