DXUT는 d3d9 api를 사용하는것 보다 훨씬 편한 구조를 제공해준다. 콜백을 통해서 원하는 기능을 처리하는게 OpenGL과 유사하다.
처음 DXUT를 사용하려는 사람중에 조금 헤매는 사람이 있는터라..
아래는 라이브러리와 헤더파일 참조방법이다.
1. (DirectX root path)\Samples\C++\DXUT\Core\ 의 DXUT_VSVERSION.sln 을 빌드한다.
2. Debug 폴더(Release 모드로 빌드했다면 Release폴더)에서 DXUT.lib
3. DXUT.h, DXUTenum.h, DXUTmisc.h 와 위의 DXUT.lib를 사용할 프로젝트 폴더로 복사하여 사용한다. (계속 이렇게 쓰려면 여기서 끝)
4. d3d9 혹은 d3d10 라이브러리를 인클루드할때 편하게 같이 넣고싶다면
(DirectX root path)\Include 에 위 헤더파일을, (DirectX root path)\Include\x86 에 DXUT.lib 파일을 복사하여 넣는다.
5. 프로젝트 속성에서 인클루드 디렉토리와 라이브러리 디렉토리를 설정해준다. (vs 2008 이라면 vs설정에서 인클루드 디렉토리와 라이브러리 디렉토리를 추가해준다.)
6. DXUT optional library도 사용하고자 한다면 (DirectX root path)\Samples\C++\DXUT\Optional 의 .sln 에 대해서도 위와같이 빌드해준다.
7. 빌드 결과 .lib파일과 관련된 .h 파일을 사용하려는 프로젝트에 카피하거나 (4) 와 같이 참조경로에 넣어준다.
* 쉐이더나 테셀레이션 관련 라이브러리도 필요할 때 같은방법으로 빌드해서 사용하면 된다.
* dxut 일부 라이브러이에 대한 링크에러가 난다면 아래 원문을 참고 (출처 : http://kaludin.egloos.com/2551173 )
아래 링크에러가 발생하면 stdafx.cpp 에 해당하는 라이브러리를 연결시킨다.
http://www.imp17.com/tc/myevan/tag/d3d <- 여기서 보세요.
DXUTmisc.obj : error LNK2019: _DXTraceW@20 외부 기호(참조 위치: "long __stdcall DXUTTrace(char const *,unsigned long,long,wchar_t const *,bool)" (?DXUTTrace@@YGJPBDKJPB_W_N@Z) 함수)에서 확인하지 못했습니다.
C:\direct3d\dxut_test\Debug\dxut_test.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
#pragma comment(lib, "DxErr9.lib")
---------------------------------
DXUT.obj : error LNK2001: _IID_IDirect3DSwapChain9 외부 기호를 확인할 수 없습니다.
C:\direct3d\dxut_test\Debug\dxut_test.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
#pragma comment(lib, "dxguid.lib")
---------------------------------
DXUT.obj : error LNK2019: __imp__CommandLineToArgvW@8 외부 기호(참조 위치: "void __cdecl DXUTParseCommandLine(wchar_t *)" (?DXUTParseCommandLine@@YAXPA_W@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__ExtractIconW@12 외부 기호(참조 위치: "long __stdcall DXUTCreateWindow(wchar_t const *,struct HINSTANCE__ *,struct HICON__ *,struct HMENU__ *,int,int)" (?DXUTCreateWindow@@YGJPB_WPAUHINSTANCE__@@PAUHICON__@@PAUHMENU__@@HH@Z) 함수)에서 확인하지 못했습니다.
C:\direct3d\dxut_test\Debug\dxut_test.exe : fatal error LNK1120: 2개의 확인할 수 없는 외부 참조입니다.
#pragma comment(lib, "shell32.lib")
---------------------------------
DXUT.obj : error LNK2019: __imp__InitCommonControls@0 외부 기호(참조 위치: "long __stdcall DXUTInit(bool,bool,wchar_t *,bool)" (?DXUTInit@@YGJ_N0PA_W0@Z) 함수)에서 확인하지 못했습니다.
C:\direct3d\dxut_test\Debug\dxut_test.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
#pragma comment(lib, "comctl32.lib")
---------------------------------
#pragma comment(lib, "gdi32.lib")
---------------------------------
DXUT.obj : error LNK2019: __imp__GetClientRect@8 외부 기호(참조 위치: "struct tagRECT __stdcall DXUTGetWindowClientRect(void)" (?DXUTGetWindowClientRect@@YG?AUtagRECT@@XZ) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SystemParametersInfoW@16 외부 기호(참조 위치: "long __stdcall DXUTInit(bool,bool,wchar_t *,bool)" (?DXUTInit@@YGJ_N0PA_W0@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__CreateWindowExW@48 외부 기호(참조 위치: "long __stdcall DXUTCreateWindow(wchar_t const *,struct HINSTANCE__ *,struct HICON__ *,struct HMENU__ *,int,int)" (?DXUTCreateWindow@@YGJPB_WPAUHINSTANCE__@@PAUHICON__@@PAUHMENU__@@HH@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__AdjustWindowRect@12 외부 기호(참조 위치: "long __stdcall DXUTCreateWindow(wchar_t const *,struct HINSTANCE__ *,struct HICON__ *,struct HMENU__ *,int,int)" (?DXUTCreateWindow@@YGJPB_WPAUHINSTANCE__@@PAUHICON__@@PAUHMENU__@@HH@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetRect@20 외부 기호(참조 위치: "long __stdcall DXUTCreateWindow(wchar_t const *,struct HINSTANCE__ *,struct HICON__ *,struct HMENU__ *,int,int)" (?DXUTCreateWindow@@YGJPB_WPAUHINSTANCE__@@PAUHICON__@@PAUHMENU__@@HH@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__RegisterClassW@4 외부 기호(참조 위치: "long __stdcall DXUTCreateWindow(wchar_t const *,struct HINSTANCE__ *,struct HICON__ *,struct HMENU__ *,int,int)" (?DXUTCreateWindow@@YGJPB_WPAUHINSTANCE__@@PAUHICON__@@PAUHMENU__@@HH@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__LoadCursorW@8 외부 기호(참조 위치: "long __stdcall DXUTCreateWindow(wchar_t const *,struct HINSTANCE__ *,struct HICON__ *,struct HMENU__ *,int,int)" (?DXUTCreateWindow@@YGJPB_WPAUHINSTANCE__@@PAUHICON__@@PAUHMENU__@@HH@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetWindowLongW@8 외부 기호(참조 위치: "long __stdcall DXUTSetWindow(struct HWND__ *,struct HWND__ *,struct HWND__ *,bool)" (?DXUTSetWindow@@YGJPAUHWND__@@00_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetWindowTextW@12 외부 기호(참조 위치: "long __stdcall DXUTSetWindow(struct HWND__ *,struct HWND__ *,struct HWND__ *,bool)" (?DXUTSetWindow@@YGJPAUHWND__@@00_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetWindowLongW@12 외부 기호(참조 위치: "long __stdcall DXUTSetWindow(struct HWND__ *,struct HWND__ *,struct HWND__ *,bool)" (?DXUTSetWindow@@YGJPAUHWND__@@00_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__DefWindowProcW@16 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__PostQuitMessage@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__UnregisterClassW@8 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__DestroyWindow@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__DestroyMenu@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetMenu@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SendMessageW@16 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__ClipCursor@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetCursor@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetCursorPos@4 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__ScreenToClient@8 외부 기호(참조 위치: "long __stdcall DXUTStaticWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DXUTStaticWndProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__DestroyAcceleratorTable@4 외부 기호(참조 위치: "long __stdcall DXUTMainLoop(struct HACCEL__ *)" (?DXUTMainLoop@@YGJPAUHACCEL__@@@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__DispatchMessageW@4 외부 기호(참조 위치: "long __stdcall DXUTMainLoop(struct HACCEL__ *)" (?DXUTMainLoop@@YGJPAUHACCEL__@@@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__TranslateMessage@4 외부 기호(참조 위치: "long __stdcall DXUTMainLoop(struct HACCEL__ *)" (?DXUTMainLoop@@YGJPAUHACCEL__@@@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__TranslateAcceleratorW@12 외부 기호(참조 위치: "long __stdcall DXUTMainLoop(struct HACCEL__ *)" (?DXUTMainLoop@@YGJPAUHACCEL__@@@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__PeekMessageW@20 외부 기호(참조 위치: "long __stdcall DXUTMainLoop(struct HACCEL__ *)" (?DXUTMainLoop@@YGJPAUHACCEL__@@@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__IsWindowVisible@4 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__IsZoomed@4 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetWindowRect@8 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__IsIconic@4 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetWindowPos@28 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetWindowPlacement@8 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetWindowPlacement@8 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetMenu@8 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__ShowWindow@8 외부 기호(참조 위치: "long __cdecl DXUTChangeDevice(struct DXUTDeviceSettings *,struct IDirect3DDevice9 *,struct ID3D10Device *,bool,bool)" (?DXUTChangeDevice@@YAJPAUDXUTDeviceSettings@@PAUIDirect3DDevice9@@PAUID3D10Device@@_N3@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__ReleaseDC@8 외부 기호(참조 위치: "long __cdecl DXUTSetD3D9DeviceCursor(struct IDirect3DDevice9 *,struct HICON__ *,bool)" (?DXUTSetD3D9DeviceCursor@@YAJPAUIDirect3DDevice9@@PAUHICON__@@_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetDC@4 외부 기호(참조 위치: "long __cdecl DXUTSetD3D9DeviceCursor(struct IDirect3DDevice9 *,struct HICON__ *,bool)" (?DXUTSetD3D9DeviceCursor@@YAJPAUIDirect3DDevice9@@PAUHICON__@@_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetIconInfo@8 외부 기호(참조 위치: "long __cdecl DXUTSetD3D9DeviceCursor(struct IDirect3DDevice9 *,struct HICON__ *,bool)" (?DXUTSetD3D9DeviceCursor@@YAJPAUIDirect3DDevice9@@PAUHICON__@@_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__CallNextHookEx@16 외부 기호(참조 위치: "long __stdcall DXUTLowLevelKeyboardProc(int,unsigned int,long)" (?DXUTLowLevelKeyboardProc@@YGJHIJ@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__SetWindowsHookExW@16 외부 기호(참조 위치: "void __cdecl DXUTAllowShortcutKeys(bool)" (?DXUTAllowShortcutKeys@@YAX_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__UnhookWindowsHookEx@4 외부 기호(참조 위치: "void __cdecl DXUTAllowShortcutKeys(bool)" (?DXUTAllowShortcutKeys@@YAX_N@Z) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__MessageBoxW@16 외부 기호(참조 위치: "void __cdecl DXUTDisplayErrorMessage(long)" (?DXUTDisplayErrorMessage@@YAXJ@Z) 함수)에서 확인하지 못했습니다.
DxErr9.lib(dxerr9.obj) : error LNK2001: __imp__MessageBoxW@16 외부 기호를 확인할 수 없습니다.
DXUT.obj : error LNK2019: __imp__GetSystemMetrics@4 외부 기호(참조 위치: "void __cdecl DXUTDisplayErrorMessage(long)" (?DXUTDisplayErrorMessage@@YAXJ@Z) 함수)에서 확인하지 못했습니다.
DXUTmisc.obj : error LNK2001: __imp__GetSystemMetrics@4 외부 기호를 확인할 수 없습니다.
DXUT.obj : error LNK2019: __imp__GetClassLongW@8 외부 기호(참조 위치: "void __cdecl DXUTSetupCursor(void)" (?DXUTSetupCursor@@YAXXZ) 함수)에서 확인하지 못했습니다.
DXUT.obj : error LNK2019: __imp__GetAsyncKeyState@4 외부 기호(참조 위치: "bool __stdcall DXUTIsKeyDown(unsigned char)" (?DXUTIsKeyDown@@YG_NE@Z) 함수)에서 확인하지 못했습니다.
DXUTmisc.obj : error LNK2019: __imp__SystemParametersInfoA@16 외부 기호(참조 위치: "int __stdcall DXUTGetMonitorInfo(struct HMONITOR__ *,struct tagMONITORINFO *)" (?DXUTGetMonitorInfo@@YGHPAUHMONITOR__@@PAUtagMONITORINFO@@@Z) 함수)에서 확인하지 못했습니다.
DXUTmisc.obj : error LNK2019: __imp__EnumDisplaySettingsW@12 외부 기호(참조 위치: "void __stdcall DXUTGetDesktopResolution(unsigned int,unsigned int *,unsigned int *)" (?DXUTGetDesktopResolution@@YGXIPAI0@Z) 함수)에서 확인하지 못했습니다.
DxErr9.lib(dxerr9.obj) : error LNK2019: __imp__GetForegroundWindow@0 외부 기호(참조 위치: _DXTraceW@20 함수)에서 확인하지 못했습니다.
DxErr9.lib(dxerr9.obj) : error LNK2019: __imp__MessageBoxA@16 외부 기호(참조 위치: _DXTraceA@20 함수)에서 확인하지 못했습니다.
C:\direct3d\dxut_test\Debug\dxut_test.exe : fatal error LNK1120: 49개의 확인할 수 없는 외부 참조입니다.
#pragma comment(lib, "user32.lib")
'Graphics Note' 카테고리의 다른 글
[Mathematics] quaternion(사원수) (1) | 2013.07.10 |
---|---|
[Mathematics] matrices for transformation (0) | 2013.07.09 |
[Mathematics] complex number (5) | 2013.07.01 |
유리같은 셰이딩 (0) | 2013.06.25 |
[OpenGL]Model from .ASE (0) | 2012.12.12 |