[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Windows Installer files\n*.cab\n*.msi\n*.msm\n*.msp\n\n# Windows shortcuts\n*.lnk\n\n# =========================\n# Operating System Files\n# =========================\n\n# OSX\n# =========================\n\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Thumbnails\n._*\n\n# Files that might appear on external disk\n.Spotlight-V100\n.Trashes\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo0/D3DdemoCore.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :D3DdemoCore\n//\t 20134 Create by ǳī\n//  Direct3DĺĿ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Direct3DĺĿ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t//COMԴԼԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼ\n\tDirect3D_Init (hwnd);   \n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\n\n\tPlaySound(L\"War3XMainScreen.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\tMessageBox(hwnd, L\"DirectXưɣ~!\", L\"ǳīϢ\", 0); //ʹMessageBoxʾһϢ\n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t if(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Render( )--------------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//ʱΪգ»طֽ\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ʱΪգ»طֽ\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo1/D3Ddemo1.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo1\n//\t 20134 Create by ǳī\n//  Direct3DʼĲ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Direct3DʼĲ ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9       g_pd3dDevice = NULL; //Direct3D豸\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t//COMԴԼԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼɹʧܶmessageboxʾ\n\tif (S_OK==Direct3D_Init (hwnd))\n\t{\n\t\tMessageBox(hwnd, L\"Direct3Dʼ~\", L\"ǳīϢ\", 0); //ʹMessageBoxһϢ  \n\t}\n\telse\n\t{\n\t\tMessageBox(hwnd, L\"Direct3Dʼʧ~\", L\"ǳīϢ\", 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\n\tPlaySound(L\"NightElf3.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\n\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Render( )--------------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//ʱΪգ»طֽ\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ʱΪգ»طֽ\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo10/D3DUtil.h",
    "content": "\n//=============================================================================\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo10/D3Ddemo10.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo10\n//\t 20134 Create by ǳī\n//  Ϊάʣӳ ʾ֮һ\n//  ͼ꼰ͼƬزģ ɽǰ \n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿Ϊάʣӳ ʾ֮һ\") //Ϊڱⶨĺ\n\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                     \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputͷļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//--------------------------------------------------------------------------------------\n// Ĳ֮һĶ\t\n//--------------------------------------------------------------------------------------\nstruct CUSTOMVERTEX \n{\n\tFLOAT _x, _y, _z;               // λ\n\tFLOAT _u, _v;                   // \n\tCUSTOMVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v)\n\t\t: _x(x), _y(y), _z(z), _u(u), _v(v) {}\n};\n#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nLPDIRECT3DVERTEXBUFFER9\t\tg_pVertexBuffer = NULL;    //㻺\nLPDIRECT3DINDEXBUFFER9\t\tg_pIndexBuffer  = NULL;    // \nLPDIRECT3DTEXTURE9\t\t\t\tg_pTexture   = NULL;    // ӿڶ\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); //ǰ̨Ƕռģʽ\n\tPlaySound(L\"쥹ˮ_.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);\t\t\t//øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\twchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\tD3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\tpD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\tint len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\tMultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\twcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\twcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\t//--------------------------------------------------------------------------------------\n\t// 㻺\n\t//--------------------------------------------------------------------------------------\n\t//㻺\n\tif( FAILED( g_pd3dDevice->CreateVertexBuffer( 24*sizeof(CUSTOMVERTEX),\n\t\t0, D3DFVF_CUSTOMVERTEX,\n\t\tD3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\t// \n\tif( FAILED( \tg_pd3dDevice->CreateIndexBuffer(36* sizeof(WORD), 0, \n\t\tD3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuffer, NULL)) )\n\t{\n\t\treturn E_FAIL;\n\n\t}\n\t//--------------------------------------------------------------------------------------\n\t// Ĳ֮ķ\t\n\t//--------------------------------------------------------------------------------------\n\t//䶥㻺\n\tCUSTOMVERTEX* pVertices;\n\tif( FAILED( g_pVertexBuffer->Lock( 0, 24*sizeof(CUSTOMVERTEX), (void**)&pVertices, 0 ) ) )\n\t\treturn E_FAIL;\n\n\t// 涥\n\tpVertices[0] = CUSTOMVERTEX(-10.0f,  10.0f, -10.0f, 0.0f, 0.0f);\n\tpVertices[1] = CUSTOMVERTEX( 10.0f,  10.0f, -10.0f, 1.0f, 0.0f);\n\tpVertices[2] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 1.0f, 1.0f);\n\tpVertices[3] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 1.0f);\n\n\t// 涥\n\tpVertices[4] = CUSTOMVERTEX( 10.0f,  10.0f, 10.0f, 0.0f, 0.0f);\n\tpVertices[5] = CUSTOMVERTEX(-10.0f,  10.0f, 10.0f, 1.0f, 0.0f);\n\tpVertices[6] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 1.0f, 1.0f);\n\tpVertices[7] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 0.0f, 1.0f);\n\n\t// 涥\n\tpVertices[8]  = CUSTOMVERTEX(-10.0f, 10.0f,  10.0f, 0.0f, 0.0f);\n\tpVertices[9]  = CUSTOMVERTEX( 10.0f, 10.0f,  10.0f, 1.0f, 0.0f);\n\tpVertices[10] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 1.0f, 1.0f);\n\tpVertices[11] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 0.0f, 1.0f);\n\n\t// 涥\n\tpVertices[12] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 0.0f);\n\tpVertices[13] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 1.0f, 0.0f);\n\tpVertices[14] = CUSTOMVERTEX( 10.0f, -10.0f,  10.0f, 1.0f, 1.0f);\n\tpVertices[15] = CUSTOMVERTEX(-10.0f, -10.0f,  10.0f, 0.0f, 1.0f);\n\n\t// 涥\n\tpVertices[16] = CUSTOMVERTEX(-10.0f,  10.0f,  10.0f, 0.0f, 0.0f);\n\tpVertices[17] = CUSTOMVERTEX(-10.0f,  10.0f, -10.0f, 1.0f, 0.0f);\n\tpVertices[18] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 1.0f, 1.0f);\n\tpVertices[19] = CUSTOMVERTEX(-10.0f, -10.0f,  10.0f, 0.0f, 1.0f);\n\n\t// Ҳ涥\n\tpVertices[20] = CUSTOMVERTEX( 10.0f,  10.0f, -10.0f, 0.0f, 0.0f);\n\tpVertices[21] = CUSTOMVERTEX( 10.0f,  10.0f,  10.0f, 1.0f, 0.0f);\n\tpVertices[22] = CUSTOMVERTEX( 10.0f, -10.0f,  10.0f, 1.0f, 1.0f);\n\tpVertices[23] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 0.0f, 1.0f);\n\n\tg_pVertexBuffer->Unlock();\n\n\t// \n\tWORD *pIndices = NULL;\n\tg_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\n\t// \n\tpIndices[0] = 0; pIndices[1] = 1; pIndices[2] = 2;\n\tpIndices[3] = 0; pIndices[4] = 2; pIndices[5] = 3;\n\n\t// \n\tpIndices[6] = 4; pIndices[7]  = 5; pIndices[8]  = 6;\n\tpIndices[9] = 4; pIndices[10] = 6; pIndices[11] = 7;\n\n\t// \n\tpIndices[12] = 8; pIndices[13] =  9; pIndices[14] = 10;\n\tpIndices[15] = 8; pIndices[16] = 10; pIndices[17] = 11;\n\n\t// \n\tpIndices[18] = 12; pIndices[19] = 13; pIndices[20] = 14;\n\tpIndices[21] = 12; pIndices[22] = 14; pIndices[23] = 15;\n\n\t// \n\tpIndices[24] = 16; pIndices[25] = 17; pIndices[26] = 18;\n\tpIndices[27] = 16; pIndices[28] = 18; pIndices[29] = 19;\n\n\t// Ҳ\n\tpIndices[30] = 20; pIndices[31] = 21; pIndices[32] = 22;\n\tpIndices[33] = 20; pIndices[34] = 22; pIndices[35] = 23;\n\n\tg_pIndexBuffer->Unlock();\n\n\t//--------------------------------------------------------------------------------------\n\t// Ĳ֮Ĵ\n\t//--------------------------------------------------------------------------------------\n\tD3DXCreateTextureFromFile(g_pd3dDevice, L\"pal5q.jpg\", &g_pTexture);\n\n\t// ò\n\tD3DMATERIAL9 mtrl;\n\t::ZeroMemory(&mtrl, sizeof(mtrl));\n\tmtrl.Ambient  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tmtrl.Diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tmtrl.Specular = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tg_pd3dDevice->SetMaterial(&mtrl);\n\n\tD3DLIGHT9 light;  \n\t::ZeroMemory(&light, sizeof(light));  \n\tlight.Type          = D3DLIGHT_DIRECTIONAL;  \n\tlight.Ambient       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tlight.Specular      = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);  \n\tlight.Direction     = D3DXVECTOR3(1.0f, 1.0f, 0.0f);  \n\tg_pd3dDevice->SetLight(0, &light); //ùԴ  \n\tg_pd3dDevice->LightEnable(0, true);//ù  \n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);   //ʼ㷨\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\tg_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(36, 36, 36));   //һ» \n\n\treturn S_OK;\n}\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -50.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)WINDOW_WIDTH/WINDOW_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\t\t\t\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ȡϢӦģʽ\n\tif (g_pDInput->IsKeyDown(DIK_1))         // ּ1£ʵ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);\t\t\n\tif (g_pDInput->IsKeyDown(DIK_2))         // ּ2£߿\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = 0.0f, fPosZ = 0.0f;\n\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = D3DX_PI/6, fAngleY =D3DX_PI/6 ;\n\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n\tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\tg_matWorld = Rx * Ry * g_matWorld; //յ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//\n\n\tMatrix_Set();\n}\n\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100, 100, 100), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽƣö㻺ͼ\n\t//--------------------------------------------------------------------------------------\n\n\tg_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );//ѰļϢĶ㻺Ⱦˮ\n\tg_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );//ָʹõʽĺ\n\tg_pd3dDevice->SetIndices(g_pIndexBuffer);//\n\t//--------------------------------------------------------------------------------------\n\t// Ĳ֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->SetTexture(0, g_pTexture);  //\n\n\tg_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 24, 0, 12);//϶㻺ͼ\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.top = 30;\n\tstatic wchar_t strInfo[256] = {0};\n\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    1,2ּģʽ֮л \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\n}\n\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pVertexBuffer)\n\t\tSAFE_RELEASE(g_pIndexBuffer)\n\t\tSAFE_RELEASE(g_pTexture)\n\t\tSAFE_RELEASE(g_pTextAdaperName)\n\t\tSAFE_RELEASE(g_pTextHelper)\n\t\tSAFE_RELEASE(g_pTextInfor)\n\t\tSAFE_RELEASE(g_pTextFPS)\n\t\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo10/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo10/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo11/D3DUtil.h",
    "content": "\n//=============================================================================\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo11/D3Ddemo11.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo10\n//\t 20134 Create by ǳī\n//  Ϊάʣӳ ʾ֮\n//  ͼ꼰ͼƬزģ ɽǰ \n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿Ϊάʣӳ ʾ֮\") //Ϊڱⶨĺ\n\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                     \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputͷļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//--------------------------------------------------------------------------------------\n// Ĳ֮һĶ\t\n//--------------------------------------------------------------------------------------\nstruct CUSTOMVERTEX \n{\n\tFLOAT _x, _y, _z;               // λ\n\tFLOAT _u, _v;                   // \n\tCUSTOMVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v)\n\t\t: _x(x), _y(y), _z(z), _u(u), _v(v) {}\n};\n#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nLPDIRECT3DVERTEXBUFFER9\t\tg_pVertexBuffer = NULL;    //㻺\nLPDIRECT3DINDEXBUFFER9\t\tg_pIndexBuffer  = NULL;    // \nLPDIRECT3DTEXTURE9\t\t\t\tg_pMipTexture= NULL;    // ӿڶڽĴ\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); //ǰ̨Ƕռģʽ\n\tPlaySound(L\"ɽ̵깺.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);\t\t\t//øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\twchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\tD3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\tpD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\tint len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\tMultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\twcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\twcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\t//--------------------------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮㻺\n\t//--------------------------------------------------------------------------------------\n\t//㻺\n\tif( FAILED( g_pd3dDevice->CreateVertexBuffer( 24*sizeof(CUSTOMVERTEX),\n\t\t0, D3DFVF_CUSTOMVERTEX,\n\t\tD3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\t// \n\tif( FAILED( \tg_pd3dDevice->CreateIndexBuffer(36* sizeof(WORD), 0, \n\t\tD3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuffer, NULL)) )\n\t{\n\t\treturn E_FAIL;\n\n\t}\n\t//--------------------------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮ʶ㻺\n\t//--------------------------------------------------------------------------------------\n\t//--------------------------------------------------------------------------------------\n\t// Ĳ֮ķ\t\n\t//--------------------------------------------------------------------------------------\n\t//䶥㻺\n\tCUSTOMVERTEX* pVertices;\n\tif( FAILED( g_pVertexBuffer->Lock( 0, sizeof(CUSTOMVERTEX), (void**)&pVertices, 0 ) ) )\n\t\treturn E_FAIL;\n\n\t// 涥\n\tpVertices[0] = CUSTOMVERTEX(-10.0f,  10.0f, -10.0f, 0.0f, 0.0f);\n\tpVertices[1] = CUSTOMVERTEX( 10.0f,  10.0f, -10.0f, 2.0f, 0.0f);\n\tpVertices[2] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 2.0f, 2.0f);\n\tpVertices[3] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 2.0f);\n\n\t// 涥\n\tpVertices[4] = CUSTOMVERTEX( 10.0f,  10.0f, 10.0f, 0.0f, 0.0f);\n\tpVertices[5] = CUSTOMVERTEX(-10.0f,  10.0f, 10.0f, 2.0f, 0.0f);\n\tpVertices[6] = CUSTOMVERTEX(-10.0f, -10.0f, 10.0f, 2.0f, 2.0f);\n\tpVertices[7] = CUSTOMVERTEX( 10.0f, -10.0f, 10.0f, 0.0f, 2.0f);\n\n\t// 涥\n\tpVertices[8]  = CUSTOMVERTEX(-10.0f, 10.0f,  10.0f, 0.0f, 0.0f);\n\tpVertices[9]  = CUSTOMVERTEX( 10.0f, 10.0f,  10.0f, 2.0f, 0.0f);\n\tpVertices[10] = CUSTOMVERTEX( 10.0f, 10.0f, -10.0f, 2.0f, 2.0f);\n\tpVertices[11] = CUSTOMVERTEX(-10.0f, 10.0f, -10.0f, 0.0f, 2.0f);\n\n\t// 涥\n\tpVertices[12] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 0.0f, 0.0f);\n\tpVertices[13] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 2.0f, 0.0f);\n\tpVertices[14] = CUSTOMVERTEX( 10.0f, -10.0f,  10.0f, 2.0f, 2.0f);\n\tpVertices[15] = CUSTOMVERTEX(-10.0f, -10.0f,  10.0f, 0.0f, 2.0f);\n\n\t// 涥\n\tpVertices[16] = CUSTOMVERTEX(-10.0f,  10.0f,  10.0f, 0.0f, 0.0f);\n\tpVertices[17] = CUSTOMVERTEX(-10.0f,  10.0f, -10.0f, 1.0f, 0.0f);\n\tpVertices[18] = CUSTOMVERTEX(-10.0f, -10.0f, -10.0f, 1.0f, 1.0f);\n\tpVertices[19] = CUSTOMVERTEX(-10.0f, -10.0f,  10.0f, 0.0f, 1.0f);\n\n\t// Ҳ涥\n\tpVertices[20] = CUSTOMVERTEX( 10.0f,  10.0f, -10.0f, 0.0f, 0.0f);\n\tpVertices[21] = CUSTOMVERTEX( 10.0f,  10.0f,  10.0f, 1.0f, 0.0f);\n\tpVertices[22] = CUSTOMVERTEX( 10.0f, -10.0f,  10.0f, 1.0f, 1.0f);\n\tpVertices[23] = CUSTOMVERTEX( 10.0f, -10.0f, -10.0f, 0.0f, 1.0f);\n\n\tg_pVertexBuffer->Unlock();\n\n\t// \n\tWORD *pIndices = NULL;\n\tg_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\n\t// \n\tpIndices[0] = 0; pIndices[1] = 1; pIndices[2] = 2;\n\tpIndices[3] = 0; pIndices[4] = 2; pIndices[5] = 3;\n\n\t// \n\tpIndices[6] = 4; pIndices[7]  = 5; pIndices[8]  = 6;\n\tpIndices[9] = 4; pIndices[10] = 6; pIndices[11] = 7;\n\n\t// \n\tpIndices[12] = 8; pIndices[13] =  9; pIndices[14] = 10;\n\tpIndices[15] = 8; pIndices[16] = 10; pIndices[17] = 11;\n\n\t// \n\tpIndices[18] = 12; pIndices[19] = 13; pIndices[20] = 14;\n\tpIndices[21] = 12; pIndices[22] = 14; pIndices[23] = 15;\n\n\t// \n\tpIndices[24] = 16; pIndices[25] = 17; pIndices[26] = 18;\n\tpIndices[27] = 16; pIndices[28] = 18; pIndices[29] = 19;\n\n\t// Ҳ\n\tpIndices[30] = 20; pIndices[31] = 21; pIndices[32] = 22;\n\tpIndices[33] = 20; pIndices[34] = 22; pIndices[35] = 23;\n\n\tg_pIndexBuffer->Unlock();\n\n\t//--------------------------------------------------------------------------------------\n\t// Ĳ֮Ĵ\n\t//--------------------------------------------------------------------------------------\n\t// \n\tD3DXCreateTextureFromFileEx(g_pd3dDevice, L\"pal5q.jpg\", 0, 0, 6, 0, D3DFMT_X8R8G8B8, \n\t\tD3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0xFF000000, 0, 0, &g_pMipTexture);\n\n\t// ò\n\tD3DMATERIAL9 mtrl;\n\t::ZeroMemory(&mtrl, sizeof(mtrl));\n\tmtrl.Ambient  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tmtrl.Diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tmtrl.Specular = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tg_pd3dDevice->SetMaterial(&mtrl);\n\n\t// ʼȾ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\tg_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f)); //û\n\n\t//Թ\n\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 3);\n\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);\n\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);\n\n\t//\n\t//\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);\n\t//\t \tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);\n\n\t// \n\t// \t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);\n\t// \t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);\n\n\t// \n\t// \t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);\n\t// \t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 16);\n\treturn S_OK;\n}\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -50.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)WINDOW_WIDTH/WINDOW_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\t\t\t\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\n\t// ݼ̰İ£ΪѰַʽ\n\tif (g_pDInput->IsKeyDown(DIK_1))  //1\n\t{\n\t\t// ظѰַģʽ\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);\n\t}\n\tif (g_pDInput->IsKeyDown(DIK_2)) //2\n\t{\n\t\t// þѰַģʽ\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);\n\t}\n\tif (g_pDInput->IsKeyDown(DIK_3)) //3\n\t{\n\t\t// üȡѰַģʽ\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);\n\t}\n\tif (g_pDInput->IsKeyDown(DIK_4)) //4\n\t{\n\t\t// ñ߿Ѱַģʽ\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);\n\t\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);\n\t}\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = 0.0f, fPosZ = 0.0f;\n\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = D3DX_PI/6, fAngleY =D3DX_PI/6 ;\n\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n\tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\tg_matWorld = Rx * Ry * g_matWorld; //յ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//\n\tMatrix_Set();\n}\n\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100, 100, 100), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽƣö㻺ͼ\n\t//--------------------------------------------------------------------------------------\n\n\tg_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );//ѰļϢĶ㻺Ⱦˮ\n\tg_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );//ָʹõʽĺ\n\tg_pd3dDevice->SetIndices(g_pIndexBuffer);//\n\t//--------------------------------------------------------------------------------------\n\t// Ĳ֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->SetTexture(0, g_pMipTexture);  //\n\n\tg_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 24, 0, 12);//϶㻺ͼ\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.top = 30;\n\tstatic wchar_t strInfo[256] = {0};\n\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    1,2,3,4ּѰַģʽ֮л \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\n}\n\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pVertexBuffer)\n\t\tSAFE_RELEASE(g_pIndexBuffer)\n\t\tSAFE_RELEASE(g_pMipTexture)\n\t\tSAFE_RELEASE(g_pTextAdaperName)\n\t\tSAFE_RELEASE(g_pTextHelper)\n\t\tSAFE_RELEASE(g_pTextInfor)\n\t\tSAFE_RELEASE(g_pTextFPS)\n\t\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo11/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo11/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo12/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo12/D3Ddemo12.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo12\n//\t 20134 Create by ǳī\n//  ģͺXļʹ ʾ\n//  ͼزģ ɽǰ \n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿  ģͺXļʹ ʾ\") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                    \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\nLPD3DXMESH\t\t\t\tg_pMesh     = NULL; // \nD3DMATERIAL9*\t\t\tg_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9*\tg_pTextures     = NULL; // Ϣ\nDWORD\t\t\t\t\t\tg_dwNumMtrls    = 0;    // ʵĿ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); //ǰ̨Ƕռģʽ\n\tPlaySound(L\"ɽ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);\t\t\t//øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"miki.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t// ù\n\tD3DLIGHT9 light;\n\t::ZeroMemory(&light, sizeof(light));\n\tlight.Type          = D3DLIGHT_DIRECTIONAL;\n\tlight.Ambient       = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);\n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tlight.Specular      = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);\n\tlight.Direction     = D3DXVECTOR3(1.0f, 0.0f, 1.0f);\n\tg_pd3dDevice->SetLight(0, &light);\n\tg_pd3dDevice->LightEnable(0, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -250.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)WINDOW_WIDTH/WINDOW_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\t\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = 0.0f, fPosZ = 0.0f;\n\t\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = 0, fAngleY =0;\n\t\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n \tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\tg_matWorld = Rx * Ry * g_matWorld;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);\n\tMatrix_Set();\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(150, 150, 100), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t\t\t//--------------------------------------------------------------------------------------\n\t\t\t// Direct3DȾ岽֮ʽ\n\t\t\t//--------------------------------------------------------------------------------------\n\n\t// һforѭֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);\n\t\tg_pMesh->DrawSubset(i);\n\t}\n\n\t\t\t//ڴϽǴʾÿ֡\n\t\t\tformatRect.top = 5;\n\t\t\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\t\t\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t\t\t//ʾԿ\n\t\t\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\t\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t\t\t// Ϣ\n\t\t\t formatRect.top = 30;\n\t\t\tstatic wchar_t strInfo[256] = {0};\n\t\t\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\t\t\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t\t\t// Ϣ\n\t\t\tformatRect.left = 0,formatRect.top = 380;\n\t\t\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\t\t\tformatRect.top += 35;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo12/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo12/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo13/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo13/D3Ddemo13.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo13\n//\t 20134 Create by ǳī\n//  ˮ齻ڵalphaϼ ʾ\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define SCREEN_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define SCREEN_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿  ˮ齻ڵalphaϼ ʾ\") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                      \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\nLPD3DXMESH\t\t\t\tg_pMesh     = NULL; // \nD3DMATERIAL9*\t\t\tg_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9*  g_pTextures     = NULL; // Ϣ\nDWORD\t\t\t\t\t\tg_dwNumMtrls    = 0;    // ʵĿ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//ʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, SCREEN_WIDTH,\n\t\tSCREEN_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\"ɽ¥.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\tMoveWindow(hwnd,200,50,SCREEN_WIDTH,SCREEN_HEIGHT,true);   //ʾʱλãϽλĻ꣨20050\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = SCREEN_WIDTH;\n\td3dpp.BackBufferHeight           = SCREEN_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"65.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\t//g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\tg_pMaterials[i].Diffuse.a = 0.3f;//òʵAlpha\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\t//ע͵룬ḁ́ʵAlphaͨϳĻ\n\t\t//D3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t// ù\n\tD3DLIGHT9 light;\n\t::ZeroMemory(&light, sizeof(light));\n\tlight.Type          = D3DLIGHT_DIRECTIONAL;\n\tlight.Ambient       = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);\n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tlight.Specular      = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);\n\tlight.Direction     = D3DXVECTOR3(1.0f, 0.0f, 1.0f);\n\tg_pd3dDevice->SetLight(0, &light);\n\tg_pd3dDevice->LightEnable(0, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\tg_pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS);   //ȲԺΪD3DCMP_LESS\n\tg_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, true);     //ȲԳɹ󣬸Ȼ\n\n\n\t// ֮һAlphaں\n\tg_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);\n\t//֮ں\n\tg_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);\n\tg_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);\n\t//֮ں㷽ʽ\n\tg_pd3dDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);  //㷽ʽΪD3DBLENDOP_ADDĴDirect3DĬΪдˣע͵Ҳû\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 100.0f, -200.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 35.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)SCREEN_WIDTH/SCREEN_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = SCREEN_WIDTH;\t//ӿڵĿ\n\tvp.Height = SCREEN_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\t\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n//ͨİAlphaֵı仯\n\tif (g_pDInput->IsKeyDown(DIK_1))  //1\n\t{\n\t\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t\t{\n\t\t\tg_pMaterials[i].Diffuse.a+= 0.001f;\n\t\t}\n\t}\n\n\tif (g_pDInput->IsKeyDown(DIK_2)) //1\n\t{\n\t\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t\t{\n\t\t\tg_pMaterials[i].Diffuse.a-= 0.001f;\n\t\t}\n\t}\n\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = -50.0f, fPosZ = 0.0f;\n\t\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = 0, fAngleY =0;\n\t\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n \tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\tg_matWorld = Rx * Ry * g_matWorld;\n\n\tMatrix_Set();\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(160, 150, 150), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\n\n\t//3Dģ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\t\t\t//ڴϽǴʾÿ֡\n\t\t\tformatRect.top = 5;\n\t\t\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\t\t\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t\t\t//ʾԿ\n\t\t\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\t\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t\t\t// Ϣ\n\t\t\t formatRect.top = 30;\n\t\t\tstatic wchar_t strInfo[256] = {0};\n\t\t\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\t\t\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t\t\t// Ϣ\n\t\t\tformatRect.left = 0,formatRect.top = 380;\n\t\t\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\t\t\tformatRect.top += 35;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ּ12СʵAlphaֵ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo13/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo13/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo14/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo14/D3Ddemo14.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo13\n//\t 20134 Create by ǳī\n//  ˮ齻ڵalphaϼ ʾ\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿  ȲZ ʾ\") //Ϊڱⶨĺ\n\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                             \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\nLPD3DXMESH          g_pMesh     = NULL; // \nD3DMATERIAL9*       g_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9* g_pTextures     = NULL; // Ϣ\nDWORD               g_dwNumMtrls    = 0;    // ʵĿ\n\nLPD3DXMESH          g_pMeshWall     = NULL; // ǽ\nD3DMATERIAL9        g_MaterialsWall;  // \n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//ʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\"A Watchful Guardian.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\t\n\n\tMoveWindow(hwnd,200,50,WINDOW_WIDTH,WINDOW_HEIGHT,true);   //ʾʱλãϽλĻ꣨20050\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"SwordMan.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t//D3DXCreateBoxһ\n\tD3DXCreateBox(g_pd3dDevice, 30.0f, 30.0f, 0.5f, &g_pMeshWall, NULL);\n\tg_MaterialsWall.Ambient  = D3DXCOLOR(0.8f, 0.2f, 0.1f, 1.0f);\n\tg_MaterialsWall.Diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tg_MaterialsWall.Specular = D3DXCOLOR(0.1f, 0.1f, 0.1f, 1.0f);\n\n\t// ù\n\tD3DLIGHT9 light;\n\t::ZeroMemory(&light, sizeof(light));\n\tlight.Type          = D3DLIGHT_DIRECTIONAL;\n\tlight.Ambient       = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);\n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tlight.Specular      = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);\n\tlight.Direction     = D3DXVECTOR3(1.0f, 0.0f, 1.0f);\n\tg_pd3dDevice->SetLight(0, &light);\n\tg_pd3dDevice->LightEnable(0, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\tg_pd3dDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS);   //ȲԺΪD3DCMP_LESS\n\tg_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, true);     //ȲԳɹ󣬸Ȼ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -150.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)WINDOW_WIDTH/WINDOW_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ߹رȲ\n\tif (g_pDInput->IsKeyDown(DIK_1))  //1Ȳ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_ZENABLE, true);\n\tif (g_pDInput->IsKeyDown(DIK_2))  //2رȲ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);\n\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = -50.0f, fPosZ = 0.0f;\n\t\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = 0, fAngleY =0;\n\t\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n \tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\tg_matWorld = Rx * Ry * g_matWorld;\n\n\tMatrix_Set();\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(160, 100, 150), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\n\n\t//3Dģ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\t// ǽ\n\tD3DXMATRIX matWorld;   //һΪ׼Ϊǽ\t\n\tD3DXMatrixTranslation(&matWorld, 0.0f,0.0f,-50.0f);//ǽʼZΪ-50.0f\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);//ǽ\n\tg_pd3dDevice->SetMaterial(&g_MaterialsWall);//ò\n\tg_pMeshWall->DrawSubset(0); //ǽ\n\n\n\t\t\t//ڴϽǴʾÿ֡\n\t\t\tformatRect.top = 5;\n\t\t\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\t\t\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t\t\t//ʾԿ\n\t\t\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\t\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t\t\t// Ϣ\n\t\t\t formatRect.top = 30;\n\t\t\tstatic wchar_t strInfo[256] = {0};\n\t\t\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\t\t\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t\t\t// Ϣ\n\t\t\tformatRect.left = 0,formatRect.top = 380;\n\t\t\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\t\t\tformatRect.top += 35;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ּ12߹رȲ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pMeshWall);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo14/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo14/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo15/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo15/D3Ddemo15.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo15\n//\t 20134 Create by ǳī\n//  ʵϵĹӰ : ģ弼 ʾ\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define SCREEN_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define SCREEN_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿 ʵϵĹӰ : ģ弼  ʾ\") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                         \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\nLPD3DXMESH          g_pMesh     = NULL; // \nD3DMATERIAL9*       g_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9* g_pTextures     = NULL; // Ϣ\nDWORD               g_dwNumMtrls    = 0;    // ʵĿ\n\nLPD3DXMESH          g_pMeshWall     = NULL; // ǽ\nD3DMATERIAL9        g_MaterialsWall;  // \n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//ʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, SCREEN_WIDTH,\n\t\tSCREEN_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\"ɽս3.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\t\n\n\tMoveWindow(hwnd,200,50,SCREEN_WIDTH,SCREEN_HEIGHT,true);   //ʾʱλãϽλĻ꣨20050\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = SCREEN_WIDTH;\n\td3dpp.BackBufferHeight           = SCREEN_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"lighting.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t//D3DXCreateBoxһľ\n\tD3DXCreateBox(g_pd3dDevice, 120.0f, 120.0f, 0.3f, &g_pMeshWall, NULL);\n\tg_MaterialsWall.Ambient  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tg_MaterialsWall.Diffuse  = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tg_MaterialsWall.Specular = D3DXCOLOR(0.2f, 1.0f, 1.0f, 1.0f);\n\n\n\t// ù\n\tD3DLIGHT9 light;\n\t::ZeroMemory(&light, sizeof(light));\n\tlight.Type          = D3DLIGHT_DIRECTIONAL;\n\tlight.Ambient       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tlight.Specular      = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\tlight.Direction     = D3DXVECTOR3(1.0f, 1.0f, 1.0f);\n\tg_pd3dDevice->SetLight(0, &light);\n\tg_pd3dDevice->LightEnable(0, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(100.0f, 0.0f, -250.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)SCREEN_WIDTH/SCREEN_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = SCREEN_WIDTH;\t//ӿڵĿ\n\tvp.Height = SCREEN_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ߹رȲ\n\tif (g_pDInput->IsKeyDown(DIK_1))  //1Ȳ\n \t\tg_pd3dDevice->SetRenderState(D3DRS_ZENABLE, true);\n\tif (g_pDInput->IsKeyDown(DIK_2))  //2رȲ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);\n\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = -1.5f, fPosZ = 0.0f;\n\t\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = 0, fAngleY =0;\n\t\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n \tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.05f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.05f;\n \tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.05f;\n \tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.05f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\tg_matWorld = Rx * Ry * g_matWorld;\n\n\tMatrix_Set();\n}\n\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(100, 150, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\n\tD3DXMATRIX matHero,matWorld,matRotation;   //һЩ\t\n\n\n\t//3Dģ\n\tD3DXMatrixTranslation(&matHero, -20.0f, 0.0f, -25.0f);\n\tmatHero=matHero*g_matWorld;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matHero);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\n\t// Ƴ\n\tD3DXMatrixTranslation(&matWorld, 0.0f,0.0f,0.0f);//ǽʼ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);//ǽ\n\tg_pd3dDevice->SetMaterial(&g_MaterialsWall);//ò\n\tg_pMeshWall->DrawSubset(0); //ǽ\n\n\n\t//3. ģ建棬ԼصĻ״̬á\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,    true);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILFUNC,      D3DCMP_ALWAYS);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILREF,       0x1);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILMASK,      0xffffffff);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xffffffff);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILPASS,      D3DSTENCILOP_REPLACE);\n\n\t// 4.ںϲԼֹȻͺ̨д\n\tg_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,     false);\n\tg_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,         D3DBLEND_ZERO);\n\tg_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,        D3DBLEND_ONE);\n\n\t// 5.ƳΪ\n\tD3DXMatrixTranslation(&matWorld, 0.0f, 0.0f, 0.0f);\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);\n\tg_pd3dDevice->SetMaterial(&g_MaterialsWall);\n\tg_pMeshWall->DrawSubset(0);\n\n\t// 6.һϵȾ״̬뾵ں㣬һZ\n\tg_pd3dDevice->Clear(0, 0, D3DCLEAR_ZBUFFER, 0, 1.0f, 0);\n\tg_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,     true);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILFUNC,      D3DCMP_EQUAL);\n\tg_pd3dDevice->SetRenderState(D3DRS_STENCILPASS,      D3DSTENCILOP_KEEP);\n\tg_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,         D3DBLEND_DESTCOLOR);\n\tg_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,        D3DBLEND_ZERO);\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE,         D3DCULL_CW);\n\n\t//7. 㾵任\n\tD3DXMATRIX matReflect;\n\tD3DXPLANE planeXY(0.0f, 0.0f, 1.0f, 0.0f); // xyƽ\n\tD3DXMatrixReflect(&matReflect, &planeXY);\n\tmatWorld =  matReflect * matHero;\n\n\n\t//8.ƾе3Dģ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\n\t// 9.ָȾ״̬\n \tg_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);\n \tg_pd3dDevice->SetRenderState( D3DRS_STENCILENABLE,   false);\n \tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE,         D3DCULL_CCW);\n\n\n\t\t\t//ڴϽǴʾÿ֡\n\t\t\tformatRect.top = 5;\n\t\t\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\t\t\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t\t\t//ʾԿ\n\t\t\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\t\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t\t\t// Ϣ\n\t\t\t formatRect.top = 30;\n\t\t\tstatic wchar_t strInfo[256] = {0};\n\t\t\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", matHero._41, matHero._42, matHero._43);\n\t\t\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t\t\t// Ϣ\n\t\t\tformatRect.left = 0,formatRect.top = 380;\n\t\t\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\t\t\tformatRect.top += 35;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ּ12߹رȲ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pMeshWall);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo15/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo15/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo16/CameraClass.cpp",
    "content": "//=============================================================================\n// Name: CameraClass.cpp\n//\tDes: һװʵԴļ\n// 2013 310  Create by ǳī \n//=============================================================================\n#include \"CameraClass.h\"\n\n#ifndef WINDOW_WIDTH\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#endif\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nCameraClass::CameraClass(IDirect3DDevice9 *pd3dDevice)\n{\n    m_pd3dDevice = pd3dDevice;\n    m_vRightVector  = D3DXVECTOR3(1.0f, 0.0f, 0.0f);   // ĬXغ\n    m_vUpVector     = D3DXVECTOR3(0.0f, 1.0f, 0.0f);   // ĬYغ\n    m_vLookVector   = D3DXVECTOR3(0.0f, 0.0f, 1.0f);   // ĬϹ۲Zغ\n    m_vCameraPosition  = D3DXVECTOR3(0.0f, 0.0f, -250.0f);   // ĬΪ(0.0f, 0.0f, -250.0f)\n    m_vTargetPosition    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);//ĬϹ۲ĿλΪ(0.0f, 0.0f, 0.0f);\n\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::CalculateViewMatrix( )\n// Desc: ݸľȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::CalculateViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//1.Ȱ3淶ʹ໥ֱΪһ\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);  //淶۲\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);    // ۲ֱ\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);                // 淶\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);    // ֱ\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);          // 淶\n\n\n    // 2.ȡ任\n\t//дȡ任ĵһ\n    pMatrix->_11 = m_vRightVector.x;           // Rx\n    pMatrix->_12 = m_vUpVector.x;              // Ux\n    pMatrix->_13 = m_vLookVector.x;            // Lx\n    pMatrix->_14 = 0.0f;\n\t//дȡ任ĵڶ\n    pMatrix->_21 = m_vRightVector.y;           // Ry\n    pMatrix->_22 = m_vUpVector.y;              // Uy\n    pMatrix->_23 = m_vLookVector.y;            // Ly\n    pMatrix->_24 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_31 = m_vRightVector.z;           // Rz\n    pMatrix->_32 = m_vUpVector.z;              // Uz\n    pMatrix->_33 = m_vLookVector.z;            // Lz\n    pMatrix->_34 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_41 = -D3DXVec3Dot(&m_vRightVector, &m_vCameraPosition);    // -P*R\n    pMatrix->_42 = -D3DXVec3Dot(&m_vUpVector, &m_vCameraPosition);       // -P*U\n    pMatrix->_43 = -D3DXVec3Dot(&m_vLookVector, &m_vCameraPosition);     // -P*L\n    pMatrix->_44 = 1.0f;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetTargetPosition( )\n// Desc: Ĺ۲λ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetTargetPosition(D3DXVECTOR3 *pLookat) \n{\n\t//ȿpLookatǷΪĬֵNULL\n    if (pLookat != NULL)  m_vTargetPosition = (*pLookat);\n    else m_vTargetPosition = D3DXVECTOR3(0.0f, 0.0f, 1.0f);\n\n    m_vLookVector = m_vTargetPosition - m_vCameraPosition;//۲λüλãõ۲췽\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);//淶m_vLookVector\n\n\t//淶m_vUpVectorm_vRightVector\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetCameraPosition( )\n// Desc: ڵλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetCameraPosition(D3DXVECTOR3 *pVector) \n{\n    D3DXVECTOR3 V = D3DXVECTOR3(0.0f, 0.0f, -250.0f);\n    m_vCameraPosition = pVector ? (*pVector) : V;//ĿpVectorΪĻ\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//*pVectorֵm_vCameraPosition=*pVector\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//򷵻Vֵm_vCameraPosition=V\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetViewMatrix( )\n// Desc: ȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//pMatrixֵһж\n    if (pMatrix) m_matView = *pMatrix;\n    else CalculateViewMatrix(&m_matView);\n    m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);\n    //ȡ任ֱֵҷϷ͹۲\n    m_vRightVector = D3DXVECTOR3(m_matView._11, m_matView._12, m_matView._13);\n    m_vUpVector    = D3DXVECTOR3(m_matView._21, m_matView._22, m_matView._23);\n    m_vLookVector  = D3DXVECTOR3(m_matView._31, m_matView._32, m_matView._33);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetProjMatrix( )\n// Desc: ͶӰ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetProjMatrix(D3DXMATRIX *pMatrix) \n{\n\t//жֵûУûеĻͼһ\n    if (pMatrix != NULL) m_matProj = *pMatrix;\n    else D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, (float)((double)WINDOW_WIDTH/WINDOW_HEIGHT), 1.0f, 30000.0f);//ӽԶΪ30000.0fͲ¿Զ\n    m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProj);//ͶӰ任\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongRightVec( )\n// Desc: ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongRightVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vRightVector * fUnits;\n    m_vTargetPosition   += m_vRightVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongUpVec( )\n// Desc:  ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongUpVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vUpVector * fUnits;\n    m_vTargetPosition   += m_vUpVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongLookVec( )\n// Desc:  ع۲ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongLookVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vLookVector * fUnits;\n    m_vTargetPosition   += m_vLookVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationRightVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationRightVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vRightVector, fAngle);//m_vRightVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vRightVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vRightVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationUpVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationUpVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vUpVector, fAngle);//m_vUpVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vUpVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vUpVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationLookVec( )\n// Desc:  ع۲תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationLookVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vLookVector, fAngle);//m_vLookVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vLookVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vLookVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nCameraClass::~CameraClass(void)\n{\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo16/CameraClass.h",
    "content": "//=============================================================================\n// Name: CameraClass.h\n//\tDes: һװʵͷļ\n// 2013 310  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n\nclass CameraClass\n{\nprivate:\n\t//Ա\n    D3DXVECTOR3\t\t\t\tm_vRightVector;        // ҷ\n    D3DXVECTOR3\t\t\t\tm_vUpVector;           // Ϸ\n    D3DXVECTOR3\t\t\t\tm_vLookVector;         // ۲췽\n    D3DXVECTOR3\t\t\t\tm_vCameraPosition;        // λõ\n\tD3DXVECTOR3\t\t\t\tm_vTargetPosition;        //Ŀ۲λõ\n    D3DXMATRIX\t\t\t\tm_matView;          // ȡ任\n    D3DXMATRIX\t\t\t\tm_matProj;          // ͶӰ任   \n    LPDIRECT3DDEVICE9\t\tm_pd3dDevice;  //Direct3D豸\n\npublic:\n\t//һȡ任ĺ\n    VOID CalculateViewMatrix(D3DXMATRIX *pMatrix);    //ȡ任\n\n\t//Getϵк\n    VOID GetProjMatrix(D3DXMATRIX *pMatrix)  { *pMatrix = m_matProj; }  //صǰͶӰ\n    VOID GetCameraPosition(D3DXVECTOR3 *pVector)  { *pVector = m_vCameraPosition; } //صǰλþ\n    VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVector; }  //صǰĹ۲\n\n\t//ĸSetϵкעǶĬֵNULLģʱдҲ\n    VOID SetTargetPosition(D3DXVECTOR3 *pLookat = NULL);  //Ŀ۲λ\n    VOID SetCameraPosition(D3DXVECTOR3 *pVector = NULL); //ڵλ\n    VOID SetViewMatrix(D3DXMATRIX *pMatrix = NULL);  //ȡ任\n    VOID SetProjMatrix(D3DXMATRIX *pMatrix = NULL);  //ͶӰ任\n\npublic:\n    // ظƽƵ\n    VOID MoveAlongRightVec(FLOAT fUnits);   // rightƶ\n    VOID MoveAlongUpVec(FLOAT fUnits);      // upƶ\n    VOID MoveAlongLookVec(FLOAT fUnits);    // lookƶ\n\n    // Ƹת\n    VOID RotationRightVec(FLOAT fAngle);    // rightѡ\n    VOID RotationUpVec(FLOAT fAngle);       // upת\n    VOID RotationLookVec(FLOAT fAngle);     // lookת\n\npublic:\n\t//캯\n\tCameraClass(IDirect3DDevice9 *pd3dDevice);  //캯\n\tvirtual ~CameraClass(void);  //\n\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo16/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo16/D3Ddemo16.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo16\n//\t 20134 Create by ǳī\n//  άռ䣺һ˳ʵ ʾ\n//  ͼزĳ ħ3 Dota\n//  زĳ-\n//  ģزĳ˫6 Ԫ  ư\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿 άռ䣺һ˳ʵ\") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                     \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n#include \"CameraClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------  \n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//嶥ṹ\nstruct CUSTOMVERTEX\n{\n\tFLOAT _x,  _y,  _z;\n\tFLOAT _nx, _ny, _nz;\n\tFLOAT _u,  _v;\n\tCUSTOMVERTEX(FLOAT x, FLOAT y, FLOAT z, \n\t\tFLOAT nx, FLOAT ny, FLOAT nz, FLOAT u, FLOAT v)\n\t{\n\t\t_x  = x,  _y  = y,  _z  = z;\n\t\t_nx = nx, _ny = ny, _nz = nz;\n\t\t_u  = u,  _v  = v;\n\t}\n};\n#define D3DFVF_CUSTOMVERTEX  (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\nCameraClass*\t\t\t\t\t\t\tg_pCamera  = NULL;\nLPD3DXMESH\t\t\t\t\t\t\tg_pMesh     = NULL; // \nD3DMATERIAL9*\t\t\t\t\t\tg_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9*\t\t\t\tg_pTextures     = NULL; // Ϣ\nDWORD\t\t\t\t\t\t\t\t\tg_dwNumMtrls    = 0;    // ʵĿ\nLPD3DXMESH\t\t\t\t\t\t\tg_cylinder = NULL;     //\nD3DMATERIAL9\t\t\t\t\t\t\tg_MaterialCylinder; //\nLPDIRECT3DVERTEXBUFFER9\t\tg_pVertexBuffer           = NULL;  //ƲݵصĶ㻺\nLPDIRECT3DTEXTURE9\t\t\t\tg_pTexture             = NULL;  //Ʋݵص\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tHelpText_Render(HWND hwnd);\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//ʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\" - .wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\t\n\n\tMoveWindow(hwnd,200,10,WINDOW_WIDTH,WINDOW_HEIGHT,true);   //ʾʱλãϽλĻ꣨20010\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"WYJ.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t// һƬƺ,50X50=250\n\tg_pd3dDevice->CreateVertexBuffer(4 * sizeof(CUSTOMVERTEX), 0, \n\tD3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &g_pVertexBuffer, 0);\n\n\tCUSTOMVERTEX *pVertices = NULL;\n\tg_pVertexBuffer->Lock(0, 0, (void**)&pVertices, 0);\n\tpVertices[0] = CUSTOMVERTEX(-500.0f, 0.0f, -500.0f, 0.0f, 1.0f, 0.0f, 0.0f, 50.0f);\n\tpVertices[1] = CUSTOMVERTEX(-500.0f, 0.0f,  500.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f);\n\tpVertices[2] = CUSTOMVERTEX( 500.0f, 0.0f, -500.0f, 0.0f, 1.0f, 0.0f, 50.0f, 50.0f);\n\tpVertices[3] = CUSTOMVERTEX( 500.0f, 0.0f,  500.0f, 0.0f, 1.0f, 0.0f, 50.0f, 0.0f);\n\tg_pVertexBuffer->Unlock();\n\n\t// ذ\n\tD3DXCreateTextureFromFile(g_pd3dDevice, L\"grass.jpg\", &g_pTexture);\n\n\t//\n\tD3DXCreateCylinder(g_pd3dDevice, 10.0f, 10.0f, 500.0f, 60, 60,  &g_cylinder, 0);\n\tg_MaterialCylinder.Ambient  = D3DXCOLOR(0.9f, 0.0f, 0.8f, 1.0f);  \n\tg_MaterialCylinder.Diffuse  = D3DXCOLOR(0.9f, 0.0f, 0.8f, 1.0f);  \n\tg_MaterialCylinder.Specular = D3DXCOLOR(0.9f, 0.2f, 0.9f, 0.9f);  \n\tg_MaterialCylinder.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.9f, 1.0f);\n\n\t// ù  \n\tD3DLIGHT9 light;  \n\t::ZeroMemory(&light, sizeof(light));  \n\tlight.Type          = D3DLIGHT_DIRECTIONAL;  \n\tlight.Ambient       = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f);  \n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tlight.Specular      = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);  \n\tlight.Direction     = D3DXVECTOR3(1.0f, 0.0f, 0.0f);  \n\tg_pd3dDevice->SetLight(0, &light);  \n\tg_pd3dDevice->LightEnable(0, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// ʼ\n\tg_pCamera = new CameraClass(g_pd3dDevice);\n\tg_pCamera->SetCameraPosition(&D3DXVECTOR3(0.0f, 200.0f, -300.0f));  //ڵλ\n\tg_pCamera->SetTargetPosition(&D3DXVECTOR3(0.0f, 300.0f, 0.0f));  //Ŀ۲ڵλ\n\tg_pCamera->SetViewMatrix();  //ȡ任\n\tg_pCamera->SetProjMatrix();  //ͶӰ任\n\n\t// ˺Ѱַʽ\n\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);\n\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);\n\tg_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ƶӽ\n\tif (g_pDInput->IsKeyDown(DIK_A))  g_pCamera->MoveAlongRightVec(-0.3f);\n\tif (g_pDInput->IsKeyDown(DIK_D))  g_pCamera->MoveAlongRightVec( 0.3f);\n\tif (g_pDInput->IsKeyDown(DIK_W)) g_pCamera->MoveAlongLookVec( 0.3f);\n\tif (g_pDInput->IsKeyDown(DIK_S))  g_pCamera->MoveAlongLookVec(-0.3f);\n\tif (g_pDInput->IsKeyDown(DIK_R))  g_pCamera->MoveAlongUpVec( 0.3f);\n\tif (g_pDInput->IsKeyDown(DIK_F))  g_pCamera->MoveAlongUpVec(-0.3f);\n\n\t//תӽ\n\tif (g_pDInput->IsKeyDown(DIK_LEFT))  g_pCamera->RotationUpVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT))  g_pCamera->RotationUpVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_UP))  g_pCamera->RotationRightVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_DOWN))  g_pCamera->RotationRightVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_Q)) g_pCamera->RotationLookVec( 0.001f);\n\tif (g_pDInput->IsKeyDown(DIK_E)) g_pCamera->RotationLookVec(-0.001f);\n\n\n\t//ת\n\tg_pCamera->RotationUpVec(g_pDInput->MouseDX()* 0.001f);\n\tg_pCamera->RotationRightVec(g_pDInput->MouseDY() * 0.001f);\n\n\t//ֿƹ۲\n\tstatic FLOAT fPosZ=0.0f;\n\tfPosZ += g_pDInput->MouseDZ()*0.03f;\n\n\t//㲢ȡ任\n\tD3DXMATRIX matView;\n\tg_pCamera->CalculateViewMatrix(&matView);\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);\n\n\t//ȷ任浽g_matWorld\n\tD3DXMatrixTranslation(&g_matWorld, 0.0f, 0.0f, fPosZ);\n\n\t//δƶ\n\tPOINT lt,rb;\n\tRECT rect;\n\tGetClientRect(hwnd,&rect);  //ȡôڲ\n\t//ϵlt\n\tlt.x = rect.left;\n\tlt.y = rect.top;\n\t//rb\n\trb.x = rect.right;\n\trb.y = rect.bottom;\n\t//ltrbĴתΪĻ\n\tClientToScreen(hwnd,&lt);\n\tClientToScreen(hwnd,&rb);\n\t//Ļ趨\n\trect.left = lt.x;\n\trect.top = lt.y;\n\trect.right = rb.x;\n\trect.bottom = rb.y;\n\t//ƶ\n\tClipCursor(&rect);\n\n\tShowCursor(false);\t\t//\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(50, 100, 250), 1.0f, 0);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\n\t//\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\n\t// Ʋƺ\n\tD3DXMATRIX matWorld;\n\tD3DXMatrixTranslation(&matWorld, 0.0f, 0.0f, 0.0f);\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);\n\tg_pd3dDevice->SetTexture(0, g_pTexture);\n\tg_pd3dDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX));\n\tg_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);\n\tg_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);\n\t\n\t//\n\tD3DXMATRIX TransMatrix, RotMatrix, FinalMatrix;\n\tD3DXMatrixRotationX(&RotMatrix, -D3DX_PI * 0.5f);\n\tg_pd3dDevice->SetMaterial(&g_MaterialCylinder);\n\tfor(int i = 0; i < 6; i++)\n\t{\n\t\tD3DXMatrixTranslation(&TransMatrix, -100.0f, 0.0f, -150.0f + (i * 75.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\n\t\tD3DXMatrixTranslation(&TransMatrix, 100.0f, 0.0f, -150.0f + (i * 75.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\t}\n\n\tHelpText_Render(hwnd);\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n//-----------------------------------HelpText_Render( )-------------------------------\n//\tװ˰Ϣĺ\n//--------------------------------------------------------------------------------------------------\nvoid HelpText_Render(HWND hwnd)\n{\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//ڴϽǴʾÿ֡\n\tformatRect.top = 5;\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    Wǰ     S \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    A     Dҷ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    RֱϷ     Fֱ·\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    Qб       Eб\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷƶӽǱ仯 \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"     ֣ģY᷽ƶ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_cylinder);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo16/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo16/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/CameraClass.cpp",
    "content": "//=============================================================================\n// Name: CameraClass.cpp\n//\tDes: һװʵԴļ\n// 2013 310  Create by ǳī \n//=============================================================================\n#include \"CameraClass.h\"\n\n#ifndef WINDOW_WIDTH\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#endif\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nCameraClass::CameraClass(IDirect3DDevice9 *pd3dDevice)\n{\n    m_pd3dDevice = pd3dDevice;\n    m_vRightVector  = D3DXVECTOR3(1.0f, 0.0f, 0.0f);   // ĬXغ\n    m_vUpVector     = D3DXVECTOR3(0.0f, 1.0f, 0.0f);   // ĬYغ\n    m_vLookVector   = D3DXVECTOR3(0.0f, 0.0f, 1.0f);   // ĬϹ۲Zغ\n    m_vCameraPosition  = D3DXVECTOR3(0.0f, 0.0f, -250.0f);   // ĬΪ(0.0f, 0.0f, -250.0f)\n    m_vTargetPosition    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);//ĬϹ۲ĿλΪ(0.0f, 0.0f, 0.0f);\n\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::CalculateViewMatrix( )\n// Desc: ݸľȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::CalculateViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//1.Ȱ3淶ʹ໥ֱΪһ\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);  //淶۲\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);    // ۲ֱ\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);                // 淶\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);    // ֱ\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);          // 淶\n\n\n    // 2.ȡ任\n\t//дȡ任ĵһ\n    pMatrix->_11 = m_vRightVector.x;           // Rx\n    pMatrix->_12 = m_vUpVector.x;              // Ux\n    pMatrix->_13 = m_vLookVector.x;            // Lx\n    pMatrix->_14 = 0.0f;\n\t//дȡ任ĵڶ\n    pMatrix->_21 = m_vRightVector.y;           // Ry\n    pMatrix->_22 = m_vUpVector.y;              // Uy\n    pMatrix->_23 = m_vLookVector.y;            // Ly\n    pMatrix->_24 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_31 = m_vRightVector.z;           // Rz\n    pMatrix->_32 = m_vUpVector.z;              // Uz\n    pMatrix->_33 = m_vLookVector.z;            // Lz\n    pMatrix->_34 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_41 = -D3DXVec3Dot(&m_vRightVector, &m_vCameraPosition);    // -P*R\n    pMatrix->_42 = -D3DXVec3Dot(&m_vUpVector, &m_vCameraPosition);       // -P*U\n    pMatrix->_43 = -D3DXVec3Dot(&m_vLookVector, &m_vCameraPosition);     // -P*L\n    pMatrix->_44 = 1.0f;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetTargetPosition( )\n// Desc: Ĺ۲λ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetTargetPosition(D3DXVECTOR3 *pLookat) \n{\n\t//ȿpLookatǷΪĬֵNULL\n    if (pLookat != NULL)  m_vTargetPosition = (*pLookat);\n    else m_vTargetPosition = D3DXVECTOR3(0.0f, 0.0f, 1.0f);\n\n    m_vLookVector = m_vTargetPosition - m_vCameraPosition;//۲λüλãõ۲췽\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);//淶m_vLookVector\n\n\t//淶m_vUpVectorm_vRightVector\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetCameraPosition( )\n// Desc: ڵλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetCameraPosition(D3DXVECTOR3 *pVector) \n{\n    D3DXVECTOR3 V = D3DXVECTOR3(0.0f, 0.0f, -250.0f);\n    m_vCameraPosition = pVector ? (*pVector) : V;//ĿpVectorΪĻ\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//*pVectorֵm_vCameraPosition=*pVector\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//򷵻Vֵm_vCameraPosition=V\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetViewMatrix( )\n// Desc: ȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//pMatrixֵһж\n    if (pMatrix) m_matView = *pMatrix;\n    else CalculateViewMatrix(&m_matView);\n    m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);\n    //ȡ任ֱֵҷϷ͹۲\n    m_vRightVector = D3DXVECTOR3(m_matView._11, m_matView._12, m_matView._13);\n    m_vUpVector    = D3DXVECTOR3(m_matView._21, m_matView._22, m_matView._23);\n    m_vLookVector  = D3DXVECTOR3(m_matView._31, m_matView._32, m_matView._33);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetProjMatrix( )\n// Desc: ͶӰ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetProjMatrix(D3DXMATRIX *pMatrix) \n{\n\t//жֵûУûеĻͼһ\n    if (pMatrix != NULL) m_matProj = *pMatrix;\n    else D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, (float)((double)WINDOW_WIDTH/WINDOW_HEIGHT), 1.0f, 300000.0f);//ӽԶΪ300000.0fͲ¿Զ\n    m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProj);//ͶӰ任\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongRightVec( )\n// Desc: ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongRightVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vRightVector * fUnits;\n    m_vTargetPosition   += m_vRightVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongUpVec( )\n// Desc:  ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongUpVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vUpVector * fUnits;\n    m_vTargetPosition   += m_vUpVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongLookVec( )\n// Desc:  ع۲ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongLookVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vLookVector * fUnits;\n    m_vTargetPosition   += m_vLookVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationRightVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationRightVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vRightVector, fAngle);//m_vRightVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vRightVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vRightVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationUpVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationUpVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vUpVector, fAngle);//m_vUpVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vUpVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vUpVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationLookVec( )\n// Desc:  ع۲תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationLookVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vLookVector, fAngle);//m_vLookVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vLookVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vLookVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nCameraClass::~CameraClass(void)\n{\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/CameraClass.h",
    "content": "//=============================================================================\n// Name: CameraClass.h\n//\tDes: һװʵͷļ\n// 2013 310  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n\nclass CameraClass\n{\nprivate:\n\t//Ա\n    D3DXVECTOR3\t\t\t\tm_vRightVector;        // ҷ\n    D3DXVECTOR3\t\t\t\tm_vUpVector;           // Ϸ\n    D3DXVECTOR3\t\t\t\tm_vLookVector;         // ۲췽\n    D3DXVECTOR3\t\t\t\tm_vCameraPosition;        // λõ\n\tD3DXVECTOR3\t\t\t\tm_vTargetPosition;        //Ŀ۲λõ\n    D3DXMATRIX\t\t\t\tm_matView;          // ȡ任\n    D3DXMATRIX\t\t\t\tm_matProj;          // ͶӰ任   \n    LPDIRECT3DDEVICE9\t\tm_pd3dDevice;  //Direct3D豸\n\npublic:\n\t//һȡ任ĺ\n    VOID CalculateViewMatrix(D3DXMATRIX *pMatrix);    //ȡ任\n\n\t//Getϵк\n    VOID GetProjMatrix(D3DXMATRIX *pMatrix)  { *pMatrix = m_matProj; }  //صǰͶӰ\n    VOID GetCameraPosition(D3DXVECTOR3 *pVector)  { *pVector = m_vCameraPosition; } //صǰλþ\n    VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVector; }  //صǰĹ۲\n\n\t//ĸSetϵкעǲĬֵNULLģʱдҲ\n    VOID SetTargetPosition(D3DXVECTOR3 *pLookat = NULL);  //Ŀ۲λ\n    VOID SetCameraPosition(D3DXVECTOR3 *pVector = NULL); //ڵλ\n    VOID SetViewMatrix(D3DXMATRIX *pMatrix = NULL);  //ȡ任\n    VOID SetProjMatrix(D3DXMATRIX *pMatrix = NULL);  //ͶӰ任\n\npublic:\n    // ظƽƵ\n    VOID MoveAlongRightVec(FLOAT fUnits);   // rightƶ\n    VOID MoveAlongUpVec(FLOAT fUnits);      // upƶ\n    VOID MoveAlongLookVec(FLOAT fUnits);    // lookƶ\n\n    // Ƹת\n    VOID RotationRightVec(FLOAT fAngle);    // rightѡ\n    VOID RotationUpVec(FLOAT fAngle);       // upת\n    VOID RotationLookVec(FLOAT fAngle);     // lookת\n\npublic:\n\t//캯\n\tCameraClass(IDirect3DDevice9 *pd3dDevice);  //캯\n\tvirtual ~CameraClass(void);  //\n\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/D3Ddemo17.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo17\n//\t 20134 Create by ǳī\n//  ع磺άϵͳʵ ʾ\n//\tزĳħ3 ҹս\n//  ģزĳν Ʒ\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t850\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿ع磺άϵͳʵ ʾ\") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                      \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n#include \"CameraClass.h\"\n#include \"TerrainClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------  \n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL;\t\t\t\t//Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS =NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor= NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50] ={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60] ={0};   //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;\t\t\t\t\t\t\t//\nLPD3DXMESH\t\t\t\t\t\t\tg_pMesh = NULL;\t\t\t\t// \nD3DMATERIAL9*\t\t\t\t\t\tg_pMaterials= NULL;\t\t\t// ĲϢ\nLPDIRECT3DTEXTURE9*\t\t\t\tg_pTextures = NULL;\t\t\t// Ϣ\nDWORD\t\t\t\t\t\t\t\t\tg_dwNumMtrls = 0;\t\t\t// ʵĿ\nLPD3DXMESH\t\t\t\t\t\t\tg_cylinder = NULL;\t\t\t\t//\nD3DMATERIAL9\t\t\t\t\t\t\tg_MaterialCylinder;\t\t\t\t//ӵĲ\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;\t\t\t\t//DInputClassָʵ\nCameraClass*\t\t\t\t\t\t\tg_pCamera = NULL;\t\t\t\t//ָʵ\nTerrainClass*\t\t\t\t\t\t\t\tg_pTerrain = NULL;\t\t//ָʵ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tHelpText_Render(HWND hwnd);\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//ʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\"NightElfX1.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\t\n\tMoveWindow(hwnd,200,10,WINDOW_WIDTH,WINDOW_HEIGHT,true);   //ʾʱλãϽλĻ꣨20010\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"bee.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\n\t//\n\tD3DXCreateCylinder(g_pd3dDevice, 8000.0f, 100.0f, 50000.0f, 60, 60,  &g_cylinder, 0);\n\tg_MaterialCylinder.Ambient  = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);  \n\tg_MaterialCylinder.Diffuse  = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);  \n\tg_MaterialCylinder.Specular = D3DXCOLOR(0.5f, 0.0f, 0.3f, 0.3f);  \n\tg_MaterialCylinder.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);\n\n\t// ù  \n\tD3DLIGHT9 light;  \n\t::ZeroMemory(&light, sizeof(light));  \n\tlight.Type          = D3DLIGHT_DIRECTIONAL;  \n\tlight.Ambient       = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f);  \n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tlight.Specular      = D3DXCOLOR(0.9f, 0.9f, 0.9f, 1.0f);  \n\tlight.Direction     = D3DXVECTOR3(1.0f, 1.0f, 1.0f);  \n\tg_pd3dDevice->SetLight(0, &light);  \n\tg_pd3dDevice->LightEnable(0, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// ʼ\n\tg_pCamera = new CameraClass(g_pd3dDevice);\n\tg_pCamera->SetCameraPosition(&D3DXVECTOR3(0.0f, 12000.0f, -30000.0f));  //ڵλ\n\tg_pCamera->SetTargetPosition(&D3DXVECTOR3(0.0f, 10000.0f, 0.0f));  //Ŀ۲ڵλ\n\tg_pCamera->SetViewMatrix();  //ȡ任\n\tg_pCamera->SetProjMatrix();  //ͶӰ任\n\n\t// ʼ\n\tg_pTerrain = new TerrainClass(g_pd3dDevice);   \n\tg_pTerrain->LoadTerrainFromFile(L\"heighmap.raw\", L\"green.jpg\");\t\t//ļظ߶ͼ\n\tg_pTerrain->InitTerrain(200, 200, 300.0f, 70.0f);  //ĸֱֵǶ࣬ϵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ƶӽ\n\tif (g_pDInput->IsKeyDown(DIK_A))  g_pCamera->MoveAlongRightVec(-10.0f);\n\tif (g_pDInput->IsKeyDown(DIK_D))  g_pCamera->MoveAlongRightVec( 10.0f);\n\tif (g_pDInput->IsKeyDown(DIK_W)) g_pCamera->MoveAlongLookVec( 10.0f);\n\tif (g_pDInput->IsKeyDown(DIK_S))  g_pCamera->MoveAlongLookVec(-10.0f);\n\tif (g_pDInput->IsKeyDown(DIK_R))  g_pCamera->MoveAlongUpVec( 10.0f);\n\tif (g_pDInput->IsKeyDown(DIK_F))  g_pCamera->MoveAlongUpVec(-10.0f);\n\n\t//תӽ\n\tif (g_pDInput->IsKeyDown(DIK_LEFT))  g_pCamera->RotationUpVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT))  g_pCamera->RotationUpVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_UP))  g_pCamera->RotationRightVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_DOWN))  g_pCamera->RotationRightVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_E)) g_pCamera->RotationLookVec( 0.001f);\n\tif (g_pDInput->IsKeyDown(DIK_Q)) g_pCamera->RotationLookVec(-0.001f);\n\t\n\n\t//ת\n\tg_pCamera->RotationUpVec(g_pDInput->MouseDX()* 0.001f);\n\tg_pCamera->RotationRightVec(g_pDInput->MouseDY() * 0.001f);\n\n\t//ֿƹ۲\n\tstatic FLOAT fPosZ=0.0f;\n\tfPosZ += g_pDInput->MouseDZ()*0.03f;\n\n\t//㲢ȡ任\n\tD3DXMATRIX matView;\n\tg_pCamera->CalculateViewMatrix(&matView);\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);\n\n\t//ȷ任浽g_matWorld\n\tD3DXMatrixTranslation(&g_matWorld, 0.0f, 0.0f, fPosZ);\n\n\t//δƶ\n\tPOINT lt,rb;\n\tRECT rect;\n\tGetClientRect(hwnd,&rect);  //ȡôڲ\n\t//ϵlt\n\tlt.x = rect.left;\n\tlt.y = rect.top;\n\t//rb\n\trb.x = rect.right;\n\trb.y = rect.bottom;\n\t//ltrbĴתΪĻ\n\tClientToScreen(hwnd,&lt);\n\tClientToScreen(hwnd,&rb);\n\t//Ļ趨\n\trect.left = lt.x;\n\trect.top = lt.y;\n\trect.right = rb.x;\n\trect.bottom = rb.y;\n\t//ƶ\n\tClipCursor(&rect);\n\n\tShowCursor(false);\t//\n}\n\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(0, 108, 255), 1.0f, 0);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\n\t//ƴƷ\n\tD3DXMATRIX mScal,mRot1,mRot2,mTrans,mFinal;   //һЩ׼ԴƷо任\n\tD3DXMatrixScaling(&mScal,20.0f,20.0f,20.0f);  \n\tD3DXMatrixTranslation(&mTrans,0,8000,0);\n\tD3DXMatrixRotationX(&mRot1, D3DX_PI/2); \n\tD3DXMatrixRotationY(&mRot2, D3DX_PI/2); \n\tmFinal=mScal*mRot1*mRot2*mTrans*g_matWorld;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\t//Ƶ\n\tg_pTerrain->RenderTerrain(&g_matWorld, false);  //ȾΣҵڶΪfalseʾȾε߿\n\t\n\t//\n\tD3DXMATRIX TransMatrix, RotMatrix, FinalMatrix;\n\tD3DXMatrixRotationX(&RotMatrix, -D3DX_PI * 0.5f);\n\tg_pd3dDevice->SetMaterial(&g_MaterialCylinder);\n\tfor(int i = 0; i < 4; i++)\n\t{\n\t\tD3DXMatrixTranslation(&TransMatrix, -10000.0f, 0.0f, -15000.0f + (i * 20000.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\n\t\tD3DXMatrixTranslation(&TransMatrix, 10000.0f, 0.0f, -15000.0f + (i * 20000.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\t}\n\n\t//Ϣ\n\tHelpText_Render(hwnd);\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------HelpText_Render( )-------------------------------\n//\tװ˰Ϣĺ\n//--------------------------------------------------------------------------------------------------\nvoid HelpText_Render(HWND hwnd)\n{\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//ڴϽǴʾÿ֡\n\tformatRect.top = 5;\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    Wǰ     S \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    A     Dҷ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    RֱϷ     Fֱ·\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    Qб       Eб\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷƶӽǱ仯 \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"     ֣ģY᷽ƶ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_cylinder);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\n\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/TerrainClass.cpp",
    "content": "//=============================================================================\n// Name: TerrainClass.cpp\n//\tDes: һװάϵͳԴļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#include \"TerrainClass.h\"\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nTerrainClass::TerrainClass(IDirect3DDevice9* pd3dDevice)\n{\n\t//Աֵ\n    m_pd3dDevice = pd3dDevice;\n    m_pTexture = NULL;\n    m_pIndexBuffer = NULL;\n    m_pVertexBuffer = NULL;\n    m_nCellsPerRow = 0;\n    m_nCellsPerCol = 0;\n    m_nVertsPerRow = 0;\n    m_nVertsPerCol = 0;\n    m_nNumVertices = 0;\n    m_fTerrainWidth = 0.0f;\n    m_fTerrainDepth = 0.0f;\n    m_fCellSpacing = 0.0f;\n    m_fHeightScale = 0.0f;\n}\n\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::LoadTerrainFromFile()\n// Desc: صθ߶ϢԼ\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile) \n{\n    // ļжȡ߶Ϣ\n    std::ifstream inFile;     \n    inFile.open(pRawFileName, std::ios::binary);   //öƵķʽļ\n\n    inFile.seekg(0,std::ios::end);\t\t\t\t\t\t\t//ļָƶļĩβ\n    std::vector<BYTE> inData(inFile.tellg());\t\t\t//ģ嶨һvector<BYTE>͵ıinDataʼֵΪǰλãС\n\n    inFile.seekg(std::ios::beg);\t\t\t\t\t\t\t\t//ļָƶļĿͷ׼ȡ߶Ϣ\n    inFile.read((char*)&inData[0], inData.size());\t//ؼһȡ߶Ϣ\n    inFile.close();\t\t\t\t\t\t\t\t\t\t\t\t\t//Թرļ\n\n    m_vHeightInfo.resize(inData.size());\t\t\t\t\t//m_vHeightInfoߴȡΪĳߴ\n\t//inDataеֵm_vHeightInfo\n    for (unsigned int i=0; i<inData.size(); i++)\t\t\n        m_vHeightInfo[i] = inData[i];\n\n    // ص\n    if (FAILED(D3DXCreateTextureFromFile(m_pd3dDevice, pTextureFile, &m_pTexture)))\n        return FALSE;\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::InitTerrain()\n// Desc: ʼεĸ߶, 䶥\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale) \n{\n    m_nCellsPerRow  = nRows;  //ÿеĵԪĿ\n    m_nCellsPerCol  = nCols;  //ÿеĵԪĿ\n    m_fCellSpacing  = fSpace;\t//Ԫļ\n    m_fHeightScale  = fScale; //߶ϵ\n    m_fTerrainWidth = nRows * fSpace;  //εĿ\n    m_fTerrainDepth = nCols * fSpace;  //ε\n    m_nVertsPerRow  = m_nCellsPerCol + 1;  //ÿеĶ\n    m_nVertsPerCol  = m_nCellsPerRow + 1; //ÿеĶ\n    m_nNumVertices  = m_nVertsPerRow * m_nVertsPerCol;  //\n\n    // ͨһforѭѵԭʼ߶ȳϵõźĸ߶\n    for(unsigned int i=0; i<m_vHeightInfo.size(); i++)\n        m_vHeightInfo[i] *= m_fHeightScale;\n\t//---------------------------------------------------------------\n    // εĶ\n\t//---------------------------------------------------------------\n\t//1㻺\n    if (FAILED(m_pd3dDevice->CreateVertexBuffer(m_nNumVertices * sizeof(TERRAINVERTEX), \n        D3DUSAGE_WRITEONLY, TERRAINVERTEX::FVF, D3DPOOL_MANAGED, &m_pVertexBuffer, 0)))\n        return FALSE;\n\t//2\n    TERRAINVERTEX *pVertices = NULL;\n    m_pVertexBuffer->Lock(0, 0, (void**)&pVertices, 0);\n\t//3ʣֵ\n    FLOAT fStartX = -m_fTerrainWidth / 2.0f, fEndX =  m_fTerrainWidth / 2.0f;\t\t//ָʼͽXֵ\n    FLOAT fStartZ =  m_fTerrainDepth / 2.0f, fEndZ = -m_fTerrainDepth / 2.0f;\t//ָʼͽZֵ\n    FLOAT fCoordU = 3.0f / (FLOAT)m_nCellsPerRow;     //ָĺֵ\n    FLOAT fCoordV = 3.0f / (FLOAT)m_nCellsPerCol;\t\t//ֵָ\n\n    int nIndex = 0, i = 0, j = 0;\n    for (float z = fStartZ; z > fEndZ; z -= m_fCellSpacing, i++)\t\t//Z귽ʼ㵽мı\n    {\n        j = 0;\n        for (float x = fStartX; x < fEndX; x += m_fCellSpacing, j++)\t//X귽ʼ㵽мı\n        {\n            nIndex = i * m_nCellsPerRow + j;\t\t//ָǰڶ㻺еλ\n            pVertices[nIndex] = TERRAINVERTEX(x, m_vHeightInfo[nIndex], z, j*fCoordU, i*fCoordV); //Ѷλڸ߶ͼжӦĸԼ긳ֵǰĶ\n            nIndex++;\t\t\t\t\t\t\t\t\t\t\t//Լ1\n        }\n    }\n\t//4\n    m_pVertexBuffer->Unlock();\n\n\t//---------------------------------------------------------------\n    // ε\n\t//---------------------------------------------------------------\n\t//1.\n    if (FAILED(m_pd3dDevice->CreateIndexBuffer(m_nNumVertices * 6 *sizeof(WORD), \n        D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_pIndexBuffer, 0)))\n        return FALSE;\n\t//2.\n    WORD* pIndices = NULL;\n    m_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\t//3.ʣֵ\n    nIndex = 0;\n    for(int row = 0; row < m_nCellsPerRow-1; row++)   //ÿ\n    {\n        for(int col = 0; col < m_nCellsPerCol-1; col++)  //ÿ\n        {\n\t\t\t//ABC\n            pIndices[nIndex]   =  row * m_nCellsPerRow + col;\t\t\t//A\n            pIndices[nIndex+1] =  row * m_nCellsPerRow + col + 1;  //B\n            pIndices[nIndex+2] = (row+1) * m_nCellsPerRow + col;\t//C\n\t\t\t//CBD\n            pIndices[nIndex+3] = (row+1) * m_nCellsPerRow + col;\t\t//C\n            pIndices[nIndex+4] =  row * m_nCellsPerRow + col + 1;\t\t//B\n            pIndices[nIndex+5] = (row+1) * m_nCellsPerRow + col + 1;//D\n\t\t\t//һԪ6\n            nIndex += 6;  //Լ6\n        }\n    }\n\t//4\n    m_pIndexBuffer->Unlock();\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::RenderTerrain()\n// Desc: ƳΣͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bRenderFrame) \n{\n    m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(TERRAINVERTEX));   ///ѰļϢĶ㻺Ⱦˮ  \n    m_pd3dDevice->SetFVF(TERRAINVERTEX::FVF);//ָʹõʽĺ\n    m_pd3dDevice->SetIndices(m_pIndexBuffer);//  \n    m_pd3dDevice->SetTexture(0, m_pTexture);//\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);\t//رչ\n    m_pd3dDevice->SetTransform(D3DTS_WORLD, pMatWorld); //\n    m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n        m_nNumVertices, 0, m_nNumVertices * 2);\t\t//ƶ\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);  //򿪹\n    m_pd3dDevice->SetTexture(0, 0);\t//ÿ\n\n    if (bRenderFrame)  //ҪȾ߿Ļ\n    {\n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n        m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n            m_nNumVertices, 0, m_nNumVertices * 2);\t//ƶ  \n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n    }\n    return TRUE;\n}\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nTerrainClass::~TerrainClass(void)\n{\n\tSAFE_RELEASE(m_pTexture);\n\tSAFE_RELEASE(m_pIndexBuffer);\n\tSAFE_RELEASE(m_pVertexBuffer);\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo17/TerrainClass.h",
    "content": "//=============================================================================\n// Name: TerrainClass.h\n//\tDes: һװάϵͳͷļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <vector>\n#include <fstream>\n#include  \"D3DUtil.h\"\n\nclass TerrainClass\n{\nprivate:\n    LPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n    LPDIRECT3DTEXTURE9\t\t\tm_pTexture;\t\t\t\t//\n    LPDIRECT3DINDEXBUFFER9\tm_pIndexBuffer;\t\t\t//㻺\n    LPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//\n\n    int\t\t\t\t\t\t\t\tm_nCellsPerRow;\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nCellsPerCol;\t\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nVertsPerRow;\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nVertsPerCol;\t\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nNumVertices;\t\t// \n    FLOAT\t\t\t\t\t\tm_fTerrainWidth;\t\t// εĿ\n    FLOAT\t\t\t\t\t\tm_fTerrainDepth;\t\t// ε\n    FLOAT\t\t\t\t\t\tm_fCellSpacing;\t\t\t// Ԫļ\n    FLOAT\t\t\t\t\t\tm_fHeightScale;\t\t\t// ߶ϵ\n    std::vector<FLOAT>   m_vHeightInfo;\t\t\t// ڴŸ߶Ϣ\n\n\t//һεFVFʽ\n    struct TERRAINVERTEX\n    {\n        FLOAT _x, _y, _z;\n        FLOAT _u, _v;\n        TERRAINVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v) \n            :_x(x), _y(y), _z(z), _u(u), _v(v) {}\n        static const DWORD FVF = D3DFVF_XYZ | D3DFVF_TEX1;\n    };\n\npublic:\n    TerrainClass(IDirect3DDevice9 *pd3dDevice); //캯\n    virtual ~TerrainClass(void);\t\t//\n\npublic:\n    BOOL LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile);\t\t//ļظ߶ͼĺ\n    BOOL InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale);  //γʼ\n    BOOL RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bDrawFrame=FALSE);  //Ⱦ\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/CameraClass.cpp",
    "content": "//=============================================================================\n// Name: CameraClass.cpp\n//\tDes: һװʵԴļ\n// 2013 310  Create by ǳī \n//=============================================================================\n#include \"CameraClass.h\"\n\n#ifndef WINDOW_WIDTH\n#define WINDOW_WIDTH\t\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#endif\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nCameraClass::CameraClass(IDirect3DDevice9 *pd3dDevice)\n{\n    m_pd3dDevice = pd3dDevice;\n    m_vRightVector  = D3DXVECTOR3(1.0f, 0.0f, 0.0f);   // ĬXغ\n    m_vUpVector     = D3DXVECTOR3(0.0f, 1.0f, 0.0f);   // ĬYغ\n    m_vLookVector   = D3DXVECTOR3(0.0f, 0.0f, 1.0f);   // ĬϹ۲Zغ\n    m_vCameraPosition  = D3DXVECTOR3(0.0f, 0.0f, -250.0f);   // ĬΪ(0.0f, 0.0f, -250.0f)\n    m_vTargetPosition    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);//ĬϹ۲ĿλΪ(0.0f, 0.0f, 0.0f);\n\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::CalculateViewMatrix( )\n// Desc: ݸľȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::CalculateViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//1.Ȱ3淶ʹ໥ֱΪһ\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);  //淶۲\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);    // ۲ֱ\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);                // 淶\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);    // ֱ\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);          // 淶\n\n\n    // 2.ȡ任\n\t//дȡ任ĵһ\n    pMatrix->_11 = m_vRightVector.x;           // Rx\n    pMatrix->_12 = m_vUpVector.x;              // Ux\n    pMatrix->_13 = m_vLookVector.x;            // Lx\n    pMatrix->_14 = 0.0f;\n\t//дȡ任ĵڶ\n    pMatrix->_21 = m_vRightVector.y;           // Ry\n    pMatrix->_22 = m_vUpVector.y;              // Uy\n    pMatrix->_23 = m_vLookVector.y;            // Ly\n    pMatrix->_24 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_31 = m_vRightVector.z;           // Rz\n    pMatrix->_32 = m_vUpVector.z;              // Uz\n    pMatrix->_33 = m_vLookVector.z;            // Lz\n    pMatrix->_34 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_41 = -D3DXVec3Dot(&m_vRightVector, &m_vCameraPosition);    // -P*R\n    pMatrix->_42 = -D3DXVec3Dot(&m_vUpVector, &m_vCameraPosition);       // -P*U\n    pMatrix->_43 = -D3DXVec3Dot(&m_vLookVector, &m_vCameraPosition);     // -P*L\n    pMatrix->_44 = 1.0f;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetTargetPosition( )\n// Desc: Ĺ۲λ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetTargetPosition(D3DXVECTOR3 *pLookat) \n{\n\t//ȿpLookatǷΪĬֵNULL\n    if (pLookat != NULL)  m_vTargetPosition = (*pLookat);\n    else m_vTargetPosition = D3DXVECTOR3(0.0f, 0.0f, 1.0f);\n\n    m_vLookVector = m_vTargetPosition - m_vCameraPosition;//۲λüλãõ۲췽\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);//淶m_vLookVector\n\n\t//淶m_vUpVectorm_vRightVector\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetCameraPosition( )\n// Desc: ڵλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetCameraPosition(D3DXVECTOR3 *pVector) \n{\n    D3DXVECTOR3 V = D3DXVECTOR3(0.0f, 0.0f, -250.0f);\n    m_vCameraPosition = pVector ? (*pVector) : V;//ĿpVectorΪĻ\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//*pVectorֵm_vCameraPosition=*pVector\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//򷵻Vֵm_vCameraPosition=V\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetViewMatrix( )\n// Desc: ȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//pMatrixֵһж\n    if (pMatrix) m_matView = *pMatrix;\n    else CalculateViewMatrix(&m_matView);\n    m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);\n    //ȡ任ֱֵҷϷ͹۲\n    m_vRightVector = D3DXVECTOR3(m_matView._11, m_matView._12, m_matView._13);\n    m_vUpVector    = D3DXVECTOR3(m_matView._21, m_matView._22, m_matView._23);\n    m_vLookVector  = D3DXVECTOR3(m_matView._31, m_matView._32, m_matView._33);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetProjMatrix( )\n// Desc: ͶӰ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetProjMatrix(D3DXMATRIX *pMatrix) \n{\n\t//жֵûУûеĻͼһ\n    if (pMatrix != NULL) m_matProj = *pMatrix;\n    else D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, (float)((double)WINDOW_WIDTH/WINDOW_HEIGHT), 1.0f, 300000.0f);//ӽԶһ㣬Ͳ¿Զ\n    m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProj);//ͶӰ任\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongRightVec( )\n// Desc: ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongRightVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vRightVector * fUnits;\n    m_vTargetPosition   += m_vRightVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongUpVec( )\n// Desc:  ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongUpVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vUpVector * fUnits;\n    m_vTargetPosition   += m_vUpVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongLookVec( )\n// Desc:  ع۲ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongLookVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vLookVector * fUnits;\n    m_vTargetPosition   += m_vLookVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationRightVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationRightVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vRightVector, fAngle);//m_vRightVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vRightVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vRightVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationUpVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationUpVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vUpVector, fAngle);//m_vUpVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vUpVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vUpVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationLookVec( )\n// Desc:  ع۲תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationLookVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vLookVector, fAngle);//m_vLookVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vLookVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vLookVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nCameraClass::~CameraClass(void)\n{\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/CameraClass.h",
    "content": "//=============================================================================\n// Name: CameraClass.h\n//\tDes: һװʵͷļ\n// 2013 310  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n\nclass CameraClass\n{\nprivate:\n\t//Ա\n    D3DXVECTOR3\t\t\t\tm_vRightVector;        // ҷ\n    D3DXVECTOR3\t\t\t\tm_vUpVector;           // Ϸ\n    D3DXVECTOR3\t\t\t\tm_vLookVector;         // ۲췽\n    D3DXVECTOR3\t\t\t\tm_vCameraPosition;        // λõ\n\tD3DXVECTOR3\t\t\t\tm_vTargetPosition;        //Ŀ۲λõ\n    D3DXMATRIX\t\t\t\tm_matView;          // ȡ任\n    D3DXMATRIX\t\t\t\tm_matProj;          // ͶӰ任   \n    LPDIRECT3DDEVICE9\t\tm_pd3dDevice;  //Direct3D豸\n\npublic:\n\t//һȡ任ĺ\n    VOID CalculateViewMatrix(D3DXMATRIX *pMatrix);    //ȡ任\n\n\t//Getϵк\n    VOID GetProjMatrix(D3DXMATRIX *pMatrix)  { *pMatrix = m_matProj; }  //صǰͶӰ\n    VOID GetCameraPosition(D3DXVECTOR3 *pVector)  { *pVector = m_vCameraPosition; } //صǰλþ\n    VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVector; }  //صǰĹ۲\n\n\t//ĸSetϵкעǲĬֵNULLģʱдҲ\n    VOID SetTargetPosition(D3DXVECTOR3 *pLookat = NULL);  //Ŀ۲λ\n    VOID SetCameraPosition(D3DXVECTOR3 *pVector = NULL); //ڵλ\n    VOID SetViewMatrix(D3DXMATRIX *pMatrix = NULL);  //ȡ任\n    VOID SetProjMatrix(D3DXMATRIX *pMatrix = NULL);  //ͶӰ任\n\npublic:\n    // ظƽƵ\n    VOID MoveAlongRightVec(FLOAT fUnits);   // rightƶ\n    VOID MoveAlongUpVec(FLOAT fUnits);      // upƶ\n    VOID MoveAlongLookVec(FLOAT fUnits);    // lookƶ\n\n    // Ƹת\n    VOID RotationRightVec(FLOAT fAngle);    // rightѡ\n    VOID RotationUpVec(FLOAT fAngle);       // upת\n    VOID RotationLookVec(FLOAT fAngle);     // lookת\n\npublic:\n\t//캯\n\tCameraClass(IDirect3DDevice9 *pd3dDevice);  //캯\n\tvirtual ~CameraClass(void);  //\n\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/D3Ddemo18.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo18\n//\t 20134 Create by ǳī\n//   Ĳ¾άյʵ ʾ\n//\tزĳɽ\n//  ģزĳ˫6\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿Ĳ¾άյʵ \") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                     \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n#include \"CameraClass.h\"\n#include \"TerrainClass.h\"\n#include \"SkyBoxClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------  \n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL;\t\t\t\t//Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS =NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor= NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50] ={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60] ={0};   //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;\t\t\t\t\t\t\t//\nLPD3DXMESH\t\t\t\t\t\t\tg_pMesh = NULL;\t\t\t\t// \nD3DMATERIAL9*\t\t\t\t\t\tg_pMaterials= NULL;\t\t\t// ĲϢ\nLPDIRECT3DTEXTURE9*\t\t\t\tg_pTextures = NULL;\t\t\t// Ϣ\nDWORD\t\t\t\t\t\t\t\t\tg_dwNumMtrls = 0;\t\t\t// ʵĿ\nLPD3DXMESH\t\t\t\t\t\t\tg_cylinder = NULL;\t\t\t\t//\nD3DMATERIAL9\t\t\t\t\t\t\tg_MaterialCylinder;\t\t\t\t//ӵĲ\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;\t\t\t\t//DInputClassָʵ\nCameraClass*\t\t\t\t\t\t\tg_pCamera = NULL;\t\t\t\t//ָʵ\nTerrainClass*\t\t\t\t\t\t\t\tg_pTerrain = NULL;\t\t\t\t//ָʵ\nSkyBoxClass*\t\t\t\t\t\t\t\tg_pSkyBox=NULL;\t\t\t\t   //պָʵ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tHelpText_Render(HWND hwnd);\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//ʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"GameMedia\\\\icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\"GameMedia\\\\ɽԭ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\t\n\tMoveWindow(hwnd,200,10,WINDOW_WIDTH,WINDOW_HEIGHT,true);   //ʾʱλãϽλĻ꣨2000\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"95.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\t//g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t//\n\tD3DXCreateCylinder(g_pd3dDevice, 280.0f, 10.0f, 3000.0f, 60, 60,  &g_cylinder, 0);\n\tg_MaterialCylinder.Ambient  = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);  \n\tg_MaterialCylinder.Diffuse  = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);  \n\tg_MaterialCylinder.Specular = D3DXCOLOR(0.5f, 0.0f, 0.3f, 0.3f);  \n\tg_MaterialCylinder.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);\n\n\t// ù  \n\tD3DLIGHT9 light;  \n\t::ZeroMemory(&light, sizeof(light));  \n\tlight.Type          = D3DLIGHT_DIRECTIONAL;  \n\tlight.Ambient       = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f);  \n\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tlight.Specular      = D3DXCOLOR(0.9f, 0.9f, 0.9f, 1.0f);  \n\tlight.Direction     = D3DXVECTOR3(1.0f, 1.0f, 1.0f);  \n\tg_pd3dDevice->SetLight(0, &light);  \n\tg_pd3dDevice->LightEnable(0, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// ʼ\n\tg_pCamera = new CameraClass(g_pd3dDevice);\n\tg_pCamera->SetCameraPosition(&D3DXVECTOR3(0.0f, 1000.0f, -1200.0f));  //ڵλ\n\tg_pCamera->SetTargetPosition(&D3DXVECTOR3(0.0f, 1200.0f, 0.0f));  //Ŀ۲ڵλ\n\tg_pCamera->SetViewMatrix();  //ȡ任\n\tg_pCamera->SetProjMatrix();  //ͶӰ任\n\n\t// ʼ\n\tg_pTerrain = new TerrainClass(g_pd3dDevice);   \n\tg_pTerrain->LoadTerrainFromFile(L\"GameMedia\\\\heighmap.raw\", L\"GameMedia\\\\terrainstone.jpg\");\t\t//ļظ߶ͼ\n\tg_pTerrain->InitTerrain(200, 200, 30.0f, 6.0f);  //ĸֱֵǶ࣬ϵ\n\n\t//ʼն\n\tg_pSkyBox = new SkyBoxClass( g_pd3dDevice );\n\tg_pSkyBox->LoadSkyTextureFromFile(L\"GameMedia\\\\frontsnow1.jpg\",L\"GameMedia\\\\backsnow1.jpg\",L\"GameMedia\\\\leftsnow1.jpg\",L\"GameMedia\\\\rightsnow1.jpg\", L\"GameMedia\\\\topsnow1.jpg\");//ļǰҡ5ͼ\n\tg_pSkyBox->InitSkyBox(20000);  //պеı߳\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ƶӽ\n\tif (g_pDInput->IsKeyDown(DIK_A))  g_pCamera->MoveAlongRightVec(-0.9f);\n\tif (g_pDInput->IsKeyDown(DIK_D))  g_pCamera->MoveAlongRightVec( 0.9f);\n\tif (g_pDInput->IsKeyDown(DIK_W)) g_pCamera->MoveAlongLookVec( 0.9f);\n\tif (g_pDInput->IsKeyDown(DIK_S))  g_pCamera->MoveAlongLookVec(-0.9f);\n\tif (g_pDInput->IsKeyDown(DIK_R))  g_pCamera->MoveAlongUpVec( 0.9f);\n\tif (g_pDInput->IsKeyDown(DIK_F))  g_pCamera->MoveAlongUpVec(-0.9f);\n\n\t//תӽ\n\tif (g_pDInput->IsKeyDown(DIK_LEFT))  g_pCamera->RotationUpVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT))  g_pCamera->RotationUpVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_UP))  g_pCamera->RotationRightVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_DOWN))  g_pCamera->RotationRightVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_Q)) g_pCamera->RotationLookVec(0.001f);\n\tif (g_pDInput->IsKeyDown(DIK_E)) g_pCamera->RotationLookVec( -0.001f);\n\n\t//ת\n\tg_pCamera->RotationUpVec(g_pDInput->MouseDX()* 0.001f);\n\tg_pCamera->RotationRightVec(g_pDInput->MouseDY() * 0.001f);\n\n\t//ֿƹ۲\n\tstatic FLOAT fPosZ=0.0f;\n\tfPosZ += g_pDInput->MouseDZ()*0.03f;\n\n\t//㲢ȡ任\n\tD3DXMATRIX matView;\n\tg_pCamera->CalculateViewMatrix(&matView);\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);\n\n\t//ȷ任浽g_matWorld\n\tD3DXMatrixTranslation(&g_matWorld, 0.0f, 0.0f, fPosZ);\n\n\n\t//δƶ\n\tPOINT lt,rb;\n\tRECT rect;\n\tGetClientRect(hwnd,&rect);  //ȡôڲ\n\t//ϵlt\n\tlt.x = rect.left;\n\tlt.y = rect.top;\n\t//rb\n\trb.x = rect.right;\n\trb.y = rect.bottom;\n\t//ltrbĴתΪĻ\n\tClientToScreen(hwnd,&lt);\n\tClientToScreen(hwnd,&rb);\n\t//Ļ趨\n\trect.left = lt.x;\n\trect.top = lt.y;\n\trect.right = rb.x;\n\trect.bottom = rb.y;\n\t//ƶ\n\tClipCursor(&rect);\n\n\tShowCursor(false);\t\t//\n\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(100, 255, 255), 1.0f, 0);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\t\n\t//\n\tD3DXMATRIX TransMatrix, RotMatrix, FinalMatrix;\n\tD3DXMatrixRotationX(&RotMatrix, -D3DX_PI * 0.5f);\n\tg_pd3dDevice->SetMaterial(&g_MaterialCylinder);\n\tfor(int i = 0; i < 4; i++)\n\t{\n\t\tD3DXMatrixTranslation(&TransMatrix, -300.0f, 0.0f, -350.0f + (i * 500.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\n\t\tD3DXMatrixTranslation(&TransMatrix, 300.0f, 0.0f, -350.0f + (i * 500.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\t}\n\n\t//\n\tD3DXMATRIX mScal,mRot2,mTrans,mFinal;   //һЩ׼ԴƷо任\n\tD3DXMatrixTranslation(&mTrans,0.0f,600.0f,200.0f);\n\tD3DXMatrixScaling(&mScal,3.0f,3.0f,3.0f);\n\tmFinal=mScal*mTrans*g_matWorld;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\t//Ƶ\n\tg_pTerrain->RenderTerrain(&g_matWorld, false);  //ȾΣҵڶΪfalseʾȾε߿\n\n\t//\n\tD3DXMATRIX matSky,matTransSky,matRotSky;\n\tD3DXMatrixTranslation(&matTransSky,0.0f,-3500.0f,0.0f);\n\tD3DXMatrixRotationY(&matRotSky, -0.000005f*timeGetTime());   //ת, ģƲ˶Ч\n\tmatSky=matTransSky*matRotSky;\n\tg_pSkyBox->RenderSkyBox(&matSky, false);\n\n\t//Ϣ\n\tHelpText_Render(hwnd);\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------HelpText_Render( )-------------------------------\n//\tװ˰Ϣĺ\n//--------------------------------------------------------------------------------------------------\nvoid HelpText_Render(HWND hwnd)\n{\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//ڴϽǴʾÿ֡\n\tformatRect.top = 5;\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    Wǰ     S \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    A     Dҷ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    RֱϷ     Fֱ·\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    Qб       Eб\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷƶӽǱ仯 \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"     ֣ģY᷽ƶ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_cylinder);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/SkyBoxClass.cpp",
    "content": "//=============================================================================\n// Name: SkyBoxClass.cpp\n//\tDes: һװάպϵͳԴļ\n// 2013 324  Create by ǳī \n//=============================================================================\n#include \"d3dx9.h\"\n#include \"SkyBoxClass.h\"\n#include \"D3DUtil.h\"\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: 캯\n//-------------------------------------------------------------------------------------------------\nSkyBoxClass::SkyBoxClass( LPDIRECT3DDEVICE9  pDevice )\n{\n\t//ֵ\n\tm_pVertexBuffer=NULL;\n\tm_pd3dDevice=pDevice;\n\tfor(int i=0; i<5; i++)\n\t\tm_pTexture[i] = NULL; \n\tm_Length = 0.0f;\n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SkyBoxClass::InitSkyBox( )\n// Desc: պгʼ㻺ĸֵ\n//-------------------------------------------------------------------------------------------------\nBOOL SkyBoxClass::InitSkyBox( float Length )\n{\n\tm_Length=Length;\n\n\t//1.㻺\n\t m_pd3dDevice->CreateVertexBuffer( 20 * sizeof(SKYBOXVERTEX), 0, \n\t\tD3DFVF_SKYBOX, D3DPOOL_MANAGED, &m_pVertexBuffer, 0 );\n\n\t//һṹѶ׼\n\tSKYBOXVERTEX vertices[] =\n    {\n\t\t//ǰĸ\n\t\t{ -m_Length/2, 0.0f,    m_Length/2, 0.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,   m_Length/2, 0.0f, 0.0f, },\n\t\t{  m_Length/2, 0.0f,    m_Length/2, 1.0f, 1.0f, },\n\t\t{  m_Length/2, m_Length/2,   m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{  m_Length/2, 0.0f,   -m_Length/2, 0.0f, 1.0f, },\n\t\t{  m_Length/2, m_Length/2,  -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, 0.0f,   -m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,  -m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{ -m_Length/2, 0.0f,   -m_Length/2, 0.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,  -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, 0.0f,    m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,   m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{ m_Length/2, 0.0f,   m_Length/2, 0.0f, 1.0f, },\n\t\t{ m_Length/2, m_Length/2,  m_Length/2, 0.0f, 0.0f, },\n\t\t{ m_Length/2, 0.0f,  -m_Length/2, 1.0f, 1.0f, },\n\t\t{ m_Length/2, m_Length/2, -m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{  m_Length/2, m_Length/2, -m_Length/2, 1.0f, 0.0f, },\n\t\t{  m_Length/2, m_Length/2,  m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2, -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, m_Length/2,  m_Length/2, 0.0f, 1.0f, },\n\n    };\n\n\t//׼䶥\n    void* pVertices;\n\t//2.\n    m_pVertexBuffer->Lock( 0, 0, (void**)&pVertices, 0 );\n\t//3.ʡѽṹеֱӿ㻺\n    memcpy( pVertices, vertices, sizeof(vertices) );\n\t//4.\n\tm_pVertexBuffer->Unlock();\n\n\t return TRUE;\n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SkyBoxClass::LoadSkyTextureFromFile( )\n// Desc: պغ\n//-------------------------------------------------------------------------------------------------\nBOOL SkyBoxClass::LoadSkyTextureFromFile(wchar_t *pFrontTextureFile, wchar_t *pBackTextureFile,wchar_t *pLeftTextureFile, wchar_t *pRightTextureFile,wchar_t *pTopTextureFile)\n{\n\t//ļ\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pFrontTextureFile, &m_pTexture[0] );  //ǰ\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pBackTextureFile,  &m_pTexture[1] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pLeftTextureFile,  &m_pTexture[2] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pRightTextureFile, &m_pTexture[3] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pTopTextureFile,   &m_pTexture[4] );  //\t\n\treturn TRUE;\n}\n\n\n\n//--------------------------------------------------------------------------------------\n// Name: SkyBoxClass::RenderSkyBox()\n// Desc: ƳպУͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nvoid SkyBoxClass::RenderSkyBox( D3DXMATRIX *pMatWorld, BOOL bRenderFrame )\n{\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);  //ɫϵĵһɫֵ\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );   //ɫϵĵһֵȡɫֵ\n\tm_pd3dDevice->SetTransform( D3DTS_WORLD, pMatWorld );  //\n\tm_pd3dDevice->SetStreamSource(0,m_pVertexBuffer, 0, sizeof(SKYBOXVERTEX));    //ѰļϢĶ㻺Ⱦˮ  \n\tm_pd3dDevice->SetFVF(D3DFVF_SKYBOX);  //FVFʽ\n\n\t//һforѭ5Ƴ\n\tfor(int i =0; i<5; i++)\n\t{\n\t\tm_pd3dDevice->SetTexture(0, m_pTexture[i]);\n\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);\n\t}\n\n\t//ǷȾ߿Ĵ\n\tif (bRenderFrame)  //ҪȾ߿Ļ\n\t{\n\t\tm_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n\t\t//һforѭ5߿Ƴ\n\t\tfor(int i =0; i<5; i++)\n\t\t{\n\t\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);\t//ƶ \n\t\t}\n\n\t\tm_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n\t}\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: \n//-------------------------------------------------------------------------------------------------\nSkyBoxClass::~SkyBoxClass(void)\n{\n\tSAFE_RELEASE( m_pVertexBuffer );\n\tfor(int i=0; i<5; i++)\n\t{\n\t\tSAFE_RELEASE( m_pTexture[i] );\n\t}\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/SkyBoxClass.h",
    "content": "//=============================================================================\n// Name: SkyBoxClass.h\n//\tDes: һװάպϵͳͷļ\n// 2013 324  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n\n//ΪպඨһFVFʽ\nstruct SKYBOXVERTEX\n{\n\tfloat\tx,y,z;\n\tfloat\tu,v;\n};\n#define D3DFVF_SKYBOX D3DFVF_XYZ|D3DFVF_TEX1\n\n\nclass SkyBoxClass\n{\nprivate:\n\tLPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n\tLPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//㻺\n\tLPDIRECT3DTEXTURE9\t\t\tm_pTexture[5];\t\t\t//5ӿڶ\n\tfloat\t\t\t\t\t\t\t\t\t\tm_Length;\t\t\t\t\t//պб߳\n\npublic:\n\tSkyBoxClass( LPDIRECT3DDEVICE9  pDevice );\t\t//캯\n\tvirtual ~SkyBoxClass(void);\t\t\t\t\t\t\t\t//\n\npublic:\n\tBOOL\tInitSkyBox( float Length );   //ʼպк\n\tBOOL\tLoadSkyTextureFromFile(wchar_t *pFrontTextureFile, wchar_t *pBackTextureFile,wchar_t *pLeftTextureFile, wchar_t *pRightTextureFile,wchar_t *pTopTextureFile);  //ļպϵ\n\tVOID\t\tRenderSkyBox( D3DXMATRIX *pMatWorld, BOOL bRenderFrame ); //Ⱦպ,ݵһ趨պ󣬵ڶѡǷȾ߿\n\n};\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/TerrainClass.cpp",
    "content": "//=============================================================================\n// Name: TerrainClass.cpp\n//\tDes: һװάϵͳԴļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#include \"TerrainClass.h\"\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nTerrainClass::TerrainClass(IDirect3DDevice9* pd3dDevice)\n{\n\t//Աֵ\n    m_pd3dDevice = pd3dDevice;\n    m_pTexture = NULL;\n    m_pIndexBuffer = NULL;\n    m_pVertexBuffer = NULL;\n    m_nCellsPerRow = 0;\n    m_nCellsPerCol = 0;\n    m_nVertsPerRow = 0;\n    m_nVertsPerCol = 0;\n    m_nNumVertices = 0;\n    m_fTerrainWidth = 0.0f;\n    m_fTerrainDepth = 0.0f;\n    m_fCellSpacing = 0.0f;\n    m_fHeightScale = 0.0f;\n}\n\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::LoadTerrainFromFile()\n// Desc: صθ߶ϢԼ\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile) \n{\n    // ļжȡ߶Ϣ\n    std::ifstream inFile;     \n    inFile.open(pRawFileName, std::ios::binary);   //öƵķʽļ\n\n    inFile.seekg(0,std::ios::end);\t\t\t\t\t\t\t//ļָƶļĩβ\n    std::vector<BYTE> inData(inFile.tellg());\t\t\t//ģ嶨һvector<BYTE>͵ıinDataʼֵΪǰλãС\n\n    inFile.seekg(std::ios::beg);\t\t\t\t\t\t\t\t//ļָƶļĿͷ׼ȡ߶Ϣ\n    inFile.read((char*)&inData[0], inData.size());\t//ؼһȡ߶Ϣ\n    inFile.close();\t\t\t\t\t\t\t\t\t\t\t\t\t//Թرļ\n\n    m_vHeightInfo.resize(inData.size());\t\t\t\t\t//m_vHeightInfoߴȡΪĳߴ\n\t//inDataеֵm_vHeightInfo\n    for (unsigned int i=0; i<inData.size(); i++)\t\t\n        m_vHeightInfo[i] = inData[i];\n\n    // ص\n    if (FAILED(D3DXCreateTextureFromFile(m_pd3dDevice, pTextureFile, &m_pTexture)))\n        return FALSE;\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::InitTerrain()\n// Desc: ʼεĸ߶, 䶥\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale) \n{\n    m_nCellsPerRow  = nRows;  //ÿеĵԪĿ\n    m_nCellsPerCol  = nCols;  //ÿеĵԪĿ\n    m_fCellSpacing  = fSpace;\t//Ԫļ\n    m_fHeightScale  = fScale; //߶ϵ\n    m_fTerrainWidth = nRows * fSpace;  //εĿ\n    m_fTerrainDepth = nCols * fSpace;  //ε\n    m_nVertsPerRow  = m_nCellsPerCol + 1;  //ÿеĶ\n    m_nVertsPerCol  = m_nCellsPerRow + 1; //ÿеĶ\n    m_nNumVertices  = m_nVertsPerRow * m_nVertsPerCol;  //\n\n    // ͨһforѭѵԭʼ߶ȳϵõźĸ߶\n    for(unsigned int i=0; i<m_vHeightInfo.size(); i++)\n        m_vHeightInfo[i] *= m_fHeightScale;\n\t//---------------------------------------------------------------\n    // εĶ\n\t//---------------------------------------------------------------\n\t//1㻺\n    if (FAILED(m_pd3dDevice->CreateVertexBuffer(m_nNumVertices * sizeof(TERRAINVERTEX), \n        D3DUSAGE_WRITEONLY, TERRAINVERTEX::FVF, D3DPOOL_MANAGED, &m_pVertexBuffer, 0)))\n        return FALSE;\n\t//2\n    TERRAINVERTEX *pVertices = NULL;\n    m_pVertexBuffer->Lock(0, 0, (void**)&pVertices, 0);\n\t//3ʣֵ\n    FLOAT fStartX = -m_fTerrainWidth / 2.0f, fEndX =  m_fTerrainWidth / 2.0f;\t\t//ָʼͽXֵ\n    FLOAT fStartZ =  m_fTerrainDepth / 2.0f, fEndZ = -m_fTerrainDepth / 2.0f;\t//ָʼͽZֵ\n    FLOAT fCoordU = 10.0f / (FLOAT)m_nCellsPerRow;     //ָĺֵ\n    FLOAT fCoordV = 10.0f / (FLOAT)m_nCellsPerCol;\t\t//ֵָ\n\n    int nIndex = 0, i = 0, j = 0;\n    for (float z = fStartZ; z >=fEndZ; z -= m_fCellSpacing, i++)\t\t//Z귽ʼ㵽мı\n    {\n        j = 0;\n        for (float x = fStartX; x <=fEndX; x += m_fCellSpacing, j++)\t//X귽ʼ㵽мı\n        {\n            nIndex = i * m_nCellsPerRow + j;\t\t//ָǰڶ㻺еλ\n            pVertices[nIndex] = TERRAINVERTEX(x, m_vHeightInfo[nIndex], z, j*fCoordU, i*fCoordV); //Ѷλڸ߶ͼжӦĸԼ긳ֵǰĶ\n            nIndex++;\t\t\t\t\t\t\t\t\t\t\t//Լ1\n        }\n    }\n\t//4\n    m_pVertexBuffer->Unlock();\n\n\t//---------------------------------------------------------------\n    // ε\n\t//---------------------------------------------------------------\n\t//1.\n    if (FAILED(m_pd3dDevice->CreateIndexBuffer(m_nNumVertices * 6 *sizeof(WORD), \n        D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_pIndexBuffer, 0)))\n        return FALSE;\n\t//2.\n    WORD* pIndices = NULL;\n    m_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\t//3.ʣֵ\n    nIndex = 0;\n    for(int row = 0; row < m_nCellsPerRow-1; row++)   //ÿ\n    {\n        for(int col = 0; col < m_nCellsPerCol-1; col++)  //ÿ\n        {\n\t\t\t//ABC\n            pIndices[nIndex]   =  row * m_nCellsPerRow + col;\t\t\t//A\n            pIndices[nIndex+1] =  row * m_nCellsPerRow + col + 1;  //B\n            pIndices[nIndex+2] = (row+1) * m_nCellsPerRow + col;\t//C\n\t\t\t//CBD\n            pIndices[nIndex+3] = (row+1) * m_nCellsPerRow + col;\t\t//C\n            pIndices[nIndex+4] =  row * m_nCellsPerRow + col + 1;\t\t//B\n            pIndices[nIndex+5] = (row+1) * m_nCellsPerRow + col + 1;//D\n\t\t\t//һԪ6\n            nIndex += 6;  //Լ6\n        }\n    }\n\t//4\n    m_pIndexBuffer->Unlock();\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::RenderTerrain()\n// Desc: ƳΣͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bRenderFrame) \n{\n    m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(TERRAINVERTEX));  \n    m_pd3dDevice->SetFVF(TERRAINVERTEX::FVF);//ָʹõʽĺ\n    m_pd3dDevice->SetIndices(m_pIndexBuffer);//  \n    m_pd3dDevice->SetTexture(0, m_pTexture);//\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);\t//رչ\n    m_pd3dDevice->SetTransform(D3DTS_WORLD, pMatWorld); //\n    m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n        m_nNumVertices, 0, m_nNumVertices * 2);\t\t//ƶ\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);  //򿪹\n    m_pd3dDevice->SetTexture(0, 0);\t//ÿ\n\n\t//ǷȾ߿Ĵ\n    if (bRenderFrame)  //ҪȾ߿Ļ\n    {\n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n        m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n            m_nNumVertices, 0, m_nNumVertices * 2);\t//ƶ  \n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n    }\n    return TRUE;\n}\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nTerrainClass::~TerrainClass(void)\n{\n\tSAFE_RELEASE(m_pTexture);\n\tSAFE_RELEASE(m_pIndexBuffer);\n\tSAFE_RELEASE(m_pVertexBuffer);\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo18/TerrainClass.h",
    "content": "//=============================================================================\n// Name: TerrainClass.h\n//\tDes: һװάϵͳͷļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <vector>\n#include <fstream>\n#include  \"D3DUtil.h\"\n\nclass TerrainClass\n{\nprivate:\n    LPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n    LPDIRECT3DTEXTURE9\t\t\tm_pTexture;\t\t\t\t//\n    LPDIRECT3DINDEXBUFFER9\tm_pIndexBuffer;\t\t\t//㻺\n    LPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//\n\n    int\t\t\t\t\t\t\t\tm_nCellsPerRow;\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nCellsPerCol;\t\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nVertsPerRow;\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nVertsPerCol;\t\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nNumVertices;\t\t// \n    FLOAT\t\t\t\t\t\tm_fTerrainWidth;\t\t// εĿ\n    FLOAT\t\t\t\t\t\tm_fTerrainDepth;\t\t// ε\n    FLOAT\t\t\t\t\t\tm_fCellSpacing;\t\t\t// Ԫļ\n    FLOAT\t\t\t\t\t\tm_fHeightScale;\t\t\t// ߶ϵ\n    std::vector<FLOAT>   m_vHeightInfo;\t\t\t// ڴŸ߶Ϣ\n\n\t//һεFVFʽ\n    struct TERRAINVERTEX\n    {\n        FLOAT _x, _y, _z;\n        FLOAT _u, _v;\n        TERRAINVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v) \n            :_x(x), _y(y), _z(z), _u(u), _v(v) {}\n        static const DWORD FVF = D3DFVF_XYZ | D3DFVF_TEX1;\n    };\n\npublic:\n    TerrainClass(IDirect3DDevice9 *pd3dDevice); //캯\n    virtual ~TerrainClass(void);\t\t//\n\npublic:\n    BOOL LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile);\t\t//ļظ߶ͼĺ\n    BOOL InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale);  //γʼ\n    BOOL RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bDrawFrame=FALSE);  //Ⱦ\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/CameraClass.cpp",
    "content": "//=============================================================================\n// Name: CameraClass.cpp\n//\tDes: һװʵԴļ\n// 2013 310  Create by ǳī \n//=============================================================================\n#include \"CameraClass.h\"\n\n#ifndef WINDOW_WIDTH\n#define WINDOW_WIDTH\t\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#endif\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nCameraClass::CameraClass(IDirect3DDevice9 *pd3dDevice)\n{\n    m_pd3dDevice = pd3dDevice;\n    m_vRightVector  = D3DXVECTOR3(1.0f, 0.0f, 0.0f);   // ĬXغ\n    m_vUpVector     = D3DXVECTOR3(0.0f, 1.0f, 0.0f);   // ĬYغ\n    m_vLookVector   = D3DXVECTOR3(0.0f, 0.0f, 1.0f);   // ĬϹ۲Zغ\n    m_vCameraPosition  = D3DXVECTOR3(0.0f, 0.0f, -250.0f);   // ĬΪ(0.0f, 0.0f, -250.0f)\n    m_vTargetPosition    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);//ĬϹ۲ĿλΪ(0.0f, 0.0f, 0.0f);\n\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::CalculateViewMatrix( )\n// Desc: ݸľȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::CalculateViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//1.Ȱ3淶ʹ໥ֱΪһ\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);  //淶۲\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);    // ۲ֱ\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);                // 淶\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);    // ֱ\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);          // 淶\n\n\n    // 2.ȡ任\n\t//дȡ任ĵһ\n    pMatrix->_11 = m_vRightVector.x;           // Rx\n    pMatrix->_12 = m_vUpVector.x;              // Ux\n    pMatrix->_13 = m_vLookVector.x;            // Lx\n    pMatrix->_14 = 0.0f;\n\t//дȡ任ĵڶ\n    pMatrix->_21 = m_vRightVector.y;           // Ry\n    pMatrix->_22 = m_vUpVector.y;              // Uy\n    pMatrix->_23 = m_vLookVector.y;            // Ly\n    pMatrix->_24 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_31 = m_vRightVector.z;           // Rz\n    pMatrix->_32 = m_vUpVector.z;              // Uz\n    pMatrix->_33 = m_vLookVector.z;            // Lz\n    pMatrix->_34 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_41 = -D3DXVec3Dot(&m_vRightVector, &m_vCameraPosition);    // -P*R\n    pMatrix->_42 = -D3DXVec3Dot(&m_vUpVector, &m_vCameraPosition);       // -P*U\n    pMatrix->_43 = -D3DXVec3Dot(&m_vLookVector, &m_vCameraPosition);     // -P*L\n    pMatrix->_44 = 1.0f;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetTargetPosition( )\n// Desc: Ĺ۲λ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetTargetPosition(D3DXVECTOR3 *pLookat) \n{\n\t//ȿpLookatǷΪĬֵNULL\n    if (pLookat != NULL)  m_vTargetPosition = (*pLookat);\n    else m_vTargetPosition = D3DXVECTOR3(0.0f, 0.0f, 1.0f);\n\n    m_vLookVector = m_vTargetPosition - m_vCameraPosition;//۲λüλãõ۲췽\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);//淶m_vLookVector\n\n\t//淶m_vUpVectorm_vRightVector\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetCameraPosition( )\n// Desc: ڵλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetCameraPosition(D3DXVECTOR3 *pVector) \n{\n    D3DXVECTOR3 V = D3DXVECTOR3(0.0f, 0.0f, -250.0f);\n    m_vCameraPosition = pVector ? (*pVector) : V;//ĿpVectorΪĻ\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//*pVectorֵm_vCameraPosition=*pVector\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//򷵻Vֵm_vCameraPosition=V\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetViewMatrix( )\n// Desc: ȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//pMatrixֵһж\n    if (pMatrix) m_matView = *pMatrix;\n    else CalculateViewMatrix(&m_matView);\n    m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);\n    //ȡ任ֱֵҷϷ͹۲\n    m_vRightVector = D3DXVECTOR3(m_matView._11, m_matView._12, m_matView._13);\n    m_vUpVector    = D3DXVECTOR3(m_matView._21, m_matView._22, m_matView._23);\n    m_vLookVector  = D3DXVECTOR3(m_matView._31, m_matView._32, m_matView._33);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetProjMatrix( )\n// Desc: ͶӰ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetProjMatrix(D3DXMATRIX *pMatrix) \n{\n\t//жֵûУûеĻͼһ\n    if (pMatrix != NULL) m_matProj = *pMatrix;\n    else D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, (float)((double)WINDOW_WIDTH/WINDOW_HEIGHT), 1.0f, 300000.0f);//ӽԶһ㣬Ͳ¿Զ\n    m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProj);//ͶӰ任\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongRightVec( )\n// Desc: ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongRightVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vRightVector * fUnits;\n    m_vTargetPosition   += m_vRightVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongUpVec( )\n// Desc:  ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongUpVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vUpVector * fUnits;\n    m_vTargetPosition   += m_vUpVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongLookVec( )\n// Desc:  ع۲ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongLookVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vLookVector * fUnits;\n    m_vTargetPosition   += m_vLookVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationRightVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationRightVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vRightVector, fAngle);//m_vRightVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vRightVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vRightVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationUpVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationUpVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vUpVector, fAngle);//m_vUpVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vUpVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vUpVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationLookVec( )\n// Desc:  ع۲תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationLookVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vLookVector, fAngle);//m_vLookVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vLookVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vLookVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nCameraClass::~CameraClass(void)\n{\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/CameraClass.h",
    "content": "//=============================================================================\n// Name: CameraClass.h\n//\tDes: һװʵͷļ\n// 2013 310  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n\nclass CameraClass\n{\nprivate:\n\t//Ա\n    D3DXVECTOR3\t\t\t\tm_vRightVector;        // ҷ\n    D3DXVECTOR3\t\t\t\tm_vUpVector;           // Ϸ\n    D3DXVECTOR3\t\t\t\tm_vLookVector;         // ۲췽\n    D3DXVECTOR3\t\t\t\tm_vCameraPosition;        // λõ\n\tD3DXVECTOR3\t\t\t\tm_vTargetPosition;        //Ŀ۲λõ\n    D3DXMATRIX\t\t\t\tm_matView;          // ȡ任\n    D3DXMATRIX\t\t\t\tm_matProj;          // ͶӰ任   \n    LPDIRECT3DDEVICE9\t\tm_pd3dDevice;  //Direct3D豸\n\npublic:\n\t//һȡ任ĺ\n    VOID CalculateViewMatrix(D3DXMATRIX *pMatrix);    //ȡ任\n\n\t//Getϵк\n    VOID GetProjMatrix(D3DXMATRIX *pMatrix)  { *pMatrix = m_matProj; }  //صǰͶӰ\n    VOID GetCameraPosition(D3DXVECTOR3 *pVector)  { *pVector = m_vCameraPosition; } //صǰλþ\n    VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVector; }  //صǰĹ۲\n\n\t//ĸSetϵкעǲĬֵNULLģʱдҲ\n    VOID SetTargetPosition(D3DXVECTOR3 *pLookat = NULL);  //Ŀ۲λ\n    VOID SetCameraPosition(D3DXVECTOR3 *pVector = NULL); //ڵλ\n    VOID SetViewMatrix(D3DXMATRIX *pMatrix = NULL);  //ȡ任\n    VOID SetProjMatrix(D3DXMATRIX *pMatrix = NULL);  //ͶӰ任\n\npublic:\n    // ظƽƵ\n    VOID MoveAlongRightVec(FLOAT fUnits);   // rightƶ\n    VOID MoveAlongUpVec(FLOAT fUnits);      // upƶ\n    VOID MoveAlongLookVec(FLOAT fUnits);    // lookƶ\n\n    // Ƹת\n    VOID RotationRightVec(FLOAT fAngle);    // rightת\n    VOID RotationUpVec(FLOAT fAngle);       // upת\n    VOID RotationLookVec(FLOAT fAngle);     // lookת\n\npublic:\n\t//캯\n\tCameraClass(IDirect3DDevice9 *pd3dDevice);  //캯\n\tvirtual ~CameraClass(void);  //\n\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/D3Ddemo19.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo19\n//\t 20134 Create by ǳī\n//  ΨѩƮάϵͳʵ ʾ\n//\tزĳ ħ3\n//  ģزĳӢ޵6 ư\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿 ѩʵΨϵͳ\") //Ϊڱⶨĺ\n\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                      \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n#include \"CameraClass.h\"\n#include \"TerrainClass.h\"\n#include \"SkyBoxClass.h\"\n#include \"SnowParticleClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------  \n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL;\t\t\t\t//Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS =NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor= NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50] ={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60] ={0};   //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;\t\t\t\t\t\t\t//\nLPD3DXMESH\t\t\t\t\t\t\tg_pMesh = NULL;\t\t\t\t// \nD3DMATERIAL9*\t\t\t\t\t\tg_pMaterials= NULL;\t\t\t// ĲϢ\nLPDIRECT3DTEXTURE9*\t\t\t\tg_pTextures = NULL;\t\t\t// Ϣ\nDWORD\t\t\t\t\t\t\t\t\tg_dwNumMtrls = 0;\t\t\t// ʵĿ\nLPD3DXMESH\t\t\t\t\t\t\tg_cylinder = NULL;\t\t\t\t//\nD3DMATERIAL9\t\t\t\t\t\t\tg_MaterialCylinder;\t\t\t\t//ӵĲ\nD3DLIGHT9\t\t\t\t\t\t\t\tg_Light;\t\t\t\t\t\t\t\t//ȫֹ\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;\t\t\t\t//DInputClassָʵ\nCameraClass*\t\t\t\t\t\t\tg_pCamera = NULL;\t\t\t\t//ָʵ\nTerrainClass*\t\t\t\t\t\t\t\tg_pTerrain = NULL;\t\t\t\t//ָʵ\nSkyBoxClass*\t\t\t\t\t\t\t\tg_pSkyBox=NULL;\t\t\t\t\t//պָʵ\nSnowParticleClass*\t\t\t\t\t\tg_pSnowParticles = NULL;\t\t//ѩϵͳָʵ\n \n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd,FLOAT fTimeDelta);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd,FLOAT fTimeDelta);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tHelpText_Render(HWND hwnd);\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//ʼһĴ\n\tWNDCLASSEX wndClass={0} ;\t\t\t\t//WINDCLASSEXһ࣬wndClassʵWINDCLASSEX֮󴰿ڵĸʼ    \n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\n\twndClass.cbWndExtra\t\t= 0;\n\twndClass.hInstance = hInstance;\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,_T(\"GameMedia\\\\icon.ico\"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //ȫֵ::LoadImageӱؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = _T(\"ForTheDreamOfGameDevelop\");\t\t//һԿַָֹ֡\n\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\tHWND hwnd = CreateWindow( _T(\"ForTheDreamOfGameDevelop\"),WINDOW_TITLE,\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\tPlaySound(L\"GameMedia\\\\NightElf1.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP);   //ѭű\n\n\t\n\n\tMoveWindow(hwnd,200,10,WINDOW_WIDTH,WINDOW_HEIGHT,true);   //ʾʱλãϽλĻ꣨2000\n\tShowWindow( hwnd, nShowCmd );    //Win32ShowWindowʾ\n\tUpdateWindow(hwnd);  //Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tstatic FLOAT fLastTime  = (float)::timeGetTime();\n\t\tstatic FLOAT fCurrTime  = (float)::timeGetTime();\n\t\tstatic FLOAT fTimeDelta = 0.0f;\n\t\tfCurrTime  = (float)::timeGetTime();\n\t\tfTimeDelta = (fCurrTime - fLastTime) / 1000.0f;\n\t\tfLastTime  = fCurrTime;\n\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd,fTimeDelta);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd,fTimeDelta);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\tUnregisterClass(_T(\"ForTheDreamOfGameDevelop\"), wndClass.hInstance);\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd,0.0f);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\n\tD3DXLoadMeshFromX(L\"angle.X\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //һD3DXMATERIALṹڶȡʺϢ\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\tSAFE_RELEASE(pAdjBuffer)\n\tSAFE_RELEASE(pMtrlBuffer)\n\n\n\t//\n\tD3DXCreateCylinder(g_pd3dDevice, 280.0f, 10.0f, 3000.0f, 60, 60,  &g_cylinder, 0);\n\tg_MaterialCylinder.Ambient  = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);  \n\tg_MaterialCylinder.Diffuse  = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);  \n\tg_MaterialCylinder.Specular = D3DXCOLOR(0.5f, 0.0f, 0.3f, 0.3f);  \n\tg_MaterialCylinder.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);\n\n\t// ù  \n\t::ZeroMemory(&g_Light, sizeof(g_Light));  \n\tg_Light.Type          = D3DLIGHT_DIRECTIONAL;  \n\tg_Light.Ambient       = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f);  \n\tg_Light.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tg_Light.Specular      = D3DXCOLOR(0.9f, 0.9f, 0.9f, 1.0f);  \n\tg_Light.Direction     = D3DXVECTOR3(1.0f, 1.0f, 1.0f);  \n\tg_pd3dDevice->SetLight(0, &g_Light);  \n\tg_pd3dDevice->LightEnable(0, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// ʼ\n\tg_pCamera = new CameraClass(g_pd3dDevice);\n\tg_pCamera->SetCameraPosition(&D3DXVECTOR3(0.0f, 1400.0f, -1800.0f));  //ڵλ\n\tg_pCamera->SetTargetPosition(&D3DXVECTOR3(0.0f, 1200.0f, 0.0f));  //Ŀ۲ڵλ\n\tg_pCamera->SetViewMatrix();  //ȡ任\n\tg_pCamera->SetProjMatrix();  //ͶӰ任\n\n\t// ʼ\n\tg_pTerrain = new TerrainClass(g_pd3dDevice);   \n\tg_pTerrain->LoadTerrainFromFile(L\"GameMedia\\\\heighmap.raw\", L\"GameMedia\\\\terrainstone.jpg\");\t\t//ļظ߶ͼ\n\tg_pTerrain->InitTerrain(200, 200, 60.0f, 8.0f);  //ĸֱֵǶ࣬ϵ\n\n\t//ʼն\n\tg_pSkyBox = new SkyBoxClass( g_pd3dDevice );\n\tg_pSkyBox->LoadSkyTextureFromFile(L\"GameMedia\\\\TropicalSunnyDayFront2048.png\",L\"GameMedia\\\\TropicalSunnyDayBack2048.png\",L\"GameMedia\\\\TropicalSunnyDayRight2048.png\",L\"GameMedia\\\\TropicalSunnyDayLeft2048.png\", L\"GameMedia\\\\TropicalSunnyDayUp2048.png\");//ļǰҡ5ͼ\n\tg_pSkyBox->InitSkyBox(50000);  //պеı߳\n\n\t//ʼѩϵͳ\n\tg_pSnowParticles = new SnowParticleClass(g_pd3dDevice);\n\tg_pSnowParticles->InitSnowParticle();\n\n\n\treturn S_OK;\n}\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd,FLOAT fTimeDelta)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ƶӽ\n\tif (g_pDInput->IsKeyDown(DIK_A))  g_pCamera->MoveAlongRightVec(-3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_D))  g_pCamera->MoveAlongRightVec( 3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_W)) g_pCamera->MoveAlongLookVec( 3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_S))  g_pCamera->MoveAlongLookVec(-3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_R))  g_pCamera->MoveAlongUpVec( 3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_F))  g_pCamera->MoveAlongUpVec(-3.0f);\n\n\t//תӽ\n\tif (g_pDInput->IsKeyDown(DIK_LEFT))  g_pCamera->RotationUpVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT))  g_pCamera->RotationUpVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_UP))  g_pCamera->RotationRightVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_DOWN))  g_pCamera->RotationRightVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_Q)) g_pCamera->RotationLookVec(0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_E)) g_pCamera->RotationLookVec( -0.003f);\n\n\t//ת\n\tg_pCamera->RotationUpVec(g_pDInput->MouseDX()* 0.001f);\n\tg_pCamera->RotationRightVec(g_pDInput->MouseDY() * 0.001f);\n\n\t//ֿƹ۲\n\tstatic FLOAT fPosZ=0.0f;\n\tfPosZ += g_pDInput->MouseDZ()*0.03f;\n\n\t//㲢ȡ任\n\tD3DXMATRIX matView;\n\tg_pCamera->CalculateViewMatrix(&matView);\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);\n\n\t//ȷ任浽g_matWorld\n\tD3DXMatrixTranslation(&g_matWorld, 0.0f, 0.0f, fPosZ);\n\n\n\t//δƶ\n\tPOINT lt,rb;\n\tRECT rect;\n\tGetClientRect(hwnd,&rect);  //ȡôڲ\n\t//ϵlt\n\tlt.x = rect.left;\n\tlt.y = rect.top;\n\t//rb\n\trb.x = rect.right;\n\trb.y = rect.bottom;\n\t//ltrbĴתΪĻ\n\tClientToScreen(hwnd,&lt);\n\tClientToScreen(hwnd,&rb);\n\t//Ļ趨\n\trect.left = lt.x;\n\trect.top = lt.y;\n\trect.right = rb.x;\n\trect.bottom = rb.y;\n\t//ƶ\n\tClipCursor(&rect);\n\n\tShowCursor(false);\t\t//\n\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd,FLOAT fTimeDelta)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(100, 255, 255), 1.0f, 0);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\t//\n\tD3DXMATRIX mScal,mRot2,mTrans,mFinal;   //һЩ׼ԴƷо任\n\tD3DXMatrixTranslation(&mTrans,50.0f,1200.0f,0.0f);\n\tD3DXMatrixScaling(&mScal,3.0f,3.0f,3.0f);\n\tmFinal=mScal*mTrans*g_matWorld;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal);//ģ͵Ϊ׼\n\t// һforѭģ͵ֵĻ\n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);  //ô˲ֵĲ\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);//ô˲ֵ\n\t\tg_pMesh->DrawSubset(i);  //ƴ˲\n\t}\n\n\n\t//\n\tD3DXMATRIX TransMatrix, RotMatrix, FinalMatrix;\n\tD3DXMatrixRotationX(&RotMatrix, -D3DX_PI * 0.5f);\n\tg_pd3dDevice->SetLight(0, &g_Light);  \n\tg_pd3dDevice->SetMaterial(&g_MaterialCylinder);\n\tg_pd3dDevice->SetTexture(0, NULL);//ô˲ֵ\n\tfor(int i = 0; i < 4; i++)\n\t{\n\t\tD3DXMatrixTranslation(&TransMatrix, -300.0f, 0.0f, -350.0f + (i * 500.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\n\t\tD3DXMatrixTranslation(&TransMatrix, 300.0f, 0.0f, -350.0f + (i * 500.0f));\n\t\tFinalMatrix = RotMatrix * TransMatrix ;\n\t\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);\n\t\tg_cylinder->DrawSubset(0);\n\t}\n\n\n\t//Ƶ\n\tg_pTerrain->RenderTerrain(&g_matWorld, false);  //ȾΣҵڶΪfalseʾȾε߿\n\n\t//\n\tD3DXMATRIX matSky,matTransSky,matRotSky;\n\tD3DXMatrixTranslation(&matTransSky,0.0f,-12000.0f,0.0f);\n\tD3DXMatrixRotationY(&matRotSky, -0.000005f*timeGetTime());   //ת, ģƲ˶Ч\n\tmatSky=matTransSky*matRotSky;\n\tg_pSkyBox->RenderSkyBox(&matSky, false);\n\n\t//ѩϵͳ\n\tg_pSnowParticles->UpdateSnowParticle(fTimeDelta);\n\tg_pSnowParticles->RenderSnowParticle();\n\n\t//Ϣ\n\tHelpText_Render(hwnd);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------HelpText_Render( )-------------------------------\n//\tװ˰Ϣĺ\n//--------------------------------------------------------------------------------------------------\nvoid HelpText_Render(HWND hwnd)\n{\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//ڴϽǴʾÿ֡\n\tformatRect.top = 5;\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    Wǰ     S \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    A     Dҷ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    RֱϷ     Fֱ·\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    Qб       Eб\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷƶӽǱ仯 \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"     ֣ģY᷽ƶ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\tSAFE_DELETE(g_pTextures); \n\tSAFE_DELETE(g_pMaterials); \n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_cylinder);\n\tSAFE_RELEASE(g_pMesh);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/SkyBoxClass.cpp",
    "content": "//=============================================================================\n// Name: SkyBoxClass.cpp\n//\tDes: һװάպϵͳԴļ\n// 2013 324  Create by ǳī \n//=============================================================================\n#include \"d3dx9.h\"\n#include \"SkyBoxClass.h\"\n#include \"D3DUtil.h\"\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: 캯\n//-------------------------------------------------------------------------------------------------\nSkyBoxClass::SkyBoxClass( LPDIRECT3DDEVICE9  pDevice )\n{\n\t//ֵ\n\tm_pVertexBuffer=NULL;\n\tm_pd3dDevice=pDevice;\n\tfor(int i=0; i<5; i++)\n\t\tm_pTexture[i] = NULL; \n\tm_Length = 0.0f;\n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SkyBoxClass::InitSkyBox( )\n// Desc: պгʼ㻺ĸֵ\n//-------------------------------------------------------------------------------------------------\nBOOL SkyBoxClass::InitSkyBox( float Length )\n{\n\tm_Length=Length;\n\n\t//1.㻺\n\t m_pd3dDevice->CreateVertexBuffer( 20 * sizeof(SKYBOXVERTEX), 0, \n\t\tD3DFVF_SKYBOX, D3DPOOL_MANAGED, &m_pVertexBuffer, 0 );\n\n\t//һṹѶ׼\n\tSKYBOXVERTEX vertices[] =\n    {\n\t\t//ǰĸ\n\t\t{ -m_Length/2, 0.0f,    m_Length/2, 0.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,   m_Length/2, 0.0f, 0.0f, },\n\t\t{  m_Length/2, 0.0f,    m_Length/2, 1.0f, 1.0f, },\n\t\t{  m_Length/2, m_Length/2,   m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{  m_Length/2, 0.0f,   -m_Length/2, 0.0f, 1.0f, },\n\t\t{  m_Length/2, m_Length/2,  -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, 0.0f,   -m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,  -m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{ -m_Length/2, 0.0f,   -m_Length/2, 0.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,  -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, 0.0f,    m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,   m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{ m_Length/2, 0.0f,   m_Length/2, 0.0f, 1.0f, },\n\t\t{ m_Length/2, m_Length/2,  m_Length/2, 0.0f, 0.0f, },\n\t\t{ m_Length/2, 0.0f,  -m_Length/2, 1.0f, 1.0f, },\n\t\t{ m_Length/2, m_Length/2, -m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{  m_Length/2, m_Length/2, -m_Length/2, 1.0f, 0.0f, },\n\t\t{  m_Length/2, m_Length/2,  m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2, -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, m_Length/2,  m_Length/2, 0.0f, 1.0f, },\n\n    };\n\n\t//׼䶥\n    void* pVertices;\n\t//2.\n    m_pVertexBuffer->Lock( 0, 0, (void**)&pVertices, 0 );\n\t//3.ʡѽṹеֱӿ㻺\n    memcpy( pVertices, vertices, sizeof(vertices) );\n\t//4.\n\tm_pVertexBuffer->Unlock();\n\n\t return TRUE;\n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SkyBoxClass::LoadSkyTextureFromFile( )\n// Desc: պغ\n//-------------------------------------------------------------------------------------------------\nBOOL SkyBoxClass::LoadSkyTextureFromFile(\n\t\t\t\t\t\t\t\t\t\t\twchar_t *pFrontTextureFile, \n\t\t\t\t\t\t\t\t\t\t\twchar_t *pBackTextureFile,\n\t\t\t\t\t\t\t\t\t\t\twchar_t *pLeftTextureFile, \n\t\t\t\t\t\t\t\t\t\t\twchar_t *pRightTextureFile,\n\t\t\t\t\t\t\t\t\t\t\twchar_t *pTopTextureFile)\n{\n\t//ļ\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pFrontTextureFile, &m_pTexture[0] );  //ǰ\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pBackTextureFile,  &m_pTexture[1] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pLeftTextureFile,  &m_pTexture[2] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pRightTextureFile, &m_pTexture[3] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pTopTextureFile,   &m_pTexture[4] );  //\t\n\treturn TRUE;\n}\n\n\n\n//--------------------------------------------------------------------------------------\n// Name: SkyBoxClass::RenderSkyBox()\n// Desc: ƳպУͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nvoid SkyBoxClass::RenderSkyBox( D3DXMATRIX *pMatWorld, BOOL bRenderFrame )\n{\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);  //ɫϵĵһɫֵ\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );   //ɫϵĵһֵȡɫֵ\n\tm_pd3dDevice->SetTransform( D3DTS_WORLD, pMatWorld );  //\n\tm_pd3dDevice->SetStreamSource(0,m_pVertexBuffer, 0, sizeof(SKYBOXVERTEX));    //ѰļϢĶ㻺Ⱦˮ  \n\tm_pd3dDevice->SetFVF(D3DFVF_SKYBOX);  //FVFʽ\n\n\t//һforѭ5Ƴ\n\tfor(int i =0; i<5; i++)\n\t{\n\t\tm_pd3dDevice->SetTexture(0, m_pTexture[i]);\n\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);\n\t}\n\n\t//ǷȾ߿Ĵ\n\tif (bRenderFrame)  //ҪȾ߿Ļ\n\t{\n\t\tm_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n\t\t//һforѭ5߿Ƴ\n\t\tfor(int i =0; i<5; i++)\n\t\t{\n\t\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);\t//ƶ \n\t\t}\n\n\t\tm_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n\t}\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: \n//-------------------------------------------------------------------------------------------------\nSkyBoxClass::~SkyBoxClass(void)\n{\n\tSAFE_RELEASE( m_pVertexBuffer );\n\tfor(int i=0; i<5; i++)\n\t{\n\t\tSAFE_RELEASE( m_pTexture[i] );\n\t}\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/SkyBoxClass.h",
    "content": "//=============================================================================\n// Name: SkyBoxClass.h\n//\tDes: һװάպϵͳͷļ\n// 2013 324  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n\n//ΪպඨһFVFʽ\nstruct SKYBOXVERTEX\n{\n\tfloat\tx,y,z;\n\tfloat\tu,v;\n};\n#define D3DFVF_SKYBOX D3DFVF_XYZ|D3DFVF_TEX1\n\n\nclass SkyBoxClass\n{\nprivate:\n\tLPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n\tLPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//㻺\n\tLPDIRECT3DTEXTURE9\t\t\tm_pTexture[5];\t\t\t//5ӿڶ\n\tfloat\t\t\t\t\t\t\t\t\t\tm_Length;\t\t\t\t\t//պб߳\n\npublic:\n\tSkyBoxClass( LPDIRECT3DDEVICE9  pDevice );\t\t//캯\n\tvirtual ~SkyBoxClass(void);\t\t\t\t\t\t\t\t//\n\npublic:\n\tBOOL\tInitSkyBox( float Length );   //ʼպк\n\tBOOL\tLoadSkyTextureFromFile(wchar_t *pFrontTextureFile, wchar_t *pBackTextureFile,wchar_t *pLeftTextureFile, wchar_t *pRightTextureFile,wchar_t *pTopTextureFile);  //ļպϵ\n\tVOID\t\tRenderSkyBox( D3DXMATRIX *pMatWorld, BOOL bRenderFrame ); //Ⱦպ,ݵһ趨պ󣬵ڶѡǷȾ߿\n\n};\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/SnowParticleClass.cpp",
    "content": "//=============================================================================\n// Name: SnowParticleClass.cpp\n//\tDes: һװѩϵͳϵͳԴļ\n// 2013 331  Create by ǳī \n//=============================================================================\n\n#include \"d3dx9.h\"\n#include \"SnowParticleClass.h\"\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: 캯\n//-------------------------------------------------------------------------------------------------\nSnowParticleClass::SnowParticleClass(LPDIRECT3DDEVICE9 pd3dDevice)\n{\n\t//ֵ\n\tm_pd3dDevice=pd3dDevice;\n\tm_pVertexBuffer=NULL;\t\n\tfor(int i=0; i<5; i++)\n\t\tm_pTexture[i] = NULL; \n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SnowParticleClass::InitSnowParticle( )\n// Desc: ϵͳʼ\n//-------------------------------------------------------------------------------------------------\nHRESULT SnowParticleClass::InitSnowParticle( )\n{\n\t//ʼѩ\n\tsrand(GetTickCount());\n\tfor(int i=0; i<PARTICLE_NUMBER; i++)\n\t{\t\n\t\tm_Snows[i].x        = float(rand()%SNOW_SYSTEM_LENGTH_X-SNOW_SYSTEM_LENGTH_X/2);\n\t\tm_Snows[i].z        = float(rand()%SNOW_SYSTEM_WIDTH_Z-SNOW_SYSTEM_WIDTH_Z/2);\n\t\tm_Snows[i].y        = float(rand()%SNOW_SYSTEM_HEIGHT_Y);\n\t\tm_Snows[i].RotationY     = (rand()%100)/50.0f*D3DX_PI;\n\t\tm_Snows[i].RotationX   = (rand()%100)/50.0f*D3DX_PI;\n\t\tm_Snows[i].FallSpeed   = 300.0f + rand()%500;\n\t\tm_Snows[i].RotationSpeed   = 5.0f +  rand()%10/10.0f;\n\t\tm_Snows[i].TextureIndex = rand()%6;\n\t}\n\n\n\t//ѩӶ㻺\n\tm_pd3dDevice->CreateVertexBuffer( 4*sizeof(POINTVERTEX), 0, \n\t\tD3DFVF_POINTVERTEX,D3DPOOL_MANAGED, &m_pVertexBuffer, NULL );\n\n\t//ѩӶ㻺\n\tPOINTVERTEX vertices[] =\n\t{\n\t\t{ -30.0f, 0.0f, 0.0f,   0.0f, 1.0f, },\n\t\t{ -30.0f, 60.0f, 0.0f,   0.0f, 0.0f, },\n\t\t{  30.0f, 0.0f, 0.0f,   1.0f, 1.0f, }, \n\t\t{  30.0f, 60.0f, 0.0f,   1.0f, 0.0f, }\n\t};\n\t//\n\tVOID* pVertices;\n\tm_pVertexBuffer->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 );\n\t//\n\tmemcpy( pVertices, vertices, sizeof(vertices) );\n\t//\n\tm_pVertexBuffer->Unlock();\n\n\t//6ѩ\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow1.jpg\", &m_pTexture[0] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow2.jpg\", &m_pTexture[1] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow3.jpg\", &m_pTexture[2] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow4.jpg\", &m_pTexture[3] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow5.jpg\", &m_pTexture[4] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow6.jpg\", &m_pTexture[5] );\n\n\treturn S_OK;\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SnowParticleClass::UpdateSnowParticle( )\n// Desc: ϵͳº\n//-------------------------------------------------------------------------------------------------\nHRESULT SnowParticleClass::UpdateSnowParticle( float fElapsedTime)\n{\n\n\t//һforѭÿѩӵĵǰλúͽǶ\n\tfor(int i=0; i<PARTICLE_NUMBER; i++)\n\t{\n\t\tm_Snows[i].y -= m_Snows[i].FallSpeed*fElapsedTime;\n\n\t\t//ѩ䵽, ½߶Ϊ\n\t\tif(m_Snows[i].y<0)\n\t\t\tm_Snows[i].y = SNOW_SYSTEM_WIDTH_Z;\n\t\t//Ƕ\n\t\tm_Snows[i].RotationY    += m_Snows[i].RotationSpeed * fElapsedTime;\n\t\tm_Snows[i].RotationX  += m_Snows[i].RotationSpeed * fElapsedTime;\n\t}\n\n\treturn S_OK;\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SnowParticleClass::RenderSnowParticle( )\n// Desc: ϵͳȾ\n//-------------------------------------------------------------------------------------------------\nHRESULT SnowParticleClass::RenderSnowParticle(  )\n{\n\t//Ч\n\tm_pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );\n\n\t//״̬\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);   //ɫϵĵһɫֵ\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );   //ɫϵĵһֵȡɫֵ\n\tm_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );  //С״̬\n\tm_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); //Ŵ״̬\n\n\t//Alphaϵ\n\tm_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);   //Alpha\n\tm_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);   //ԴϵΪ1\n\tm_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);  //ĿϵΪ1\n\n\t//޳ģʽΪ޳κ\n\tm_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );\n\n\t//Ⱦѩ\n\tfor(int i=0; i<PARTICLE_NUMBER; i++)\n\t{\n\t\t//첢õǰѩӵ\n\t\tstatic D3DXMATRIX matYaw, matPitch, matTrans, matWorld;\n\t\tD3DXMatrixRotationY(&matYaw, m_Snows[i].RotationY);\n\t\tD3DXMatrixRotationX(&matPitch, m_Snows[i].RotationX);\n\t\tD3DXMatrixTranslation(&matTrans, m_Snows[i].x, m_Snows[i].y, m_Snows[i].z);\n\t\tmatWorld = matYaw * matPitch * matTrans;\n\t\tm_pd3dDevice->SetTransform( D3DTS_WORLD,  &matWorld);\n\n\t\t//Ⱦǰѩ\n\t\tm_pd3dDevice->SetTexture( 0, m_pTexture[m_Snows[i].TextureIndex] );    //\n\t\tm_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(POINTVERTEX));  //ѰļϢĶ㻺Ⱦˮ  \n\t\tm_pd3dDevice->SetFVF(D3DFVF_POINTVERTEX);    //FVFʽ\n\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);   //\n\n\t}\n\n\t//ָȾ״̬Alpha ޳״̬\n\tm_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);\n\tm_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );\n\tm_pd3dDevice->SetRenderState( D3DRS_LIGHTING, true );\n\n\treturn S_OK;\n}\n\n\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: \n//-------------------------------------------------------------------------------------------------\nSnowParticleClass::~SnowParticleClass()\n{\n\tSAFE_RELEASE(m_pVertexBuffer);\n\n\tfor(int i=0;i<3; i++)\n\t{\n\t\tSAFE_RELEASE(m_pTexture[i]);\n\t}\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/SnowParticleClass.h",
    "content": "//=============================================================================\n// Name: SnowParticleClass.h\n//\tDes: һװѩϵͳϵͳͷļ\n// 2013 331  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n#include \"D3DUtil.h\"\n#define  PARTICLE_NUMBER  15000   //ѩԿáͯЬȡСһ㡣\n#define  SNOW_SYSTEM_LENGTH_X\t20000   //ѩĳ\n#define  SNOW_SYSTEM_WIDTH_Z\t\t20000   //ѩĿ\n#define  SNOW_SYSTEM_HEIGHT_Y     20000   //ѩĸ߶\n\n//-------------------------------------------------------------------------------------------------\n//ѩӵFVFṹͶʽ\n//-------------------------------------------------------------------------------------------------\nstruct POINTVERTEX\n{\n\tfloat x, y, z;    //λ\n\tfloat u,v ;\t\t  //\n};\n#define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: ѩӽṹĶ\n//-------------------------------------------------------------------------------------------------\nstruct  SNOWPARTICLE\n{\n\tfloat x, y, z;      //λ\n\tfloat RotationY;         //ѩYתǶ\n\tfloat RotationX;       //ѩXתǶ\n\tfloat FallSpeed;       //ѩ½ٶ\n\tfloat RotationSpeed;       //ѩתٶ\n\tint   TextureIndex;     //\n};\n\n//-------------------------------------------------------------------------------------------------\n// Desc: ϵͳĶ\n//-------------------------------------------------------------------------------------------------\nclass SnowParticleClass\n{\nprivate:\n\tLPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n\tSNOWPARTICLE\t\t\t\t\t\tm_Snows[PARTICLE_NUMBER];    //ѩ\n\tLPDIRECT3DVERTEXBUFFER9   m_pVertexBuffer;      //Ӷ㻺\n\tLPDIRECT3DTEXTURE9\t\t\tm_pTexture[6];  //ѩ\n\npublic:\n\tSnowParticleClass(LPDIRECT3DDEVICE9 pd3dDevice);   //캯\n\t~SnowParticleClass();\t\t\t\t\t//\n\tHRESULT InitSnowParticle();        //ϵͳʼ\n\tHRESULT UpdateSnowParticle( float fElapsedTime);    //ϵͳº\n\tHRESULT RenderSnowParticle( );   //ϵͳȾ\n};\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/TerrainClass.cpp",
    "content": "//=============================================================================\n// Name: TerrainClass.cpp\n//\tDes: һװάϵͳԴļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#include \"TerrainClass.h\"\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nTerrainClass::TerrainClass(IDirect3DDevice9* pd3dDevice)\n{\n\t//Աֵ\n    m_pd3dDevice = pd3dDevice;\n    m_pTexture = NULL;\n    m_pIndexBuffer = NULL;\n    m_pVertexBuffer = NULL;\n    m_nCellsPerRow = 0;\n    m_nCellsPerCol = 0;\n    m_nVertsPerRow = 0;\n    m_nVertsPerCol = 0;\n    m_nNumVertices = 0;\n    m_fTerrainWidth = 0.0f;\n    m_fTerrainDepth = 0.0f;\n    m_fCellSpacing = 0.0f;\n    m_fHeightScale = 0.0f;\n}\n\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::LoadTerrainFromFile()\n// Desc: صθ߶ϢԼ\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile) \n{\n    // ļжȡ߶Ϣ\n    std::ifstream inFile;     \n    inFile.open(pRawFileName, std::ios::binary);   //öƵķʽļ\n\n    inFile.seekg(0,std::ios::end);\t\t\t\t\t\t\t//ļָƶļĩβ\n    std::vector<BYTE> inData(inFile.tellg());\t\t\t//ģ嶨һvector<BYTE>͵ıinDataʼֵΪǰλãС\n\n    inFile.seekg(std::ios::beg);\t\t\t\t\t\t\t\t//ļָƶļĿͷ׼ȡ߶Ϣ\n    inFile.read((char*)&inData[0], inData.size());\t//ؼһȡ߶Ϣ\n    inFile.close();\t\t\t\t\t\t\t\t\t\t\t\t\t//Թرļ\n\n    m_vHeightInfo.resize(inData.size());\t\t\t\t\t//m_vHeightInfoߴȡΪĳߴ\n\t//inDataеֵm_vHeightInfo\n    for (unsigned int i=0; i<inData.size(); i++)\t\t\n        m_vHeightInfo[i] = inData[i];\n\n    // ص\n    if (FAILED(D3DXCreateTextureFromFile(m_pd3dDevice, pTextureFile, &m_pTexture)))\n        return FALSE;\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::InitTerrain()\n// Desc: ʼεĸ߶, 䶥\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale) \n{\n    m_nCellsPerRow  = nRows;  //ÿеĵԪĿ\n    m_nCellsPerCol  = nCols;  //ÿеĵԪĿ\n    m_fCellSpacing  = fSpace;\t//Ԫļ\n    m_fHeightScale  = fScale; //߶ϵ\n    m_fTerrainWidth = nRows * fSpace;  //εĿ\n    m_fTerrainDepth = nCols * fSpace;  //ε\n    m_nVertsPerRow  = m_nCellsPerCol + 1;  //ÿеĶ\n    m_nVertsPerCol  = m_nCellsPerRow + 1; //ÿеĶ\n    m_nNumVertices  = m_nVertsPerRow * m_nVertsPerCol;  //\n\n    // ͨһforѭѵԭʼ߶ȳϵõźĸ߶\n    for(unsigned int i=0; i<m_vHeightInfo.size(); i++)\n        m_vHeightInfo[i] *= m_fHeightScale;\n\t//---------------------------------------------------------------\n    // εĶ\n\t//---------------------------------------------------------------\n\t//1㻺\n    if (FAILED(m_pd3dDevice->CreateVertexBuffer(m_nNumVertices * sizeof(TERRAINVERTEX), \n        D3DUSAGE_WRITEONLY, TERRAINVERTEX::FVF, D3DPOOL_MANAGED, &m_pVertexBuffer, 0)))\n        return FALSE;\n\t//2\n    TERRAINVERTEX *pVertices = NULL;\n    m_pVertexBuffer->Lock(0, 0, (void**)&pVertices, 0);\n\t//3ʣֵ\n    FLOAT fStartX = -m_fTerrainWidth / 2.0f, fEndX =  m_fTerrainWidth / 2.0f;\t\t//ָʼͽXֵ\n    FLOAT fStartZ =  m_fTerrainDepth / 2.0f, fEndZ = -m_fTerrainDepth / 2.0f;\t//ָʼͽZֵ\n    FLOAT fCoordU = 10.0f / (FLOAT)m_nCellsPerRow;     //ָĺֵ\n    FLOAT fCoordV = 10.0f / (FLOAT)m_nCellsPerCol;\t\t//ֵָ\n\n    int nIndex = 0, i = 0, j = 0;\n    for (float z = fStartZ; z >=fEndZ; z -= m_fCellSpacing, i++)\t\t//Z귽ʼ㵽мı\n    {\n        j = 0;\n        for (float x = fStartX; x <=fEndX; x += m_fCellSpacing, j++)\t//X귽ʼ㵽мı\n        {\n            nIndex = i * m_nCellsPerRow + j;\t\t//ָǰڶ㻺еλ\n            pVertices[nIndex] = TERRAINVERTEX(x, m_vHeightInfo[nIndex], z, j*fCoordU, i*fCoordV); //Ѷλڸ߶ͼжӦĸԼ긳ֵǰĶ\n            nIndex++;\t\t\t\t\t\t\t\t\t\t\t//Լ1\n        }\n    }\n\t//4\n    m_pVertexBuffer->Unlock();\n\n\t//---------------------------------------------------------------\n    // ε\n\t//---------------------------------------------------------------\n\t//1.\n    if (FAILED(m_pd3dDevice->CreateIndexBuffer(m_nNumVertices * 6 *sizeof(WORD), \n        D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_pIndexBuffer, 0)))\n        return FALSE;\n\t//2.\n    WORD* pIndices = NULL;\n    m_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\t//3.ʣֵ\n    nIndex = 0;\n    for(int row = 0; row < m_nCellsPerRow-1; row++)   //ÿ\n    {\n        for(int col = 0; col < m_nCellsPerCol-1; col++)  //ÿ\n        {\n\t\t\t//ABC\n            pIndices[nIndex]   =  row * m_nCellsPerRow + col;\t\t\t//A\n            pIndices[nIndex+1] =  row * m_nCellsPerRow + col + 1;  //B\n            pIndices[nIndex+2] = (row+1) * m_nCellsPerRow + col;\t//C\n\t\t\t//CBD\n            pIndices[nIndex+3] = (row+1) * m_nCellsPerRow + col;\t\t//C\n            pIndices[nIndex+4] =  row * m_nCellsPerRow + col + 1;\t\t//B\n            pIndices[nIndex+5] = (row+1) * m_nCellsPerRow + col + 1;//D\n\t\t\t//һԪ6\n            nIndex += 6;  //Լ6\n        }\n    }\n\t//4\n    m_pIndexBuffer->Unlock();\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::RenderTerrain()\n// Desc: ƳΣͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bRenderFrame) \n{\n    m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(TERRAINVERTEX));  \n    m_pd3dDevice->SetFVF(TERRAINVERTEX::FVF);//ָʹõʽĺ\n    m_pd3dDevice->SetIndices(m_pIndexBuffer);//  \n    m_pd3dDevice->SetTexture(0, m_pTexture);//\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);\t//رչ\n    m_pd3dDevice->SetTransform(D3DTS_WORLD, pMatWorld); //\n    m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n        m_nNumVertices, 0, m_nNumVertices * 2);\t\t//ƶ\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);  //򿪹\n    m_pd3dDevice->SetTexture(0, 0);\t//ÿ\n\n\t//ǷȾ߿Ĵ\n    if (bRenderFrame)  //ҪȾ߿Ļ\n    {\n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n        m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n            m_nNumVertices, 0, m_nNumVertices * 2);\t//ƶ  \n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n    }\n    return TRUE;\n}\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nTerrainClass::~TerrainClass(void)\n{\n\tSAFE_RELEASE(m_pTexture);\n\tSAFE_RELEASE(m_pIndexBuffer);\n\tSAFE_RELEASE(m_pVertexBuffer);\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo19/TerrainClass.h",
    "content": "//=============================================================================\n// Name: TerrainClass.h\n//\tDes: һװάϵͳͷļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <vector>\n#include <fstream>\n#include  \"D3DUtil.h\"\n\nclass TerrainClass\n{\nprivate:\n    LPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n    LPDIRECT3DTEXTURE9\t\t\tm_pTexture;\t\t\t\t//\n    LPDIRECT3DINDEXBUFFER9\tm_pIndexBuffer;\t\t\t//㻺\n    LPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//\n\n    int\t\t\t\t\t\t\t\tm_nCellsPerRow;\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nCellsPerCol;\t\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nVertsPerRow;\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nVertsPerCol;\t\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nNumVertices;\t\t// \n    FLOAT\t\t\t\t\t\tm_fTerrainWidth;\t\t// εĿ\n    FLOAT\t\t\t\t\t\tm_fTerrainDepth;\t\t// ε\n    FLOAT\t\t\t\t\t\tm_fCellSpacing;\t\t\t// Ԫļ\n    FLOAT\t\t\t\t\t\tm_fHeightScale;\t\t\t// ߶ϵ\n    std::vector<FLOAT>   m_vHeightInfo;\t\t\t// ڴŸ߶Ϣ\n\n\t//һεFVFʽ\n    struct TERRAINVERTEX\n    {\n        FLOAT _x, _y, _z;\n        FLOAT _u, _v;\n        TERRAINVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v) \n            :_x(x), _y(y), _z(z), _u(u), _v(v) {}\n        static const DWORD FVF = D3DFVF_XYZ | D3DFVF_TEX1;\n    };\n\npublic:\n    TerrainClass(IDirect3DDevice9 *pd3dDevice); //캯\n    virtual ~TerrainClass(void);\t\t//\n\npublic:\n    BOOL LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile);\t\t//ļظ߶ͼĺ\n    BOOL InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale);  //γʼ\n    BOOL RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bDrawFrame=FALSE);  //Ⱦ\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo2/D3Ddemo2.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo2\n//\t 20134 Create by ǳī\n//  Direct3DȾ岽 ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Direct3DȾ岽 ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9       g_pd3dDevice = NULL; //Direct3D豸\nID3DXFont*\t\t\t\t\t g_pFont=NULL;    //COMӿ\nfloat\t\t\t\t\t\t\t\t g_FPS = 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t g_strFPS[50];    //֡ʵַ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t//COMԴԼԴ\nfloat\t\t\t\t\t\t\tGet_FPS();\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\"Final Fantasy XIII.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\t//\n\tif(FAILED(D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"΢ź\"), &g_pFont)))\n\t\treturn E_FAIL;\n\tsrand(timeGetTime());      //ϵͳʱʼ \n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽƣдĶ\n\t//--------------------------------------------------------------------------------------\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pFont->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_XRGB(255,39,136));\n\n\t//100дһ\n\tformatRect.top = 100;//ֵָ\n\tg_pFont->DrawText(0, _T(\"ϨϷ롿\"), -1, &formatRect, DT_CENTER, \n\t\tD3DCOLOR_XRGB(68,139,256));\n\n\t//250дڶ\n\tformatRect.top = 250;\n\tg_pFont->DrawText(0, _T(\"Ϸ磬~\"), -1, &formatRect, \n\t\tDT_CENTER, D3DCOLOR_XRGB(255,255,255));\n\n\t//400д\n\tformatRect.top = 400;\n\tg_pFont->DrawText(0, _T(\"˰\"), -1, &formatRect, DT_CENTER, \n\t\tD3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256));//RGBֵ˰Ч\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n}\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int     frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_RELEASE(g_pFont)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/CameraClass.cpp",
    "content": "//=============================================================================\n// Name: CameraClass.cpp\n//\tDes: һװʵԴļ\n// 2013 310  Create by ǳī \n//=============================================================================\n#include \"CameraClass.h\"\n\n#ifndef WINDOW_WIDTH\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#endif\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nCameraClass::CameraClass(IDirect3DDevice9 *pd3dDevice)\n{\n    m_pd3dDevice = pd3dDevice;\n    m_vRightVector  = D3DXVECTOR3(1.0f, 0.0f, 0.0f);   // ĬXغ\n    m_vUpVector     = D3DXVECTOR3(0.0f, 1.0f, 0.0f);   // ĬYغ\n    m_vLookVector   = D3DXVECTOR3(0.0f, 0.0f, 1.0f);   // ĬϹ۲Zغ\n    m_vCameraPosition  = D3DXVECTOR3(0.0f, 0.0f, -250.0f);   // ĬΪ(0.0f, 0.0f, -250.0f)\n    m_vTargetPosition    = D3DXVECTOR3(0.0f, 0.0f, 0.0f);//ĬϹ۲ĿλΪ(0.0f, 0.0f, 0.0f);\n\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::CalculateViewMatrix( )\n// Desc: ݸľȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::CalculateViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//1.Ȱ3淶ʹ໥ֱΪһ\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);  //淶۲\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);    // ۲ֱ\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);                // 淶\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);    // ֱ\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);          // 淶\n\n\n    // 2.ȡ任\n\t//дȡ任ĵһ\n    pMatrix->_11 = m_vRightVector.x;           // Rx\n    pMatrix->_12 = m_vUpVector.x;              // Ux\n    pMatrix->_13 = m_vLookVector.x;            // Lx\n    pMatrix->_14 = 0.0f;\n\t//дȡ任ĵڶ\n    pMatrix->_21 = m_vRightVector.y;           // Ry\n    pMatrix->_22 = m_vUpVector.y;              // Uy\n    pMatrix->_23 = m_vLookVector.y;            // Ly\n    pMatrix->_24 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_31 = m_vRightVector.z;           // Rz\n    pMatrix->_32 = m_vUpVector.z;              // Uz\n    pMatrix->_33 = m_vLookVector.z;            // Lz\n    pMatrix->_34 = 0.0f;\n\t//дȡ任ĵ\n    pMatrix->_41 = -D3DXVec3Dot(&m_vRightVector, &m_vCameraPosition);    // -P*R\n    pMatrix->_42 = -D3DXVec3Dot(&m_vUpVector, &m_vCameraPosition);       // -P*U\n    pMatrix->_43 = -D3DXVec3Dot(&m_vLookVector, &m_vCameraPosition);     // -P*L\n    pMatrix->_44 = 1.0f;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetTargetPosition( )\n// Desc: Ĺ۲λ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetTargetPosition(D3DXVECTOR3 *pLookat) \n{\n\t//ȿpLookatǷΪĬֵNULL\n    if (pLookat != NULL)  m_vTargetPosition = (*pLookat);\n    else m_vTargetPosition = D3DXVECTOR3(0.0f, 0.0f, 1.0f);\n\n    m_vLookVector = m_vTargetPosition - m_vCameraPosition;//۲λüλãõ۲췽\n    D3DXVec3Normalize(&m_vLookVector, &m_vLookVector);//淶m_vLookVector\n\n\t//淶m_vUpVectorm_vRightVector\n    D3DXVec3Cross(&m_vUpVector, &m_vLookVector, &m_vRightVector);\n    D3DXVec3Normalize(&m_vUpVector, &m_vUpVector);\n    D3DXVec3Cross(&m_vRightVector, &m_vUpVector, &m_vLookVector);\n    D3DXVec3Normalize(&m_vRightVector, &m_vRightVector);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetCameraPosition( )\n// Desc: ڵλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetCameraPosition(D3DXVECTOR3 *pVector) \n{\n    D3DXVECTOR3 V = D3DXVECTOR3(0.0f, 0.0f, -250.0f);\n    m_vCameraPosition = pVector ? (*pVector) : V;//ĿpVectorΪĻ\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//*pVectorֵm_vCameraPosition=*pVector\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//򷵻Vֵm_vCameraPosition=V\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetViewMatrix( )\n// Desc: ȡ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetViewMatrix(D3DXMATRIX *pMatrix) \n{\n\t//pMatrixֵһж\n    if (pMatrix) m_matView = *pMatrix;\n    else CalculateViewMatrix(&m_matView);\n    m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);\n    //ȡ任ֱֵҷϷ͹۲\n    m_vRightVector = D3DXVECTOR3(m_matView._11, m_matView._12, m_matView._13);\n    m_vUpVector    = D3DXVECTOR3(m_matView._21, m_matView._22, m_matView._23);\n    m_vLookVector  = D3DXVECTOR3(m_matView._31, m_matView._32, m_matView._33);\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::SetProjMatrix( )\n// Desc: ͶӰ任\n//-----------------------------------------------------------------------------\nVOID CameraClass::SetProjMatrix(D3DXMATRIX *pMatrix) \n{\n\t//жֵûУûеĻͼһ\n    if (pMatrix != NULL) m_matProj = *pMatrix;\n    else D3DXMatrixPerspectiveFovLH(&m_matProj, D3DX_PI / 4.0f, (float)((double)WINDOW_WIDTH/WINDOW_HEIGHT), 1.0f, 300000.0f);//ӽԶһ㣬Ͳ¿Զ\n    m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProj);//ͶӰ任\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongRightVec( )\n// Desc: ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongRightVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vRightVector * fUnits;\n    m_vTargetPosition   += m_vRightVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongUpVec( )\n// Desc:  ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongUpVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vUpVector * fUnits;\n    m_vTargetPosition   += m_vUpVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::MoveAlongLookVec( )\n// Desc:  ع۲ƽfUnitsλ\n//-----------------------------------------------------------------------------\nVOID CameraClass::MoveAlongLookVec(FLOAT fUnits) \n{\n\t//ֱӳfUnitsۼӾ\n    m_vCameraPosition += m_vLookVector * fUnits;\n    m_vTargetPosition   += m_vLookVector * fUnits;\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationRightVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationRightVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vRightVector, fAngle);//m_vRightVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vRightVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vRightVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationUpVec( )\n// Desc:  תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationUpVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vUpVector, fAngle);//m_vUpVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vUpVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vLookVector, &m_vLookVector, &R);//m_vLookVectorm_vUpVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n//-----------------------------------------------------------------------------\n// NameCameraClass::RotationLookVec( )\n// Desc:  ع۲תfAngleȵλĽǶ\n//-----------------------------------------------------------------------------\nVOID CameraClass::RotationLookVec(FLOAT fAngle) \n{\n    D3DXMATRIX R;\n    D3DXMatrixRotationAxis(&R, &m_vLookVector, fAngle);//m_vLookVectorתfAngleǶȵR\n    D3DXVec3TransformCoord(&m_vRightVector, &m_vRightVector, &R);//m_vRightVectorm_vLookVectorתfAngleǶ\n    D3DXVec3TransformCoord(&m_vUpVector, &m_vUpVector, &R);//m_vUpVectorm_vLookVectorתfAngleǶ\n\n    m_vTargetPosition = m_vLookVector * D3DXVec3Length(&m_vCameraPosition);//һ¹۲λãģ=\n}\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nCameraClass::~CameraClass(void)\n{\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/CameraClass.h",
    "content": "//=============================================================================\n// Name: CameraClass.h\n//\tDes: һװʵͷļ\n// 2013 310  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n\nclass CameraClass\n{\nprivate:\n\t//Ա\n    D3DXVECTOR3\t\t\t\tm_vRightVector;        // ҷ\n    D3DXVECTOR3\t\t\t\tm_vUpVector;           // Ϸ\n    D3DXVECTOR3\t\t\t\tm_vLookVector;         // ۲췽\n    D3DXVECTOR3\t\t\t\tm_vCameraPosition;        // λõ\n\tD3DXVECTOR3\t\t\t\tm_vTargetPosition;        //Ŀ۲λõ\n    D3DXMATRIX\t\t\t\tm_matView;          // ȡ任\n    D3DXMATRIX\t\t\t\tm_matProj;          // ͶӰ任   \n    LPDIRECT3DDEVICE9\t\tm_pd3dDevice;  //Direct3D豸\n\npublic:\n\t//һȡ任ĺ\n    VOID CalculateViewMatrix(D3DXMATRIX *pMatrix);    //ȡ任\n\n\t//Getϵк\n    VOID GetProjMatrix(D3DXMATRIX *pMatrix)  { *pMatrix = m_matProj; }  //صǰͶӰ\n    VOID GetCameraPosition(D3DXVECTOR3 *pVector)  { *pVector = m_vCameraPosition; } //صǰλþ\n    VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVector; }  //صǰĹ۲\n\n\t//ĸSetϵкעǲĬֵNULLģʱдҲ\n    VOID SetTargetPosition(D3DXVECTOR3 *pLookat = NULL);  //Ŀ۲λ\n    VOID SetCameraPosition(D3DXVECTOR3 *pVector = NULL); //ڵλ\n    VOID SetViewMatrix(D3DXMATRIX *pMatrix = NULL);  //ȡ任\n    VOID SetProjMatrix(D3DXMATRIX *pMatrix = NULL);  //ͶӰ任\n\npublic:\n    // ظƽƵ\n    VOID MoveAlongRightVec(FLOAT fUnits);   // rightƶ\n    VOID MoveAlongUpVec(FLOAT fUnits);      // upƶ\n    VOID MoveAlongLookVec(FLOAT fUnits);    // lookƶ\n\n    // Ƹת\n    VOID RotationRightVec(FLOAT fAngle);    // rightת\n    VOID RotationUpVec(FLOAT fAngle);       // upת\n    VOID RotationLookVec(FLOAT fAngle);     // lookת\n\npublic:\n\t//캯\n\tCameraClass(IDirect3DDevice9 *pd3dDevice);  //캯\n\tvirtual ~CameraClass(void);  //\n\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/D3DUtil.h",
    "content": "\n//*****************************************************************************************\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//*****************************************************************************************\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif\n\n#ifndef SAFE_DELETE_ARRAY\n#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }\n#endif    "
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/D3Ddemo20.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo20\n//\t 20134 Create by ǳī\n//  Ľ٣Ϸģ͵ ʾ\n//\tزĳ ħ3\n//  ģزĳӢ޵6 ư\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT 700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t _T(\"ϨϷ롿Ľ٣Ϸģ͵ \") //Ϊڱⶨĺ\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                      \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n#include \"CameraClass.h\"\n#include \"TerrainClass.h\"\n#include \"SkyBoxClass.h\"\n#include \"SnowParticleClass.h\"\n#include \"XFileModelClass.h\"\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------  \n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputĿļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL;\t\t\t\t//Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS =NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor= NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50] ={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60] ={0};   //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;\t\t\t\t\t\t\t//\nD3DLIGHT9\t\t\t\t\t\t\t\tg_Light;   //ȫֹ\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;\t\t\t\t//DInputClassָʵ\nCameraClass*\t\t\t\t\t\t\tg_pCamera = NULL;\t\t\t\t//ָʵ\nTerrainClass*\t\t\t\t\t\t\t\tg_pTerrain = NULL;\t\t\t\t//ָʵ\nSkyBoxClass*\t\t\t\t\t\t\t\tg_pSkyBox=NULL;\t\t\t\t\t//պָʵ\nSnowParticleClass*\t\t\t\t\t\tg_pSnowParticles = NULL;\t\t//ѩϵͳָʵ\nXFileModelClass*\t\t\t\t\t\tg_pXFileModel1  = NULL;    //ģĵһ\nXFileModelClass*\t\t\t\t\t\tg_pXFileModel2  = NULL;\t  //ģĵڶ\nXFileModelClass*\t     \t\t\t\tg_pXFileModel3  = NULL;\t  //ģĵ\nXFileModelClass*\t\t\t\t\t\tg_pXFileModel4  = NULL;\t  //ģĵĸ\n \n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd,FLOAT fTimeDelta);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd,FLOAT fTimeDelta);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tHelpText_Render(HWND hwnd);\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"GameMedia\\\\icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,150,20,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ150,20\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); //ǰ̨Ƕռģʽ\n\tPlaySound(L\"GameMedia\\\\-.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tstatic FLOAT fLastTime  = (float)::timeGetTime();\n\t\tstatic FLOAT fCurrTime  = (float)::timeGetTime();\n\t\tstatic FLOAT fTimeDelta = 0.0f;\n\t\tfCurrTime  = (float)::timeGetTime();\n\t\tfTimeDelta = (fCurrTime - fLastTime) / 1000.0f;\n\t\tfLastTime  = fCurrTime;\n\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd,fTimeDelta);         //øºлĸ\n\t\t\tDirect3D_Render(hwnd,fTimeDelta);\t\t\t//ȾлȾ\t\t\t\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd,0.0f);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\n\t// ù  \n\t::ZeroMemory(&g_Light, sizeof(g_Light));  \n\tg_Light.Type          = D3DLIGHT_DIRECTIONAL;  \n\tg_Light.Ambient       = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f);  \n\tg_Light.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);  \n\tg_Light.Specular      = D3DXCOLOR(0.9f, 0.9f, 0.9f, 1.0f);  \n\tg_Light.Direction     = D3DXVECTOR3(1.0f, 1.0f, 1.0f);  \n\tg_pd3dDevice->SetLight(0, &g_Light);  \n\tg_pd3dDevice->LightEnable(0, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);  \n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\t// ʼ\n\tg_pCamera = new CameraClass(g_pd3dDevice);\n\tg_pCamera->SetCameraPosition(&D3DXVECTOR3(0.0f, 1200.0f, -2100.0f));  //ڵλ\n\tg_pCamera->SetTargetPosition(&D3DXVECTOR3(0.0f, 700.0f, 0.0f));  //Ŀ۲ڵλ\n\tg_pCamera->SetViewMatrix();  //ȡ任\n\tg_pCamera->SetProjMatrix();  //ͶӰ任\n\n\t// ʼ\n\tg_pTerrain = new TerrainClass(g_pd3dDevice);   \n\tg_pTerrain->LoadTerrainFromFile(L\"GameMedia\\\\heighmap.raw\", L\"GameMedia\\\\terrainstone.jpg\");\t\t//ļظ߶ͼ\n\tg_pTerrain->InitTerrain(200, 200, 60.0f, 8.0f);  //ĸֱֵǶ࣬ϵ\n\n\t//ʼն\n\tg_pSkyBox = new SkyBoxClass( g_pd3dDevice );\n\tg_pSkyBox->LoadSkyTextureFromFile(L\"GameMedia\\\\SunSetFront2048.png\",L\"GameMedia\\\\SunSetBack2048.png\",L\"GameMedia\\\\SunSetRight2048.png\",L\"GameMedia\\\\SunSetLeft2048.png\", L\"GameMedia\\\\SunSetUp2048.png\");//ļǰҡ5ͼ\n\tg_pSkyBox->InitSkyBox(50000);  //պеı߳\n\n\t//ʼѩϵͳ\n\tg_pSnowParticles = new SnowParticleClass(g_pd3dDevice);\n\tg_pSnowParticles->InitSnowParticle();\n\n\tHRESULT hr;\n\t//һģ\n\tg_pXFileModel1 = new XFileModelClass(g_pd3dDevice);\n\tHR( g_pXFileModel1->LoadModelFromXFile(L\"knight.X\" ));\n\t//ڶģ\n\tg_pXFileModel2 = new XFileModelClass(g_pd3dDevice);\n\tHR( g_pXFileModel2->LoadModelFromXFile(L\"dragon.X\" ));\n\t//ģ\n\tg_pXFileModel3 = new XFileModelClass(g_pd3dDevice);\n\tHR( g_pXFileModel3->LoadModelFromXFile(L\"Demon.X\" ));\n\t//ĸģ\n\tg_pXFileModel4 = new XFileModelClass(g_pd3dDevice);\n\tHR( g_pXFileModel4->LoadModelFromXFile(L\"angle.X\" ));\t\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd,FLOAT fTimeDelta)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ƶӽ\n\tif (g_pDInput->IsKeyDown(DIK_A))  g_pCamera->MoveAlongRightVec(-3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_D))  g_pCamera->MoveAlongRightVec( 3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_W)) g_pCamera->MoveAlongLookVec( 3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_S))  g_pCamera->MoveAlongLookVec(-3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_R))  g_pCamera->MoveAlongUpVec( 3.0f);\n\tif (g_pDInput->IsKeyDown(DIK_F))  g_pCamera->MoveAlongUpVec(-3.0f);\n\n\t//תӽ\n\tif (g_pDInput->IsKeyDown(DIK_LEFT))  g_pCamera->RotationUpVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_RIGHT))  g_pCamera->RotationUpVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_UP))  g_pCamera->RotationRightVec(-0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_DOWN))  g_pCamera->RotationRightVec( 0.003f);\n\tif (g_pDInput->IsKeyDown(DIK_Q)) g_pCamera->RotationLookVec(0.001f);\n\tif (g_pDInput->IsKeyDown(DIK_E)) g_pCamera->RotationLookVec( -0.001f);\n\n\t//ת\n\tg_pCamera->RotationUpVec(g_pDInput->MouseDX()* 0.0006f);\n\tg_pCamera->RotationRightVec(g_pDInput->MouseDY() * 0.0006f);\n\n\t//ֿƹ۲\n\tstatic FLOAT fPosZ=0.0f;\n\tfPosZ += g_pDInput->MouseDZ()*0.03f;\n\n\t//㲢ȡ任\n\tD3DXMATRIX matView;\n\tg_pCamera->CalculateViewMatrix(&matView);\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);\n\n\t//ȷ任浽g_matWorld\n\tD3DXMatrixTranslation(&g_matWorld, 0.0f, 0.0f, fPosZ);\n\n\n\t//δƶ\n\tPOINT lt,rb;\n\tRECT rect;\n\tGetClientRect(hwnd,&rect);  //ȡôڲ\n\t//ϵlt\n\tlt.x = rect.left;\n\tlt.y = rect.top;\n\t//rb\n\trb.x = rect.right;\n\trb.y = rect.bottom;\n\t//ltrbĴתΪĻ\n\tClientToScreen(hwnd,&lt);\n\tClientToScreen(hwnd,&rb);\n\t//Ļ趨\n\trect.left = lt.x;\n\trect.top = lt.y;\n\trect.right = rb.x;\n\trect.bottom = rb.y;\n\t//ƶ\n\tClipCursor(&rect);\n\n\tShowCursor(false);\t\t//\n\n}\n\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd,FLOAT fTimeDelta)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(100, 255, 255), 1.0f, 0);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\n\t//-----------------------------Ϸģ͡-----------------------------\n\t//һЩ׼ģͽо任\n\tD3DXMATRIX mScal1,mScal2,mTrans1,mTrans2,mTrans3,mTrans4;\n\tD3DXMATRIX mFinal1,mFinal2,mFinal3,mFinal4;   \n\n\t//һģ͵ĻƣǡϡģͺʵȻٻ\n\tD3DXMatrixTranslation(&mTrans1,50.0f,400.0f,0.0f);\n\tD3DXMatrixScaling(&mScal1,3.0f,3.0f,3.0f);\n\tmFinal1=mTrans1*mScal1*g_matWorld;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal1);//ģ͵Ϊ׼\n\tg_pXFileModel1->RenderModel( );\n\n\t//ڶģ͵ĻƣǡϡģͺʵȻٻ\n\tD3DXMatrixTranslation(&mTrans2, 200.0f, 0.0f, 0.0f);\n\tmFinal2=mTrans2*mFinal1;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal2);\n\tg_pXFileModel2->RenderModel( );\n\n\t//ģ͵ĻƣǡϡģͺʵȻٻ\n\tD3DXMatrixTranslation(&mTrans3, -200.0f, 0.0f, 0.0f);\n\tmFinal3=mTrans3*mFinal1;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal3);\n\tg_pXFileModel3->RenderModel( );\n\t//ĸģ͵ĻƣǡϡģͺʵȻٻ\n\tD3DXMatrixScaling(&mScal2,10.0f,10.0f,10.0f);\n\tD3DXMatrixTranslation(&mTrans4, 10.0f, 20.0f, 250.0f);\n\tmFinal4=mTrans4*mScal2*mFinal1;\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal4);\n\tg_pXFileModel4->RenderModel( );\n\n\t//-----------------------------ƵΡ-----------------------------\n\tg_pTerrain->RenderTerrain(&g_matWorld, false);  //ȾΣҵڶΪfalseʾȾε߿\n\n\t//-----------------------------ա-----------------------------\n\tD3DXMATRIX matSky,matTransSky,matRotSky;\n\tD3DXMatrixTranslation(&matTransSky,0.0f,-12000.0f,0.0f);\n\tD3DXMatrixRotationY(&matRotSky, -0.00002f*timeGetTime());   //ת, ģƲ˶Ч\n\tmatSky=matTransSky*matRotSky;\n\tg_pSkyBox->RenderSkyBox(&matSky, false);\n\n\t//-----------------------------ѩϵͳ-----------------------------\n\tg_pSnowParticles->UpdateSnowParticle(fTimeDelta);\n\tg_pSnowParticles->RenderSnowParticle();\n\n\t//-----------------------------Ϣ-----------------------------\n\tHelpText_Render(hwnd);\n\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------HelpText_Render( )-------------------------------\n//\tװ˰Ϣĺ\n//--------------------------------------------------------------------------------------------------\nvoid HelpText_Render(HWND hwnd)\n{\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//ڴϽǴʾÿ֡\n\tformatRect.top = 5;\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t//ʾԿ\n\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t// Ϣ\n\tformatRect.left = 0,formatRect.top = 380;\n\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\tformatRect.top += 35;\n\tg_pTextHelper->DrawText(NULL, L\"    Wǰ     S \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    A     Dҷ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    RֱϷ     Fֱ·\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    Qб       Eб\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷƶӽǱ仯 \", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"     ֣ģY᷽ƶ\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\tformatRect.top += 25;\n\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\n\t//ͷCOMӿڶ\n\tSAFE_DELETE(g_pDInput);\n\tSAFE_RELEASE(g_pd3dDevice);\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/SkyBoxClass.cpp",
    "content": "//=============================================================================\n// Name: SkyBoxClass.cpp\n//\tDes: һװάպϵͳԴļ\n// 2013 324  Create by ǳī \n//=============================================================================\n#include \"d3dx9.h\"\n#include \"SkyBoxClass.h\"\n#include \"D3DUtil.h\"\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: 캯\n//-------------------------------------------------------------------------------------------------\nSkyBoxClass::SkyBoxClass( LPDIRECT3DDEVICE9  pDevice )\n{\n\t//ֵ\n\tm_pVertexBuffer=NULL;\n\tm_pd3dDevice=pDevice;\n\tfor(int i=0; i<5; i++)\n\t\tm_pTexture[i] = NULL; \n\tm_Length = 0.0f;\n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SkyBoxClass::InitSkyBox( )\n// Desc: պгʼ㻺ĸֵ\n//-------------------------------------------------------------------------------------------------\nBOOL SkyBoxClass::InitSkyBox( float Length )\n{\n\tm_Length=Length;\n\n\t//1.㻺\n\t m_pd3dDevice->CreateVertexBuffer( 20 * sizeof(SKYBOXVERTEX), 0, \n\t\tD3DFVF_SKYBOX, D3DPOOL_MANAGED, &m_pVertexBuffer, 0 );\n\n\t//һṹѶ׼\n\tSKYBOXVERTEX vertices[] =\n    {\n\t\t//ǰĸ\n\t\t{ -m_Length/2, 0.0f,    m_Length/2, 0.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,   m_Length/2, 0.0f, 0.0f, },\n\t\t{  m_Length/2, 0.0f,    m_Length/2, 1.0f, 1.0f, },\n\t\t{  m_Length/2, m_Length/2,   m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{  m_Length/2, 0.0f,   -m_Length/2, 0.0f, 1.0f, },\n\t\t{  m_Length/2, m_Length/2,  -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, 0.0f,   -m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,  -m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{ -m_Length/2, 0.0f,   -m_Length/2, 0.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,  -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, 0.0f,    m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2,   m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{ m_Length/2, 0.0f,   m_Length/2, 0.0f, 1.0f, },\n\t\t{ m_Length/2, m_Length/2,  m_Length/2, 0.0f, 0.0f, },\n\t\t{ m_Length/2, 0.0f,  -m_Length/2, 1.0f, 1.0f, },\n\t\t{ m_Length/2, m_Length/2, -m_Length/2, 1.0f, 0.0f, },\n\n\t\t//ĸ\n\t\t{  m_Length/2, m_Length/2, -m_Length/2, 1.0f, 0.0f, },\n\t\t{  m_Length/2, m_Length/2,  m_Length/2, 1.0f, 1.0f, },\n\t\t{ -m_Length/2, m_Length/2, -m_Length/2, 0.0f, 0.0f, },\n\t\t{ -m_Length/2, m_Length/2,  m_Length/2, 0.0f, 1.0f, },\n\n    };\n\n\t//׼䶥\n    void* pVertices;\n\t//2.\n    m_pVertexBuffer->Lock( 0, 0, (void**)&pVertices, 0 );\n\t//3.ʡѽṹеֱӿ㻺\n    memcpy( pVertices, vertices, sizeof(vertices) );\n\t//4.\n\tm_pVertexBuffer->Unlock();\n\n\t return TRUE;\n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SkyBoxClass::LoadSkyTextureFromFile( )\n// Desc: պغ\n//-------------------------------------------------------------------------------------------------\nBOOL SkyBoxClass::LoadSkyTextureFromFile(\n\t\t\t\t\t\t\t\t\t\t\twchar_t *pFrontTextureFile, \n\t\t\t\t\t\t\t\t\t\t\twchar_t *pBackTextureFile,\n\t\t\t\t\t\t\t\t\t\t\twchar_t *pLeftTextureFile, \n\t\t\t\t\t\t\t\t\t\t\twchar_t *pRightTextureFile,\n\t\t\t\t\t\t\t\t\t\t\twchar_t *pTopTextureFile)\n{\n\t//ļ\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pFrontTextureFile, &m_pTexture[0] );  //ǰ\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pBackTextureFile,  &m_pTexture[1] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pLeftTextureFile,  &m_pTexture[2] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pRightTextureFile, &m_pTexture[3] );  //\n\tD3DXCreateTextureFromFile( m_pd3dDevice , pTopTextureFile,   &m_pTexture[4] );  //\t\n\treturn TRUE;\n}\n\n\n\n//--------------------------------------------------------------------------------------\n// Name: SkyBoxClass::RenderSkyBox()\n// Desc: ƳպУͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nvoid SkyBoxClass::RenderSkyBox( D3DXMATRIX *pMatWorld, BOOL bRenderFrame )\n{\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);  //ɫϵĵһɫֵ\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );   //ɫϵĵһֵȡɫֵ\n\tm_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);\n\tm_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);\n\n\tm_pd3dDevice->SetTransform( D3DTS_WORLD, pMatWorld );  //\n\tm_pd3dDevice->SetStreamSource(0,m_pVertexBuffer, 0, sizeof(SKYBOXVERTEX));    //ѰļϢĶ㻺Ⱦˮ  \n\tm_pd3dDevice->SetFVF(D3DFVF_SKYBOX);  //FVFʽ\n\n\t//һforѭ5Ƴ\n\tfor(int i =0; i<5; i++)\n\t{\n\t\tm_pd3dDevice->SetTexture(0, m_pTexture[i]);\n\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);\n\t}\n\n\t//ǷȾ߿Ĵ\n\tif (bRenderFrame)  //ҪȾ߿Ļ\n\t{\n\t\tm_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n\t\t//һforѭ5߿Ƴ\n\t\tfor(int i =0; i<5; i++)\n\t\t{\n\t\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);\t//ƶ \n\t\t}\n\n\t\tm_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n\t}\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: \n//-------------------------------------------------------------------------------------------------\nSkyBoxClass::~SkyBoxClass(void)\n{\n\tSAFE_RELEASE( m_pVertexBuffer );\n\tfor(int i=0; i<5; i++)\n\t{\n\t\tSAFE_RELEASE( m_pTexture[i] );\n\t}\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/SkyBoxClass.h",
    "content": "//=============================================================================\n// Name: SkyBoxClass.h\n//\tDes: һװάպϵͳͷļ\n// 2013 324  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n\n//ΪպඨһFVFʽ\nstruct SKYBOXVERTEX\n{\n\tfloat\tx,y,z;\n\tfloat\tu,v;\n};\n#define D3DFVF_SKYBOX D3DFVF_XYZ|D3DFVF_TEX1\n\n\nclass SkyBoxClass\n{\nprivate:\n\tLPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n\tLPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//㻺\n\tLPDIRECT3DTEXTURE9\t\t\tm_pTexture[5];\t\t\t//5ӿڶ\n\tfloat\t\t\t\t\t\t\t\t\t\tm_Length;\t\t\t\t\t//պб߳\n\npublic:\n\tSkyBoxClass( LPDIRECT3DDEVICE9  pDevice );\t\t//캯\n\tvirtual ~SkyBoxClass(void);\t\t\t\t\t\t\t\t//\n\npublic:\n\tBOOL\tInitSkyBox( float Length );   //ʼպк\n\tBOOL\tLoadSkyTextureFromFile(wchar_t *pFrontTextureFile, wchar_t *pBackTextureFile,wchar_t *pLeftTextureFile, wchar_t *pRightTextureFile,wchar_t *pTopTextureFile);  //ļպϵ\n\tVOID\t\tRenderSkyBox( D3DXMATRIX *pMatWorld, BOOL bRenderFrame ); //Ⱦպ,ݵһ趨պ󣬵ڶѡǷȾ߿\n\n};\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/SnowParticleClass.cpp",
    "content": "//=============================================================================\n// Name: SnowParticleClass.cpp\n//\tDes: һװѩϵͳϵͳԴļ\n// 2013 331  Create by ǳī \n//=============================================================================\n\n#include \"d3dx9.h\"\n#include \"SnowParticleClass.h\"\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: 캯\n//-------------------------------------------------------------------------------------------------\nSnowParticleClass::SnowParticleClass(LPDIRECT3DDEVICE9 pd3dDevice)\n{\n\t//ֵ\n\tm_pd3dDevice=pd3dDevice;\n\tm_pVertexBuffer=NULL;\t\n\tfor(int i=0; i<5; i++)\n\t\tm_pTexture[i] = NULL; \n}\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SnowParticleClass::InitSnowParticle( )\n// Desc: ϵͳʼ\n//-------------------------------------------------------------------------------------------------\nHRESULT SnowParticleClass::InitSnowParticle( )\n{\n\t//ʼѩ\n\tsrand(GetTickCount());\n\tfor(int i=0; i<PARTICLE_NUMBER; i++)\n\t{\t\n\t\tm_Snows[i].x        = float(rand()%SNOW_SYSTEM_LENGTH_X-SNOW_SYSTEM_LENGTH_X/2);\n\t\tm_Snows[i].z        = float(rand()%SNOW_SYSTEM_WIDTH_Z-SNOW_SYSTEM_WIDTH_Z/2);\n\t\tm_Snows[i].y        = float(rand()%SNOW_SYSTEM_HEIGHT_Y);\n\t\tm_Snows[i].RotationY     = (rand()%100)/50.0f*D3DX_PI;\n\t\tm_Snows[i].RotationX   = (rand()%100)/50.0f*D3DX_PI;\n\t\tm_Snows[i].FallSpeed   = 300.0f + rand()%500;\n\t\tm_Snows[i].RotationSpeed   = 5.0f +  rand()%10/10.0f;\n\t\tm_Snows[i].TextureIndex = rand()%6;\n\t}\n\n\n\t//ѩӶ㻺\n\tm_pd3dDevice->CreateVertexBuffer( 4*sizeof(POINTVERTEX), 0, \n\t\tD3DFVF_POINTVERTEX,D3DPOOL_MANAGED, &m_pVertexBuffer, NULL );\n\n\t//ѩӶ㻺\n\tPOINTVERTEX vertices[] =\n\t{\n\t\t{ -30.0f, 0.0f, 0.0f,   0.0f, 1.0f, },\n\t\t{ -30.0f, 60.0f, 0.0f,   0.0f, 0.0f, },\n\t\t{  30.0f, 0.0f, 0.0f,   1.0f, 1.0f, }, \n\t\t{  30.0f, 60.0f, 0.0f,   1.0f, 0.0f, }\n\t};\n\t//\n\tVOID* pVertices;\n\tm_pVertexBuffer->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 );\n\t//\n\tmemcpy( pVertices, vertices, sizeof(vertices) );\n\t//\n\tm_pVertexBuffer->Unlock();\n\n\t//6ѩ\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow1.jpg\", &m_pTexture[0] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow2.jpg\", &m_pTexture[1] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow3.jpg\", &m_pTexture[2] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow4.jpg\", &m_pTexture[3] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow5.jpg\", &m_pTexture[4] );\n\tD3DXCreateTextureFromFile( m_pd3dDevice, L\"GameMedia\\\\snow6.jpg\", &m_pTexture[5] );\n\n\treturn S_OK;\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SnowParticleClass::UpdateSnowParticle( )\n// Desc: ϵͳº\n//-------------------------------------------------------------------------------------------------\nHRESULT SnowParticleClass::UpdateSnowParticle( float fElapsedTime)\n{\n\n\t//һforѭÿѩӵĵǰλúͽǶ\n\tfor(int i=0; i<PARTICLE_NUMBER; i++)\n\t{\n\t\tm_Snows[i].y -= m_Snows[i].FallSpeed*fElapsedTime;\n\n\t\t//ѩ䵽, ½߶Ϊ\n\t\tif(m_Snows[i].y<0)\n\t\t\tm_Snows[i].y = SNOW_SYSTEM_WIDTH_Z;\n\t\t//Ƕ\n\t\tm_Snows[i].RotationY    += m_Snows[i].RotationSpeed * fElapsedTime;\n\t\tm_Snows[i].RotationX  += m_Snows[i].RotationSpeed * fElapsedTime;\n\t}\n\n\treturn S_OK;\n}\n\n\n//-------------------------------------------------------------------------------------------------\n// Name:  SnowParticleClass::RenderSnowParticle( )\n// Desc: ϵͳȾ\n//-------------------------------------------------------------------------------------------------\nHRESULT SnowParticleClass::RenderSnowParticle(  )\n{\n\t//Ч\n\tm_pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );\n\n\t//״̬\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1);   //ɫϵĵһɫֵ\n\tm_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );   //ɫϵĵһֵȡɫֵ\n\tm_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );  //С״̬\n\tm_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); //Ŵ״̬\n\n\t//Alphaϵ\n\tm_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);   //Alpha\n\tm_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);   //ԴϵΪ1\n\tm_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);  //ĿϵΪ1\n\n\t//޳ģʽΪ޳κ\n\tm_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );\n\n\t//Ⱦѩ\n\tfor(int i=0; i<PARTICLE_NUMBER; i++)\n\t{\n\t\t//첢õǰѩӵ\n\t\tstatic D3DXMATRIX matYaw, matPitch, matTrans, matWorld;\n\t\tD3DXMatrixRotationY(&matYaw, m_Snows[i].RotationY);\n\t\tD3DXMatrixRotationX(&matPitch, m_Snows[i].RotationX);\n\t\tD3DXMatrixTranslation(&matTrans, m_Snows[i].x, m_Snows[i].y, m_Snows[i].z);\n\t\tmatWorld = matYaw * matPitch * matTrans;\n\t\tm_pd3dDevice->SetTransform( D3DTS_WORLD,  &matWorld);\n\n\t\t//Ⱦǰѩ\n\t\tm_pd3dDevice->SetTexture( 0, m_pTexture[m_Snows[i].TextureIndex] );    //\n\t\tm_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(POINTVERTEX));  //ѰļϢĶ㻺Ⱦˮ  \n\t\tm_pd3dDevice->SetFVF(D3DFVF_POINTVERTEX);    //FVFʽ\n\t\tm_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);   //\n\n\t}\n\n\t//ָȾ״̬Alpha ޳״̬\n\tm_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);\n\tm_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );\n\tm_pd3dDevice->SetRenderState( D3DRS_LIGHTING, true );\n\n\treturn S_OK;\n}\n\n\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: \n//-------------------------------------------------------------------------------------------------\nSnowParticleClass::~SnowParticleClass()\n{\n\tSAFE_RELEASE(m_pVertexBuffer);\n\n\tfor(int i=0;i<3; i++)\n\t{\n\t\tSAFE_RELEASE(m_pTexture[i]);\n\t}\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/SnowParticleClass.h",
    "content": "//=============================================================================\n// Name: SnowParticleClass.h\n//\tDes: һװѩϵͳϵͳͷļ\n// 2013 331  Create by ǳī \n//=============================================================================\n\n\n#pragma once\n#include \"D3DUtil.h\"\n#define  PARTICLE_NUMBER  3000   //ѩԿáͯЬȡСһ㡣\n#define  SNOW_SYSTEM_LENGTH_X\t20000   //ѩĳ\n#define  SNOW_SYSTEM_WIDTH_Z\t\t20000   //ѩĿ\n#define  SNOW_SYSTEM_HEIGHT_Y     20000   //ѩĸ߶\n\n//-------------------------------------------------------------------------------------------------\n//ѩӵFVFṹͶʽ\n//-------------------------------------------------------------------------------------------------\nstruct POINTVERTEX\n{\n\tfloat x, y, z;    //λ\n\tfloat u,v ;\t\t  //\n};\n#define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)\n\n\n//-------------------------------------------------------------------------------------------------\n// Desc: ѩӽṹĶ\n//-------------------------------------------------------------------------------------------------\nstruct  SNOWPARTICLE\n{\n\tfloat x, y, z;      //λ\n\tfloat RotationY;         //ѩYתǶ\n\tfloat RotationX;       //ѩXתǶ\n\tfloat FallSpeed;       //ѩ½ٶ\n\tfloat RotationSpeed;       //ѩתٶ\n\tint   TextureIndex;     //\n};\n\n//-------------------------------------------------------------------------------------------------\n// Desc: ϵͳĶ\n//-------------------------------------------------------------------------------------------------\nclass SnowParticleClass\n{\nprivate:\n\tLPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n\tSNOWPARTICLE\t\t\t\t\t\tm_Snows[PARTICLE_NUMBER];    //ѩ\n\tLPDIRECT3DVERTEXBUFFER9   m_pVertexBuffer;      //Ӷ㻺\n\tLPDIRECT3DTEXTURE9\t\t\tm_pTexture[6];  //ѩ\n\npublic:\n\tSnowParticleClass(LPDIRECT3DDEVICE9 pd3dDevice);   //캯\n\t~SnowParticleClass();\t\t\t\t\t//\n\tHRESULT InitSnowParticle();        //ϵͳʼ\n\tHRESULT UpdateSnowParticle( float fElapsedTime);    //ϵͳº\n\tHRESULT RenderSnowParticle( );   //ϵͳȾ\n};\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/TerrainClass.cpp",
    "content": "//=============================================================================\n// Name: TerrainClass.cpp\n//\tDes: һװάϵͳԴļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#include \"TerrainClass.h\"\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nTerrainClass::TerrainClass(IDirect3DDevice9* pd3dDevice)\n{\n\t//Աֵ\n    m_pd3dDevice = pd3dDevice;\n    m_pTexture = NULL;\n    m_pIndexBuffer = NULL;\n    m_pVertexBuffer = NULL;\n    m_nCellsPerRow = 0;\n    m_nCellsPerCol = 0;\n    m_nVertsPerRow = 0;\n    m_nVertsPerCol = 0;\n    m_nNumVertices = 0;\n    m_fTerrainWidth = 0.0f;\n    m_fTerrainDepth = 0.0f;\n    m_fCellSpacing = 0.0f;\n    m_fHeightScale = 0.0f;\n}\n\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::LoadTerrainFromFile()\n// Desc: صθ߶ϢԼ\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile) \n{\n    // ļжȡ߶Ϣ\n    std::ifstream inFile;     \n    inFile.open(pRawFileName, std::ios::binary);   //öƵķʽļ\n\n    inFile.seekg(0,std::ios::end);\t\t\t\t\t\t\t//ļָƶļĩβ\n    std::vector<BYTE> inData(inFile.tellg());\t\t\t//ģ嶨һvector<BYTE>͵ıinDataʼֵΪǰλãС\n\n    inFile.seekg(std::ios::beg);\t\t\t\t\t\t\t\t//ļָƶļĿͷ׼ȡ߶Ϣ\n    inFile.read((char*)&inData[0], inData.size());\t//ؼһȡ߶Ϣ\n    inFile.close();\t\t\t\t\t\t\t\t\t\t\t\t\t//Թرļ\n\n    m_vHeightInfo.resize(inData.size());\t\t\t\t\t//m_vHeightInfoߴȡΪĳߴ\n\t//inDataеֵm_vHeightInfo\n    for (unsigned int i=0; i<inData.size(); i++)\t\t\n        m_vHeightInfo[i] = inData[i];\n\n    // ص\n    if (FAILED(D3DXCreateTextureFromFile(m_pd3dDevice, pTextureFile, &m_pTexture)))\n        return FALSE;\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::InitTerrain()\n// Desc: ʼεĸ߶, 䶥\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale) \n{\n    m_nCellsPerRow  = nRows;  //ÿеĵԪĿ\n    m_nCellsPerCol  = nCols;  //ÿеĵԪĿ\n    m_fCellSpacing  = fSpace;\t//Ԫļ\n    m_fHeightScale  = fScale; //߶ϵ\n    m_fTerrainWidth = nRows * fSpace;  //εĿ\n    m_fTerrainDepth = nCols * fSpace;  //ε\n    m_nVertsPerRow  = m_nCellsPerCol + 1;  //ÿеĶ\n    m_nVertsPerCol  = m_nCellsPerRow + 1; //ÿеĶ\n    m_nNumVertices  = m_nVertsPerRow * m_nVertsPerCol;  //\n\n    // ͨһforѭѵԭʼ߶ȳϵõźĸ߶\n    for(unsigned int i=0; i<m_vHeightInfo.size(); i++)\n        m_vHeightInfo[i] *= m_fHeightScale;\n\t//---------------------------------------------------------------\n    // εĶ\n\t//---------------------------------------------------------------\n\t//1㻺\n    if (FAILED(m_pd3dDevice->CreateVertexBuffer(m_nNumVertices * sizeof(TERRAINVERTEX), \n        D3DUSAGE_WRITEONLY, TERRAINVERTEX::FVF, D3DPOOL_MANAGED, &m_pVertexBuffer, 0)))\n        return FALSE;\n\t//2\n    TERRAINVERTEX *pVertices = NULL;\n    m_pVertexBuffer->Lock(0, 0, (void**)&pVertices, 0);\n\t//3ʣֵ\n    FLOAT fStartX = -m_fTerrainWidth / 2.0f, fEndX =  m_fTerrainWidth / 2.0f;\t\t//ָʼͽXֵ\n    FLOAT fStartZ =  m_fTerrainDepth / 2.0f, fEndZ = -m_fTerrainDepth / 2.0f;\t//ָʼͽZֵ\n    FLOAT fCoordU = 10.0f / (FLOAT)m_nCellsPerRow;     //ָĺֵ\n    FLOAT fCoordV = 10.0f / (FLOAT)m_nCellsPerCol;\t\t//ֵָ\n\n    int nIndex = 0, i = 0, j = 0;\n    for (float z = fStartZ; z >=fEndZ; z -= m_fCellSpacing, i++)\t\t//Z귽ʼ㵽мı\n    {\n        j = 0;\n        for (float x = fStartX; x <=fEndX; x += m_fCellSpacing, j++)\t//X귽ʼ㵽мı\n        {\n            nIndex = i * m_nCellsPerRow + j;\t\t//ָǰڶ㻺еλ\n            pVertices[nIndex] = TERRAINVERTEX(x, m_vHeightInfo[nIndex], z, j*fCoordU, i*fCoordV); //Ѷλڸ߶ͼжӦĸԼ긳ֵǰĶ\n            nIndex++;\t\t\t\t\t\t\t\t\t\t\t//Լ1\n        }\n    }\n\t//4\n    m_pVertexBuffer->Unlock();\n\n\t//---------------------------------------------------------------\n    // ε\n\t//---------------------------------------------------------------\n\t//1.\n    if (FAILED(m_pd3dDevice->CreateIndexBuffer(m_nNumVertices * 6 *sizeof(WORD), \n        D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_pIndexBuffer, 0)))\n        return FALSE;\n\t//2.\n    WORD* pIndices = NULL;\n    m_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\t//3.ʣֵ\n    nIndex = 0;\n    for(int row = 0; row < m_nCellsPerRow-1; row++)   //ÿ\n    {\n        for(int col = 0; col < m_nCellsPerCol-1; col++)  //ÿ\n        {\n\t\t\t//ABC\n            pIndices[nIndex]   =  row * m_nCellsPerRow + col;\t\t\t//A\n            pIndices[nIndex+1] =  row * m_nCellsPerRow + col + 1;  //B\n            pIndices[nIndex+2] = (row+1) * m_nCellsPerRow + col;\t//C\n\t\t\t//CBD\n            pIndices[nIndex+3] = (row+1) * m_nCellsPerRow + col;\t\t//C\n            pIndices[nIndex+4] =  row * m_nCellsPerRow + col + 1;\t\t//B\n            pIndices[nIndex+5] = (row+1) * m_nCellsPerRow + col + 1;//D\n\t\t\t//һԪ6\n            nIndex += 6;  //Լ6\n        }\n    }\n\t//4\n    m_pIndexBuffer->Unlock();\n\n    return TRUE;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: TerrainClass::RenderTerrain()\n// Desc: ƳΣͨڶѡǷƳ߿\n//--------------------------------------------------------------------------------------\nBOOL TerrainClass::RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bRenderFrame) \n{\n    m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(TERRAINVERTEX));  \n    m_pd3dDevice->SetFVF(TERRAINVERTEX::FVF);//ָʹõʽĺ\n    m_pd3dDevice->SetIndices(m_pIndexBuffer);//  \n    m_pd3dDevice->SetTexture(0, m_pTexture);//\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);\t//رչ\n    m_pd3dDevice->SetTransform(D3DTS_WORLD, pMatWorld); //\n    m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n        m_nNumVertices, 0, m_nNumVertices * 2);\t\t//ƶ\n\n    m_pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);  //򿪹\n    m_pd3dDevice->SetTexture(0, 0);\t//ÿ\n\n\t//ǷȾ߿Ĵ\n    if (bRenderFrame)  //ҪȾ߿Ļ\n    {\n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //ģʽΪ߿\n        m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, \n            m_nNumVertices, 0, m_nNumVertices * 2);\t//ƶ  \n        m_pd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);\t//ģʽʵ\n    }\n    return TRUE;\n}\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nTerrainClass::~TerrainClass(void)\n{\n\tSAFE_RELEASE(m_pTexture);\n\tSAFE_RELEASE(m_pIndexBuffer);\n\tSAFE_RELEASE(m_pVertexBuffer);\n}"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/TerrainClass.h",
    "content": "//=============================================================================\n// Name: TerrainClass.h\n//\tDes: һװάϵͳͷļ\n// 2013 317  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <vector>\n#include <fstream>\n#include  \"D3DUtil.h\"\n\nclass TerrainClass\n{\nprivate:\n    LPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n    LPDIRECT3DTEXTURE9\t\t\tm_pTexture;\t\t\t\t//\n    LPDIRECT3DINDEXBUFFER9\tm_pIndexBuffer;\t\t\t//㻺\n    LPDIRECT3DVERTEXBUFFER9\tm_pVertexBuffer;\t\t//\n\n    int\t\t\t\t\t\t\t\tm_nCellsPerRow;\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nCellsPerCol;\t\t\t// ÿеĵԪ\n    int\t\t\t\t\t\t\t\tm_nVertsPerRow;\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nVertsPerCol;\t\t\t// ÿеĶ\n    int\t\t\t\t\t\t\t\tm_nNumVertices;\t\t// \n    FLOAT\t\t\t\t\t\tm_fTerrainWidth;\t\t// εĿ\n    FLOAT\t\t\t\t\t\tm_fTerrainDepth;\t\t// ε\n    FLOAT\t\t\t\t\t\tm_fCellSpacing;\t\t\t// Ԫļ\n    FLOAT\t\t\t\t\t\tm_fHeightScale;\t\t\t// ߶ϵ\n    std::vector<FLOAT>   m_vHeightInfo;\t\t\t// ڴŸ߶Ϣ\n\n\t//һεFVFʽ\n    struct TERRAINVERTEX\n    {\n        FLOAT _x, _y, _z;\n        FLOAT _u, _v;\n        TERRAINVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v) \n            :_x(x), _y(y), _z(z), _u(u), _v(v) {}\n        static const DWORD FVF = D3DFVF_XYZ | D3DFVF_TEX1;\n    };\n\npublic:\n    TerrainClass(IDirect3DDevice9 *pd3dDevice); //캯\n    virtual ~TerrainClass(void);\t\t//\n\npublic:\n    BOOL LoadTerrainFromFile(wchar_t *pRawFileName, wchar_t *pTextureFile);\t\t//ļظ߶ͼĺ\n    BOOL InitTerrain(INT nRows, INT nCols, FLOAT fSpace, FLOAT fScale);  //γʼ\n    BOOL RenderTerrain(D3DXMATRIX *pMatWorld, BOOL bDrawFrame=FALSE);  //Ⱦ\n};\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/XFileModelClass.cpp",
    "content": "//=============================================================================\n// Name: XFileModelClass.h\n//\tDes: һװXļȾܵԴļ\n// 2013 47  Create by ǳī \n//=============================================================================\n#include <d3dx9.h>\n#include <tchar.h> \n#include \"XFileModelClass.h\"\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nXFileModelClass::XFileModelClass(IDirect3DDevice9* pd3dDevice)\n{\t\n\t//Աֵ\n\tm_pd3dDevice = pd3dDevice;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: XFileModelClass::LoadModelFromXFile()\n// Desc: .Xļȡάģ͵ڴ\n//--------------------------------------------------------------------------------------\nHRESULT XFileModelClass::LoadModelFromXFile( WCHAR* strFilename )\n{\n\n\tLPD3DXBUFFER pAdjacencyBuffer = NULL;  //ģڽϢ\n\tLPD3DXBUFFER pD3DXMtrlBuffer = NULL;   //洢ģͲʵĻ\n\n\t//Ӵļģ\n\tD3DXLoadMeshFromX( strFilename, D3DXMESH_MANAGED,  m_pd3dDevice, &pAdjacencyBuffer, \n\t\t&pD3DXMtrlBuffer, NULL, &m_dwNumMaterials, &m_pMesh );\n\n\t// ȡʺ\n\tD3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();\n\tm_pMaterials = new D3DMATERIAL9[m_dwNumMaterials];\n\tm_pTextures  = new LPDIRECT3DTEXTURE9[m_dwNumMaterials];\n\n\t//ӼȡԺļ\n\tfor( DWORD i=0; i<m_dwNumMaterials; i++ )\n\t{\n\t\t//ȡʣһ»ɫֵ\n\t\tm_pMaterials[i] = d3dxMaterials[i].MatD3D;\n\t\tm_pMaterials[i].Ambient = m_pMaterials[i].Diffuse;\n\n\t\t//һ\n\t\tm_pTextures[i] = NULL;\n\t\tif( d3dxMaterials[i].pTextureFilename != NULL && \n\t\t\tstrlen(d3dxMaterials[i].pTextureFilename) > 0 )\n\t\t{\n\t\t\t//\n\t\t\tif( FAILED( D3DXCreateTextureFromFileA( m_pd3dDevice,d3dxMaterials[i].pTextureFilename, &m_pTextures[i] ) ) )\n\t\t\t{\n\t\t\t\tMessageBox(NULL, L\"SORRY~!ûҵļ!\", L\"XFileModelClassȡļ\", MB_OK);\n\t\t\t}\n\t\t}\n\t}\n\t//Żģ\n\tm_pMesh->OptimizeInplace( D3DXMESHOPT_COMPACT | D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_STRIPREORDER,\n\t\t(DWORD*)pAdjacencyBuffer->GetBufferPointer(), NULL, NULL, NULL );\n\n\treturn S_OK;\n}\n\n//--------------------------------------------------------------------------------------\n// Name: XFileModelClass::RenderModel()\n// Desc: Ⱦάģ\n//--------------------------------------------------------------------------------------\nHRESULT XFileModelClass::RenderModel( )\n{\n\tfor( DWORD i=0; i<m_dwNumMaterials; i++ )\n\t{\n\n\t\tm_pd3dDevice->SetMaterial( &m_pMaterials[i] );\n\t\tm_pd3dDevice->SetTexture( 0, m_pTextures[i] );\n\t\tm_pMesh->DrawSubset( i );\n\t}\n\treturn S_OK;\n}\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nXFileModelClass::~XFileModelClass(void)\n{\n\t//ͷģͲ\n\tSAFE_DELETE_ARRAY(m_pMaterials);\n\n\t//ͷģ\n\tif( m_pTextures )\n\t{\n\t\tfor( DWORD i = 0; i < m_dwNumMaterials; i++ )\n\t\t{\n\t\t\tSAFE_RELEASE(m_pTextures[i]);\n\t\t}\n\t\tSAFE_DELETE_ARRAY(m_pTextures);\n\t}\n\n\t//ͷģͶ\n\tSAFE_RELEASE(m_pMesh);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo20/XFileModelClass.h",
    "content": "//=============================================================================\n// Name: XFileModelClass.h\n//\tDes: һװXļȾܵͷļ\n// 2013 47  Create by ǳī \n//=============================================================================\n\n#pragma once\n#include \"D3DUtil.h\"\n\n\nclass XFileModelClass\n{\nprivate:\n\tLPDIRECT3DDEVICE9\t\t\t\tm_pd3dDevice;\t\t\t//D3D豸\n\tLPD3DXMESH\t\t\t\t\t\tm_pMesh;       //ģͶ\n\tDWORD\t\t\t\t\t\t\t\tm_dwNumMaterials; //ʵ\n\tD3DMATERIAL9*\t\t\t\t\tm_pMaterials;     //ģͲʽṹʵ\n\tLPDIRECT3DTEXTURE9 *\t\t\tm_pTextures;      //ģṹʵ\n\npublic:\n\tXFileModelClass(IDirect3DDevice9 *pd3dDevice); //캯\n\t~XFileModelClass(void);     //   \n\npublic:\n\tHRESULT\t\tLoadModelFromXFile(WCHAR* strFilename );  //.Xļȡάģ͵ڴ\n\tHRESULT\t\tRenderModel( );  //Ⱦάģ\n\t\n};"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo3/D3Ddemo3.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo3\n//\t 20134 Create by ǳī\n//  Direct3D㻺Ϯ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Direct3D㻺Ϯ ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n\n//------------------------------------------------------------------------------------------------\n// 㻺ʹĲ֮һƶʽ\n//------------------------------------------------------------------------------------------------\nstruct CUSTOMVERTEX\n{\n\tFLOAT x, y, z, rhw;\n\tDWORD color;\n};\n#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)  //FVFʽ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nID3DXFont*\t\t\t\t\t\t\t\tg_pFont=NULL;    //COMӿ\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS = 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50];    //֡ʵַ\nLPDIRECT3DVERTEXBUFFER9\t\tg_pVertexBuffer = NULL;    //㻺\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t//COMԴԼԴ\nfloat\t\t\t\t\t\t\tGet_FPS();\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\".wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\t//\n\tif(FAILED(D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"΢ź\"), &g_pFont)))\n\t\treturn E_FAIL;\n\tsrand(timeGetTime());      //ϵͳʱʼ \n\n\t//--------------------------------------------------------------------------------------\n\t// 㻺ʹĲ֮㻺\n\t//--------------------------------------------------------------------------------------\n\t//㻺\n\tif( FAILED( g_pd3dDevice->CreateVertexBuffer( 6*sizeof(CUSTOMVERTEX),\n\t\t0, D3DFVF_CUSTOMVERTEX,\n\t\tD3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\t//--------------------------------------------------------------------------------------\n\t// 㻺ʹĲ֮ʶ㻺\n\t//--------------------------------------------------------------------------------------\n\t//ݵã\n\tCUSTOMVERTEX vertices[] =\n\t{\n\t\t//randɫλ\n\t\t{ 300.0f, 100.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256), },\n\t\t{ 500.0f, 100.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256), }, \n\t\t{ 300.0f, 300.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256), },\n\t\t{ 300.0f, 300.0f, 0.0f, 1.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256), },\n\t\t{ (float)(800.0*rand()/(RAND_MAX+1.0)) , (float)(600.0*rand()/(RAND_MAX+1.0)) , 0.0f, 1.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256), },\n\t\t{ (float)(800.0*rand()/(RAND_MAX+1.0)) , (float)(600.0*rand()/(RAND_MAX+1.0)) , 0.0f, 1.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256), }\n\n\t};\n\n\t//䶥㻺\n\tVOID* pVertices;\n\tif( FAILED( g_pVertexBuffer->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )\n\t\treturn E_FAIL;\n\tmemcpy( pVertices, vertices, sizeof(vertices) );\n\tg_pVertexBuffer->Unlock();\n\n\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, false);   //صǷ˳ʱ룬Ǹζʾ \n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);//Ⱦ״̬\n\t//------------------------------------------------------------\n\t// 㻺ʹĲ֮ġͼ\n\t//------------------------------------------------------------\n\tg_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );\n\tg_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );\n\tg_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pFont->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_XRGB(255,39,136));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n}\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int     frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_RELEASE(g_pVertexBuffer)\n\tSAFE_RELEASE(g_pFont)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo4/D3Ddemo4.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo4\n//\t 20134 Create by ǳī\n//  Direct3DĹ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Direct3DĹ ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n\n//------------------------------------------------------------------------------------------------\n// 㻺ʹĲ֮һƶʽ\n//------------------------------------------------------------------------------------------------\nstruct CUSTOMVERTEX\n{\n\tFLOAT x, y, z, rhw;\n\tDWORD color;\n};\n#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)  //FVFʽ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nID3DXFont*\t\t\t\t\t\t\t\tg_pFont=NULL;    //COMӿ\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS = 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50];    //֡ʵַ\nLPDIRECT3DVERTEXBUFFER9\t\tg_pVertexBuffer = NULL;    //㻺\nLPDIRECT3DINDEXBUFFER9\t\tg_pIndexBuffer  = NULL;    // \n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t//COMԴԼԴ\nfloat\t\t\t\t\t\t\tGet_FPS();\t\t\t\t\t\t\t\t//֡ĺ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\"=ѥ륹Υ륷.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\t//\n\tif(FAILED(D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"΢ź\"), &g_pFont)))\n\t\treturn E_FAIL;\n\tsrand(timeGetTime());      //ϵͳʱʼ \n\n\t//--------------------------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮㻺\n\t//--------------------------------------------------------------------------------------\n\t//㻺\n\tif( FAILED( g_pd3dDevice->CreateVertexBuffer( 18*sizeof(CUSTOMVERTEX),\n\t\t0, D3DFVF_CUSTOMVERTEX,\n\t\tD3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\t// \n\tif( FAILED( \tg_pd3dDevice->CreateIndexBuffer(48 * sizeof(WORD), 0, \n\t\tD3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuffer, NULL)) )\n\t{\n\t\treturn E_FAIL;\n\n\t}\n\t//--------------------------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮ʶ㻺\n\t//--------------------------------------------------------------------------------------\n\t//ݵã\n\tCUSTOMVERTEX Vertices[17];\n\tVertices[0].x = 400;\n\tVertices[0].y = 300;\n\tVertices[0].z = 0.0f;\n\tVertices[0].rhw = 1.0f;\n\tVertices[0].color = D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256);\n\tfor(int i=0; i<16; i++)\n\t{\n\t\tVertices[i+1].x =  (float)(250*sin(i*3.14159/8.0)) + 400;\n\t\tVertices[i+1].y = -(float)(250*cos(i*3.14159/8.0)) + 300;\n\t\tVertices[i+1].z = 0.0f;\n\t\tVertices[i+1].rhw = 1.0f;\n\t\tVertices[i+1].color =  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256);\n\t}\n\n\t//䶥㻺\n\tVOID* pVertices;\n\tif( FAILED( g_pVertexBuffer->Lock( 0, sizeof(Vertices), (void**)&pVertices, 0 ) ) )\n\t\treturn E_FAIL;\n\tmemcpy( pVertices, Vertices, sizeof(Vertices) );\n\tg_pVertexBuffer->Unlock();\n\n\t//\n\tWORD Indices[] ={ 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,9, 0,9,10, 0,10,11 ,0,11,12, 0,12,13 ,0,13,14 ,0,14,15 ,0,15,16, 0, 16,1 };\n\n\t// \n\tWORD *pIndices = NULL;\n\tg_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\tmemcpy( pIndices, Indices, sizeof(Indices) );\n\tg_pIndexBuffer->Unlock();\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽ\n\t//--------------------------------------------------------------------------------------\n\t\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);//ʡԣΪɫģʽΪD3DĬϵɫģʽ\n\t//-------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮ġͼ\n\t//--------------------------------------------------------------------\n\tg_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );//ѰļϢĶ㻺Ⱦˮ\n\tg_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );//ָʹõʽĺ\n\tg_pd3dDevice->SetIndices(g_pIndexBuffer);//\n\tg_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 17, 0, 16);//϶㻺ͼ\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pFont->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_XRGB(255,39,136));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n}\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int     frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_RELEASE(g_pIndexBuffer)\n\tSAFE_RELEASE(g_pVertexBuffer)\n\tSAFE_RELEASE(g_pFont)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo5/D3Ddemo5.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo5\n//\t 20134 Create by ǳī\n//  ά磺Direct3DĴ任 ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿ά磺Direct3DĴ任  ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n\n//------------------------------------------------------------------------------------------------\n// 㻺ʹĲ֮һƶʽ\n//------------------------------------------------------------------------------------------------\nstruct CUSTOMVERTEX\n{\n\tFLOAT x, y, z;\n\tDWORD color;\n};\n#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)  //FVFʽ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nID3DXFont*\t\t\t\t\t\t\t\tg_pFont=NULL;    //COMӿ\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS = 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50];    //֡ʵַ\nLPDIRECT3DVERTEXBUFFER9\t\tg_pVertexBuffer = NULL;    //㻺\nLPDIRECT3DINDEXBUFFER9\t\tg_pIndexBuffer  = NULL;    // \n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t\t//COMԴԼԴ\nfloat\t\t\t\t\t\t\tGet_FPS();\t\t\t\t\t\t\t\t\t//֡ĺ\nVOID\t\t\t\t\t\t\tMatrix_Set();                              //װĴ任ĺ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\"hĤ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);      //رչ\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\n\treturn S_OK;\n\n\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\t//\n\tif(FAILED(D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"΢ź\"), &g_pFont)))\n\t\treturn E_FAIL;\n\tsrand(timeGetTime());      //ϵͳʱʼ \n\n\t//--------------------------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮㻺\n\t//--------------------------------------------------------------------------------------\n\t//㻺\n\tif( FAILED( g_pd3dDevice->CreateVertexBuffer( 8*sizeof(CUSTOMVERTEX),\n\t\t0, D3DFVF_CUSTOMVERTEX,\n\t\tD3DPOOL_DEFAULT, &g_pVertexBuffer, NULL ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\t// \n\tif( FAILED( \tg_pd3dDevice->CreateIndexBuffer(36* sizeof(WORD), 0, \n\t\tD3DFMT_INDEX16, D3DPOOL_DEFAULT, &g_pIndexBuffer, NULL)) )\n\t{\n\t\treturn E_FAIL;\n\n\t}\n\t//--------------------------------------------------------------------------------------\n\t// 㻺桢ͼĲ֮ʶ㻺\n\t//--------------------------------------------------------------------------------------\n\t//ݵã\n\tCUSTOMVERTEX Vertices[] =\n\t{\n\t\t{ -20.0f, 20.0f, -20.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) },\n\t\t{ -20.0f, 20.0f, 20.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) }, \n\t\t{ 20.0f, 20.0f, 20.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) },\n\t\t{ 20.0f, 20.0f, -20.0f,  D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) },\n\t\t{ -20.0f, -20.0f, -20.0f, D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) },\n\t\t{ -20.0f, -20.0f, 20.0f, D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) }, \n\t\t{ 20.0f, -20.0f, 20.0f, D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) },\n\t\t{ 20.0f, -20.0f, -20.0f, D3DCOLOR_XRGB(rand() % 256, rand() % 256, rand() % 256) },\n\n\t};\n\n\t//䶥㻺\n\tVOID* pVertices;\n\tif( FAILED( g_pVertexBuffer->Lock( 0, sizeof(Vertices), (void**)&pVertices, 0 ) ) )\n\t\treturn E_FAIL;\n\tmemcpy( pVertices, Vertices, sizeof(Vertices) );\n\tg_pVertexBuffer->Unlock();\n\n\t// \n\tWORD *pIndices = NULL;\n\tg_pIndexBuffer->Lock(0, 0, (void**)&pIndices, 0);\n\n\t// \n\tpIndices[0] = 0, pIndices[1] = 1, pIndices[2] = 2;\n\tpIndices[3] = 0, pIndices[4] = 2, pIndices[5] = 3;\n\t// \n\tpIndices[6] = 0, pIndices[7]  = 3, pIndices[8]  = 7;\n\tpIndices[9] = 0, pIndices[10] = 7, pIndices[11] = 4;\n\t// \n\tpIndices[12] = 0, pIndices[13] = 4, pIndices[14] = 5;\n\tpIndices[15] = 0, pIndices[16] = 5, pIndices[17] = 1;\n\t// Ҳ\n\tpIndices[18] = 2, pIndices[19] = 6, pIndices[20] = 7;\n\tpIndices[21] = 2, pIndices[22] = 7, pIndices[23] = 3;\n\t// \n\tpIndices[24] = 2, pIndices[25] = 5, pIndices[26] = 6;\n\tpIndices[27] = 2, pIndices[28] = 1, pIndices[29] = 5;\n\t// \n\tpIndices[30] = 4, pIndices[31] = 6, pIndices[32] = 5;\n\tpIndices[33] = 4, pIndices[34] = 7, pIndices[35] = 6;\n\tg_pIndexBuffer->Unlock();\n\n  return S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nVOID Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matWorld, Rx, Ry, Rz;\n\tD3DXMatrixIdentity(&matWorld);                  // λ\n\tD3DXMatrixRotationX(&Rx, D3DX_PI *(::timeGetTime() / 1000.0f));    // Xת\n\tD3DXMatrixRotationY(&Ry, D3DX_PI *( ::timeGetTime() / 1000.0f/2));    // Yת\n\tD3DXMatrixRotationZ(&Rz, D3DX_PI *( ::timeGetTime() / 1000.0f/3));   // Zת\n\tmatWorld = Rx * Ry * Rz * matWorld;             // õյϾ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);  //任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -200.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255, 214, 158), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽƣö㻺ͼ\n\t//--------------------------------------------------------------------------------------\n\t//----------------------------------------------------------------\n\t// 㻺桢ͼĲ֮ġͼ\n\t//----------------------------------------------------------------\n\n\t\tMatrix_Set();//÷װĴ任ĺDirect3D任ȡ任ͶӰ任ӿڱ任\n\t// ȡϢӦģʽ\n\tif (::GetAsyncKeyState(0x31) & 0x8000f)         // ּ1£߿\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);\n\tif (::GetAsyncKeyState(0x32) & 0x8000f)         // ּ2£ʵ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);\n\n\tg_pd3dDevice->SetStreamSource( 0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX) );//ѰļϢĶ㻺Ⱦˮ\n\tg_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );//ָʹõʽĺ\n\tg_pd3dDevice->SetIndices(g_pIndexBuffer);//\n\tg_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12);//϶㻺ͼ\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pFont->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_XRGB(255,39,136));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n}\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int     frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_RELEASE(g_pIndexBuffer)\n\tSAFE_RELEASE(g_pVertexBuffer)\n\tSAFE_RELEASE(g_pFont)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo6/D3Ddemo6.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo6\n//\t 20134 Create by ǳī\n//  Direct3DмּĿݻ ʾ\n//\t ˵ ּ1͡2߿ģʽʵģʽ֮лĬ߿\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Direct3DмּĿݻ ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nID3DXFont*\t\t\t\t\t\t\t\tg_pFont=NULL;    //COMӿ\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS = 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50];    //֡ʵַ\nLPD3DXMESH\t\t\t\t\t\t\tg_teapot = NULL;\t\t//\nLPD3DXMESH \t\t\t\t\t\t\tg_cube = NULL;\t\t\t//壨ӣ\nLPD3DXMESH \t\t\t\t\t\t\tg_sphere = NULL;\t\t//\nLPD3DXMESH \t\t\t\t\t\t\tg_torus = NULL;\t\t//Բ\nD3DXMATRIX \t\t\t\t\t\t\tg_WorldMatrix[4],R;  //һЩȫֵ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t\t//COMԴԼԴ\nfloat\t\t\t\t\t\t\tGet_FPS();\t\t\t\t\t\t\t\t\t//֡ĺ\nVOID\t\t\t\t\t\t\tMatrix_Set();                              //װĴ任ĺ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\"뤫 (Long Version).wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\t//\n\tif(FAILED(D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"΢ź\"), &g_pFont)))\n\t\treturn E_FAIL;\n\tsrand(timeGetTime());      //ϵͳʱʼ \n\n\t// Ĵ\n\tif(FAILED(D3DXCreateBox(g_pd3dDevice, 2, 2, 2, &g_cube, NULL)))\t//Ĵ\n\t\treturn false;\n\tif(FAILED(D3DXCreateTeapot(g_pd3dDevice, &g_teapot, NULL)))\t\t//Ĵ\n\t\treturn false;\t\n\tif(FAILED(D3DXCreateSphere(g_pd3dDevice, 1.5, 25, 25,\t\t\t\t\t//Ĵ\n\t\t&g_sphere, NULL))) return false;\n\tif(FAILED(D3DXCreateTorus(g_pd3dDevice, 0.5f, 1.2f, 25, 25,\t\t\t\t//ԲĴ\n\t\t&g_torus, NULL))) return false;\n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);   //رչ\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);  //߿ģʽ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nVOID Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -15.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\n\tMatrix_Set();//÷װĴ任ĺDirect3D任ȡ任ͶӰ任ӿڱ任\n\n\t// ȡϢӦģʽ\n\tif (::GetAsyncKeyState(0x31) & 0x8000f)         // ּ1£ʵ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);\t\n\tif (::GetAsyncKeyState(0x32) & 0x8000f)         // ּ2£߿\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽƣö㻺ͼ\n\t//--------------------------------------------------------------------------------------\n\n\tD3DXMatrixRotationY(&R, ::timeGetTime() / 1440.0f);  //ùתľ\n\n\t// Ļ\n\tD3DXMatrixTranslation(&g_WorldMatrix[0], 3.0f, -3.0f, 0.0f);\n\tg_WorldMatrix[0]  =  g_WorldMatrix[0]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[0]);\n\tg_cube->DrawSubset(0);\n\n\t//вĻ\n\tD3DXMatrixTranslation(&g_WorldMatrix[1], -3.0f, -3.0f, 0.0f);\n\tg_WorldMatrix[1]  =  g_WorldMatrix[1]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[1]);\t\n\tg_teapot->DrawSubset(0);\n\n\t// ԲĻ\n\tD3DXMatrixTranslation(&g_WorldMatrix[2], 3.0f, 3.0f, 0.0f);\n\tg_WorldMatrix[2]  =  g_WorldMatrix[2]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[2]);\t\n\tg_torus->DrawSubset(0);\n\n\t// Ļ\n\tD3DXMatrixTranslation(&g_WorldMatrix[3], -3.0f, 3.0f, 0.0f);\n\tg_WorldMatrix[3]  =  g_WorldMatrix[3]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[3]);\n\tg_sphere->DrawSubset(0);\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pFont->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_XRGB(255,39,136));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n}\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int     frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_RELEASE(g_torus)\n\tSAFE_RELEASE(g_sphere)\n\tSAFE_RELEASE(g_cube)\n\tSAFE_RELEASE(g_teapot)\n\tSAFE_RELEASE(g_pFont)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo7/D3Ddemo7.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo7\n//\t 20134 Create by ǳī\n//  ʵʸеά磺 ʾ\n//\t ˵ ּ1͡2ʵģʽ߿ģʽ֮лĬ߿\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿ʵʸеά磺  ʾ\"\t//Ϊڱⶨĺ\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }   //һȫͷź꣬ںCOMӿָͷ\n\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nID3DXFont*\t\t\t\t\t\t\t\tg_pFont=NULL;    //COMӿ\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS = 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50];    //֡ʵַ\nLPD3DXMESH\t\t\t\t\t\t\tg_teapot = NULL;\t\t//\nLPD3DXMESH \t\t\t\t\t\t\tg_cube = NULL;\t\t\t//壨ӣ\nLPD3DXMESH \t\t\t\t\t\t\tg_sphere = NULL;\t\t//\nLPD3DXMESH \t\t\t\t\t\t\tg_torus = NULL;\t\t//Բ\nD3DXMATRIX \t\t\t\t\t\t\tg_WorldMatrix[4],R;  //һЩȫֵ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nHRESULT\t\t\t\t\tDirect3D_Init(HWND hwnd);\t\t //нDirect3Dĳʼ\nHRESULT\t\t\t\t\tObjects_Init(HWND hwnd); \t\t//нҪƵԴʼ\nVOID\t\t\t\t\t\t\tDirect3D_Render(HWND hwnd); \t//нDirect3DȾд\nVOID\t\t\t\t\t\t\tDirect3D_CleanUp( );\t\t\t\t\t//COMԴԼԴ\nfloat\t\t\t\t\t\t\tGet_FPS();\t\t\t\t\t\t\t\t\t//֡ĺ\nVOID\t\t\t\t\t\t\tMatrix_Set();                              //װĴ任ĺ\nvoid\t\t\t\t\t\t\tLight_Set(LPDIRECT3DDEVICE9 pd3dDevice, UINT nType);  //װ˹յĺ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\"ե󥰤ΥƩ`.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Render(hwnd);   //Ⱦ\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Direct3D_Init( )--------------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t{\n\t\treturn E_FAIL;\n\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 1;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\t\tif(!(S_OK==Objects_Init(hwnd))) return E_FAIL;     //һObjects_InitȾԴĳʼ\n\n\treturn S_OK;\n}\n\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init(HWND hwnd)\n{\n\t//\n\tif(FAILED(D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"΢ź\"), &g_pFont)))\n\t\treturn E_FAIL;\n\tsrand(timeGetTime());      //ϵͳʱʼ \n\n\t// Ĵ\n\tif(FAILED(D3DXCreateBox(g_pd3dDevice, 2, 2, 2, &g_cube, NULL)))\t//Ĵ\n\t\treturn false;\n\tif(FAILED(D3DXCreateTeapot(g_pd3dDevice, &g_teapot, NULL)))\t\t//Ĵ\n\t\treturn false;\t\n\tif(FAILED(D3DXCreateSphere(g_pd3dDevice, 1.5, 25, 25,\t\t\t\t\t//Ĵ\n\t\t&g_sphere, NULL))) return false;\n\tif(FAILED(D3DXCreateTorus(g_pd3dDevice, 0.5f, 1.2f, 25, 25,\t\t\t\t//ԲĴ\n\t\t&g_torus, NULL))) return false;\n\n\t// ò\n\tD3DMATERIAL9 mtrl;\n\t::ZeroMemory(&mtrl, sizeof(mtrl));\n\tmtrl.Ambient  = D3DXCOLOR(0.5f, 0.5f, 0.7f, 1.0f);\n\tmtrl.Diffuse  = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f);\n\tmtrl.Specular = D3DXCOLOR(0.3f, 0.3f, 0.3f, 0.3f);\n\tmtrl.Emissive = D3DXCOLOR(0.3f, 0.0f, 0.1f, 1.0f);\n\tg_pd3dDevice->SetMaterial(&mtrl);\n\n\t// ù\n\tLight_Set(g_pd3dDevice, 1);\n\tg_pd3dDevice->SetRenderState(D3DRS_LIGHTING, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);\n\tg_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);\n\n\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\n\treturn S_OK;\n}\n\n//-----------------------------------Light_Set( )-----------------------------\n// Desc: װ3ֹԴ͵ĺԸݵڶѡԴ\n//--------------------------------------------------------------------------------------\nVOID Light_Set(LPDIRECT3DDEVICE9 pd3dDevice, UINT nType)\n{\n\t//һͲʼ\n\tstatic D3DLIGHT9 light;\n\t::ZeroMemory(&light, sizeof(light));\n\n\t//һswitch3ֹԴѡ\n\tswitch (nType)\n\t{\n\tcase 1:     //Դ\n\t\tlight.Type          = D3DLIGHT_POINT;\n\t\tlight.Ambient       = D3DXCOLOR(0.6f, 0.6f, 0.6f, 1.0f); \n\t\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\t\tlight.Specular      = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);\n\t\tlight.Position      = D3DXVECTOR3(0.0f, 200.0f, 0.0f);\n\t\tlight.Attenuation0  = 1.0f;\n\t\tlight.Attenuation1  = 0.0f;\n\t\tlight.Attenuation2  = 0.0f;\n\t\tlight.Range         = 300.0f;\n\t\tbreak;\n\tcase 2:     //ƽй\n\t\tlight.Type          = D3DLIGHT_DIRECTIONAL;\n\t\tlight.Ambient       = D3DXCOLOR(0.5f, 0.5f, 0.5f, 1.0f);\n\t\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\t\tlight.Specular      = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);\n\t\tlight.Direction     = D3DXVECTOR3(1.0f, 0.0f, 0.0f);\n\t\tbreak;\n\tcase 3:     //۹\n\t\tlight.Type          = D3DLIGHT_SPOT;\n\t\tlight.Position      = D3DXVECTOR3(100.0f, 100.0f, 100.0f);\n\t\tlight.Direction     = D3DXVECTOR3(-1.0f, -1.0f, -1.0f);\n\t\tlight.Ambient       = D3DXCOLOR(0.3f, 0.3f, 0.3f, 1.0f);\n\t\tlight.Diffuse       = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);\n\t\tlight.Specular      = D3DXCOLOR(0.3f, 0.3f, 0.3f, 0.3f);\n\t\tlight.Attenuation0  = 1.0f; \n\t\tlight.Attenuation1  = 0.0f; \n\t\tlight.Attenuation2  = 0.0f; \n\t\tlight.Range         = 300.0f;\n\t\tlight.Falloff       = 0.1f;\n\t\tlight.Phi           = D3DX_PI / 3.0f;\n\t\tlight.Theta         = D3DX_PI / 6.0f;\n\t\tbreak;\n\t}\n\n\tpd3dDevice->SetLight(0, &light); //ùԴ\n\tpd3dDevice->LightEnable(0, true);//ù\n\tpd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_XRGB(36, 36, 36));   //һ»\n}\n\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nVOID Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -15.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\n\tMatrix_Set();//÷װĴ任ĺDirect3D任ȡ任ͶӰ任ӿڱ任\n\n\t// ݼ̰µӦģʽ\n\tif (::GetAsyncKeyState(0x31) & 0x8000f)         // ּ1£ʵ\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);\n\tif (::GetAsyncKeyState(0x32) & 0x8000f)         // ּ2£߿\n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);\n\n\n\t\t// ݼ̰µӦĹ\n\tif (::GetAsyncKeyState(0x51) & 0x8000f)         // ϵİQ,ԴΪԴ\n\t\tLight_Set(g_pd3dDevice, 1);\n\tif (::GetAsyncKeyState(0x57) & 0x8000f)         // ϵİW£ԴΪƽйԴ\n\t\tLight_Set(g_pd3dDevice, 2);\n\tif (::GetAsyncKeyState(0x45) & 0x8000f)         // ϵİE£ԴΪ۹\n\t\tLight_Set(g_pd3dDevice, 3);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʽƣö㻺ͼ\n\t//--------------------------------------------------------------------------------------\n\t//Ĺת\n\tD3DXMatrixRotationY(&R, ::timeGetTime() / 1440.0f);\n\n\n\t// Ļ\n\tD3DXMatrixTranslation(&g_WorldMatrix[0], 3.0f, -3.0f, 0.0f);\n\tg_WorldMatrix[0]  =  g_WorldMatrix[0]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[0]);\n\tg_cube->DrawSubset(0);\n\n\t//вĻ\n\tD3DXMatrixTranslation(&g_WorldMatrix[1], -3.0f, -3.0f, 0.0f);\n\tg_WorldMatrix[1]  =  g_WorldMatrix[1]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[1]);\t\n\tg_teapot->DrawSubset(0);\n\n\t// ԲĻ\n\tD3DXMatrixTranslation(&g_WorldMatrix[2], 3.0f, 3.0f, 0.0f);\n\tg_WorldMatrix[2]  =  g_WorldMatrix[2]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[2]);\t\n\tg_torus->DrawSubset(0);\n\n\t// Ļ\n\tD3DXMatrixTranslation(&g_WorldMatrix[3], -3.0f, 3.0f, 0.0f);\n\tg_WorldMatrix[3]  =  g_WorldMatrix[3]*R; \n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_WorldMatrix[3]);\n\tg_sphere->DrawSubset(0);\n\n\t//ڴϽǴʾÿ֡\n\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\tg_pFont->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_XRGB(255,39,136));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n}\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int     frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n//ͷCOMӿڶ\n\tSAFE_RELEASE(g_torus)\n\tSAFE_RELEASE(g_sphere)\n\tSAFE_RELEASE(g_cube)\n\tSAFE_RELEASE(g_teapot)\n\tSAFE_RELEASE(g_pFont)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo8/D3Ddemo8.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo8\n//\t 20134 Create by ǳī\n//  Ϸ : DirectInput ʾ\n//  ͼزģ ɽǰ \n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿Ϸ : DirectInput\") //Ϊڱⶨĺ\n#define DIRECTINPUT_VERSION 0x0800  //ָDirectInput汾ֹDIRECTINPUT_VERSION undefined\n#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }      //ԶһSAFE_RELEASE(),COMԴͷ\n#define SAFE_DELETE(p)  { if(p) { delete (p); (p)=NULL; } }\t\t\t\t//ָıͷź\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                                  \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include <dinput.h>                 // ʹDirectInputͷļעû8\n\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputͷļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9       g_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t g_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nLPDIRECTINPUT8\t\t\t\tg_pDirectInput      = NULL; //\nLPDIRECTINPUTDEVICE8    g_pMouseDevice      = NULL;\nDIMOUSESTATE\t\t\t\t\tg_diMouseState      = {0};\nLPDIRECTINPUTDEVICE8    g_pKeyboardDevice   = NULL;\nchar\t\t\t\t\t\t\t\t\tg_pKeyStateBuffer[256] = {0};\nD3DXMATRIX\t\t\t\t\tg_matWorld;   //\nLPD3DXMESH\t\t\t\t\tg_pMesh     = NULL; // Ķ\nD3DMATERIAL9*\t\t\t\tg_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9*\t\tg_pTextures     = NULL; // Ϣ\nDWORD\t\t\t\t\t\t\tg_dwNumMtrls    = 0;    // ʵĿ\n\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\tMatrix_Set();\nBOOL\t\t\t\t\tDevice_Read(IDirectInputDevice8 *pDIDevice, void* pBuffer, long lSize) ;\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\tPlaySound(L\".wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);\t\t\t//øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tDirect3D_Render(hwnd);                 //Direct3DȾ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tDirect3D_CleanUp();\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\n\t //--------------------------------------------------------------------------------------\n\t // DirectInputʹ岽ǰ豸ʽȨΪ豸ʼ\n\t //--------------------------------------------------------------------------------------\n\t// DirectInputӿں豸\n\tDirectInput8Create(hInstance, 0x0800, IID_IDirectInput8, (void**)&g_pDirectInput, NULL);\n\tg_pDirectInput->CreateDevice(GUID_SysKeyboard, &g_pMouseDevice, NULL);\n\n\t// ݸʽЭ\n\tg_pDirectInput->CreateDevice(GUID_SysMouse, &g_pMouseDevice, NULL);\n\tg_pMouseDevice->SetDataFormat(&c_dfDIMouse);\n\tg_pMouseDevice->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//ȡ豸Ȩ\n\tg_pMouseDevice->Acquire();\n\n\t//--------------------------------------------------------------------------------------\n\t// DirectInputʹ岽ǰ豸ʽȨΪ豸ʼ\n\t//--------------------------------------------------------------------------------------\n\t// DirectInputӿں豸\n\tDirectInput8Create(hInstance, 0x0800, IID_IDirectInput8, (void**)&g_pDirectInput, NULL);\n\tg_pDirectInput->CreateDevice(GUID_SysKeyboard, &g_pKeyboardDevice, NULL);\n\n\t// ݸʽЭ\n\tg_pKeyboardDevice->SetDataFormat(&c_dfDIKeyboard);\n\tg_pKeyboardDevice->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\n\t//ȡ豸Ȩ\n\tg_pKeyboardDevice->Acquire();\n\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\tD3DXLoadMeshFromX(L\"loli.x\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\tpAdjBuffer->Release();\n\tpMtrlBuffer->Release();\n\n\t\t// Ⱦ״̬\n\t\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\t\tg_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f)); //û\n\t\t\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -250.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)WINDOW_WIDTH/WINDOW_HEIGHT),1.0f, 1000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t// ȡϢӦģʽ  \n\tif (g_pKeyStateBuffer[DIK_1]    & 0x80)         // ּ1£ʵ  \n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);\n\tif (g_pKeyStateBuffer[DIK_2]    & 0x80)         // ּ2£߿  \n\t\tg_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);  \n\n\t// ȡ\n\t::ZeroMemory(&g_diMouseState, sizeof(g_diMouseState));\n\tDevice_Read(g_pMouseDevice, (LPVOID)&g_diMouseState, sizeof(g_diMouseState));\n\n\t// ȡ\n\t::ZeroMemory(g_pKeyStateBuffer, sizeof(g_pKeyStateBuffer));\n\tDevice_Read(g_pKeyboardDevice, (LPVOID)g_pKeyStateBuffer, sizeof(g_pKeyStateBuffer));\n\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = 30.0f, fPosZ = 0.0f;\n\tif (g_diMouseState.rgbButtons[0] & 0x80) \n\t{\n\t\tfPosX += g_diMouseState.lX *  0.08f;\n\t\tfPosY += g_diMouseState.lY * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += g_diMouseState.lZ * 0.02f;\n\n\t// ƽ\n\tif (g_pKeyStateBuffer[DIK_A] & 0x80) fPosX -= 0.005f;\n\tif (g_pKeyStateBuffer[DIK_D] & 0x80) fPosX += 0.005f;\n\tif (g_pKeyStateBuffer[DIK_W] & 0x80) fPosY += 0.005f;\n\tif (g_pKeyStateBuffer[DIK_S] & 0x80) fPosY -= 0.005f;\n\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = 0.15f, fAngleY = -(float)D3DX_PI ;\n\tif (g_diMouseState.rgbButtons[1] & 0x80) \n\t{\n\t\tfAngleX += g_diMouseState.lY * -0.01f;\n\t\tfAngleY += g_diMouseState.lX * -0.01f;\n\t}\n\t// ת\n\tif (g_pKeyStateBuffer[DIK_UP]    & 0x80) fAngleX += 0.005f;\n\tif (g_pKeyStateBuffer[DIK_DOWN]  & 0x80) fAngleX -= 0.005f;\n\tif (g_pKeyStateBuffer[DIK_LEFT]  & 0x80) fAngleY -= 0.005f;\n\tif (g_pKeyStateBuffer[DIK_RIGHT] & 0x80) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\t//õյľ\n\tg_matWorld = Rx * Ry * g_matWorld;//õյľ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//\n\tMatrix_Set();\n}\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\t\n\t\t\t//--------------------------------------------------------------------------------------\n\t\t\t// Direct3DȾ岽֮ʽ\n\t\t\t//--------------------------------------------------------------------------------------\n\n\t\t\t// \n\t\t\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t\t\t{\n\t\t\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);\n\t\t\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);\n\t\t\t\tg_pMesh->DrawSubset(i);\n\t\t\t}\n\n\t\t\t//ڴϽǴʾÿ֡\n\t\t\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\t\t\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t\t\t//ʾԿ\n\t\t\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\t\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t\t\t// Ϣ\n\t\t\t formatRect.top = 30;\n\t\t\tstatic wchar_t strInfo[256] = {0};\n\t\t\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\t\t\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t\t\t// Ϣ\n\t\t\tformatRect.left = 0,formatRect.top = 380;\n\t\t\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\t\t\tformatRect.top += 35;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n//-----------------------------------Device_Read( )------------------------------------\n// Desc: ܶȡ豸\n//--------------------------------------------------------------------------------------------------\nBOOL Device_Read(IDirectInputDevice8 *pDIDevice, void* pBuffer, long lSize) \n{\n\tHRESULT hr;\n\twhile (true) \n\t{\n\t\tpDIDevice->Poll();              // ѯ豸\n\t\tpDIDevice->Acquire();           // ȡ豸ĿȨ\n\t\tif (SUCCEEDED(hr = pDIDevice->GetDeviceState(lSize, pBuffer))) break;\n\t\tif (hr != DIERR_INPUTLOST || hr != DIERR_NOTACQUIRED) return FALSE;\n\t\tif (FAILED(pDIDevice->Acquire())) return FALSE;\n\t}\n\treturn TRUE;\n}\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tg_pMouseDevice->Unacquire();\n\tg_pKeyboardDevice->Unacquire();\n\tfor (DWORD i = 0; i<g_dwNumMtrls; i++) \n\t\tSAFE_RELEASE(g_pTextures[i]);\n\tSAFE_DELETE(g_pTextures)\n\tSAFE_DELETE(g_pMaterials)\n\tSAFE_RELEASE(g_pMesh)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\t\n\tSAFE_RELEASE(g_pMouseDevice)\n\tSAFE_RELEASE(g_pKeyboardDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo9/D3DUtil.h",
    "content": "\n//=============================================================================\n// Desc: D3DUtil.hͷļڹĶ\n// 2013 203  Create by ǳī \n//=============================================================================\n\n#pragma once\n\n\n#ifndef HR\n#define HR(x)    { hr = x; if( FAILED(hr) ) { return hr; } }         //ԶһHRִ꣬дķ\n#endif\n\n#ifndef SAFE_DELETE\t\t\t\t\t\n#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }       //ԶһSAFE_RELEASE(),ָԴͷ\n#endif    \n\n#ifndef SAFE_RELEASE\t\t\t\n#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }     //ԶһSAFE_RELEASE(),COMԴͷ\n#endif"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo9/D3Ddemo9.cpp",
    "content": "//-----------------------------------˵----------------------------------------------\n//  :D3Ddemo9\n//\t 20134 Create by ǳī\n//  Ϸ : DirectInputķװ ʾ\n//  ͼزģ ƻ \n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------궨岿֡--------------------------------------------\n// һЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t_T(\"ϨϷ롿DirectInputķװ ʾ\") //Ϊڱⶨĺ\n\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------                                                                             \n#include <d3d9.h>\n#include <d3dx9.h>\n#include <tchar.h>\n#include <time.h> \n#include \"DirectInputClass.h\"\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"d3d9.lib\")\n#pragma comment(lib,\"d3dx9.lib\")\n#pragma comment(lib, \"dinput8.lib\")     // ʹDirectInputͷļע8\n#pragma comment(lib,\"dxguid.lib\")\n#pragma comment(lib, \"winmm.lib\") \n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nLPDIRECT3DDEVICE9\t\t\t\t\tg_pd3dDevice = NULL; //Direct3D豸\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextFPS\t\t\t\t=NULL;    //COMӿ\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextAdaperName           = NULL;  // ԿϢ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextHelper          = NULL;  // Ϣ2Dı\nLPD3DXFONT\t\t\t\t\t\t\t\tg_pTextInfor           = NULL;  // Ϣ2Dı\nfloat\t\t\t\t\t\t\t\t\t\t\tg_FPS\t\t\t\t\t\t\t\t= 0.0f;       //һ͵ı֡\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strFPS[50]={0};    //֡ʵַ\nwchar_t\t\t\t\t\t\t\t\t\t\tg_strAdapterName[60]={0};    //ԿƵַ\nD3DXMATRIX\t\t\t\t\t\t\tg_matWorld;   //\nDInputClass*\t\t\t\t\t\t\t\tg_pDInput = NULL;         //һDInputClassָ\n\nLPD3DXMESH          g_pMesh     = NULL; // Ķ\nD3DMATERIAL9*       g_pMaterials    = NULL; // ĲϢ\nLPDIRECT3DTEXTURE9* g_pTextures     = NULL; // Ϣ\nDWORD               g_dwNumMtrls    = 0;    // ʵĿ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\t\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );\nHRESULT\t\t\t\t\t\tDirect3D_Init(HWND hwnd,HINSTANCE hInstance);\nHRESULT\t\t\t\t\t\tObjects_Init();\nvoid\t\t\t\t\t\t\t\tDirect3D_Render( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_Update( HWND hwnd);\nvoid\t\t\t\t\t\t\t\tDirect3D_CleanUp( );\nfloat\t\t\t\t\t\t\t\tGet_FPS();\nvoid\t\t\t\t\t\t\t\tMatrix_Set();\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//Direct3DԴĳʼʧmessageboxʾ\n\tif (!(S_OK==Direct3D_Init (hwnd,hInstance)))\n\t{\n\t\tMessageBox(hwnd, _T(\"Direct3Dʼʧ~\"), _T(\"ǳīϢ\"), 0); //ʹMessageBoxһϢ \n\t}\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//DirectInputĳʼ\n\tg_pDInput = new DInputClass();\n\tg_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);\n\tPlaySound(L\"Τ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };  //ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t//úַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDirect3D_Update(hwnd);\t\t\t//øºлĸ\n\t\t\tDirect3D_Render(hwnd);\t\t\t//ȾлȾ\t\n\t\t}\n\t}\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )   //ڹ̺WndProc\n{\n\tswitch( message )\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t // ͻػϢ\n\t\tDirect3D_Render(hwnd);          //Direct3D_RenderлĻ\n\t\tValidateRect(hwnd, NULL);   // ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\tcase WM_KEYDOWN:                // ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // ESC\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t//Ϣ\n\t\tDirect3D_CleanUp();     //Direct3D_CleanUpCOMӿڶ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹΪӦóûдĴϢṩȱʡĴ\n\t}\n\n\treturn 0;\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------Direct3D_Init( )----------------------------------\n//\tDirect3DʼDirect3Dĳʼ\n//------------------------------------------------------------------------------------------------\nHRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮һӿڡDirect3Dӿڶ, ԱøDirect3D󴴽Direct3D豸\n\t//--------------------------------------------------------------------------------------\n\tLPDIRECT3D9  pD3D = NULL; //Direct3DӿڶĴ\n\tif( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) //ʼDirect3Dӿڶ󣬲DirectX汾Э\n \t\t\treturn E_FAIL;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮,ȡϢȡӲ豸Ϣ\n\t//--------------------------------------------------------------------------------------\n\tD3DCAPS9 caps; int vp = 0;\n\tif( FAILED( pD3D->GetDeviceCaps( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &caps ) ) )\n\t\t{\n\t\t\treturn E_FAIL;\n\t\t}\n\tif( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\n\t\tvp = D3DCREATE_HARDWARE_VERTEXPROCESSING;   //֧Ӳ㣬ǾͲӲ㣬׵\n\telse\n\t\tvp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; //֧Ӳ㣬ֻò\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ݡD3DPRESENT_PARAMETERSṹ\n\t//--------------------------------------------------------------------------------------\n\tD3DPRESENT_PARAMETERS d3dpp; \n\tZeroMemory(&d3dpp, sizeof(d3dpp));\n\td3dpp.BackBufferWidth            = WINDOW_WIDTH;\n\td3dpp.BackBufferHeight           = WINDOW_HEIGHT;\n\td3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;\n\td3dpp.BackBufferCount            = 2;\n\td3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;\n\td3dpp.MultiSampleQuality         = 0;\n\td3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; \n\td3dpp.hDeviceWindow              = hwnd;\n\td3dpp.Windowed                   = true;\n\td3dpp.EnableAutoDepthStencil     = true; \n\td3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;\n\td3dpp.Flags                      = 0;\n\td3dpp.FullScreen_RefreshRateInHz = 0;\n\td3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DʼĲ֮ģ豸Direct3D豸ӿ\n\t//--------------------------------------------------------------------------------------\n\tif(FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, \n\t\thwnd, vp, &d3dpp, &g_pd3dDevice)))\n\t\treturn E_FAIL;\n\n\n\t//ȡԿϢg_strAdapterNameУԿ֮ǰϡǰԿͺţַ\n\t wchar_t TempName[60]=L\"ǰԿͺţ\";   //һʱַҷ˰\"ǰԿͺţ\"ַǵĿַ\n\t D3DADAPTER_IDENTIFIER9 Adapter;  //һD3DADAPTER_IDENTIFIER9ṹ壬ڴ洢ԿϢ\n\t pD3D->GetAdapterIdentifier(0,0,&Adapter);//GetAdapterIdentifierȡԿϢ\n\t int len = MultiByteToWideChar(CP_ACP,0, Adapter.Description, -1, NULL, 0);//ԿѾAdapter.DescriptionˣΪcharͣҪתΪwchar_t\n\t MultiByteToWideChar(CP_ACP, 0, Adapter.Description, -1, g_strAdapterName, len);//ⲽɺg_strAdapterNameоΪǰǵԿwchar_tַ\n\t wcscat_s(TempName,g_strAdapterName);//ѵǰǵԿӵǰԿͺţַ棬TempName\n\t wcscpy_s(g_strAdapterName,TempName);//TempNameеĽȫֱg_strAdapterNameУ󹦸~\n\n\tif(!(S_OK==Objects_Init())) return E_FAIL;\n\n\tSAFE_RELEASE(pD3D) //LPDIRECT3D9ӿڶʹɣǽͷŵ\n\n\treturn S_OK;\n}\n\n//-----------------------------------Object_Init( )--------------------------------------\n//\tȾԴʼڴ˺нҪȾԴĳʼ\n//--------------------------------------------------------------------------------------------------\nHRESULT Objects_Init()\n{\n\t//\n\tD3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T(\"Calibri\"), &g_pTextFPS);\n\tD3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextAdaperName); \n\tD3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"΢ź\", &g_pTextHelper); \n\tD3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, \n\t\tOUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L\"\", &g_pTextInfor); \n\n\t// Xļм\n\tLPD3DXBUFFER pAdjBuffer  = NULL;\n\tLPD3DXBUFFER pMtrlBuffer = NULL;\n\tD3DXLoadMeshFromX(L\"Optimus.x\", D3DXMESH_MANAGED, g_pd3dDevice, \n\t\t&pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);\n\n\t// ȡʺ\n\tD3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();\n\tg_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];\n\tg_pTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];\n\n\tfor (DWORD i=0; i<g_dwNumMtrls; i++) \n\t{\n\t\tg_pMaterials[i] = pMtrls[i].MatD3D;\n\t\tg_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;\n\t\tg_pTextures[i]  = NULL;\n\t\tD3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);\n\t}\n\tpAdjBuffer->Release();\n\tpMtrlBuffer->Release();\n\n\t// Ⱦ״̬\n\tg_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);   //\n\tg_pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f)); //û\n\n\tMatrix_Set();//Ĵ任\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------Matrix_Set( )--------------------------------------\n//\tװDirect3DĴ任ĺ任ȡ任ͶӰ任ӿڱ任\n//--------------------------------------------------------------------------------------------------\nvoid Matrix_Set()\n{\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮һ任\n\t//--------------------------------------------------------------------------------------\n\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ȡ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matView; //һ\n\tD3DXVECTOR3 vEye(0.0f, 0.0f, -1300.0f);  //λ\n\tD3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //۲λ\n\tD3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//ϵ\n\tD3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //ȡ任\n\tg_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //Ӧȡ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ͶӰ任\n\t//--------------------------------------------------------------------------------------\n\tD3DXMATRIX matProj; //һ\n\tD3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f,(float)((double)WINDOW_WIDTH/WINDOW_HEIGHT),1.0f, 10000.0f); //ͶӰ任\n\tg_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj);  //ͶӰ任\n\n\t//--------------------------------------------------------------------------------------\n\t//Ĵ任֮ġӿڱ任\n\t//--------------------------------------------------------------------------------------\n\tD3DVIEWPORT9 vp; //ʵһD3DVIEWPORT9ṹ壬ȻֵͿ\n\tvp.X      = 0;\t\t//ʾӿڴڵX\n\tvp.Y      = 0;\t\t//ӿԶԴڵY\n\tvp.Width  = WINDOW_WIDTH;\t//ӿڵĿ\n\tvp.Height = WINDOW_HEIGHT; //ӿڵĸ߶\n\tvp.MinZ   = 0.0f; //ӿȻеСֵ\n\tvp.MaxZ   = 1.0f;\t//ӿȻеֵ\n\tg_pd3dDevice->SetViewport(&vp); //ӿڵ\n\n}\n\n//-----------------------------------Direct3D_Update( )--------------------------------\n//\tǼʱȾ뵫Ҫʱõģ簴ĸģ\n//--------------------------------------------------------------------------------------------------\nvoid\tDirect3D_Update( HWND hwnd)\n{\n\t//ʹDirectInputȡ\n\tg_pDInput->GetInput();\n\n\t// ס϶ΪƽƲ\n\tstatic FLOAT fPosX = 0.0f, fPosY = 0.0f, fPosZ = 0.0f;\n\t\n\tif (g_pDInput->IsMouseButtonDown(0)) \n\t{\n\t\tfPosX += (g_pDInput->MouseDX())*  0.08f;\n\t\tfPosY += (g_pDInput->MouseDY()) * -0.08f;\n\t}\n\n\t//֣Ϊ۲\n\tfPosZ += (g_pDInput->MouseDZ())* 0.02f;\n\n\t// ƽ\n\tif (g_pDInput->IsKeyDown(DIK_A)) fPosX -= 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_D)) fPosX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_W)) fPosY += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_S)) fPosY -= 0.005f;\n\n\tD3DXMatrixTranslation(&g_matWorld, fPosX, fPosY, fPosZ);\n\n\t// סҼ϶Ϊת\n\tstatic float fAngleX = 0.0f, fAngleY =0.0f;\n\t\n\tif (g_pDInput->IsMouseButtonDown(1)) \n\t{\n\t\tfAngleX += (g_pDInput->MouseDY())* -0.01f;\n\t\tfAngleY += (g_pDInput->MouseDX()) * -0.01f;\n\t}\n\t// ת\n \tif (g_pDInput->IsKeyDown(DIK_UP)) fAngleX += 0.005f;\n\tif (g_pDInput->IsKeyDown(DIK_DOWN)) fAngleX -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_LEFT)) fAngleY -= 0.005f;\n \tif (g_pDInput->IsKeyDown(DIK_RIGHT)) fAngleY += 0.005f;\n\n\n\tD3DXMATRIX Rx, Ry;\n\tD3DXMatrixRotationX(&Rx, fAngleX);\n\tD3DXMatrixRotationY(&Ry, fAngleY);\n\n\t//õյľ\n\tg_matWorld = Rx * Ry * g_matWorld;//õյľ\n\tg_pd3dDevice->SetTransform(D3DTS_WORLD, &g_matWorld);//\n}\n\n\n\n//-----------------------------------Direct3D_Render( )-------------------------------\n//\tʹDirect3DȾ\n//--------------------------------------------------------------------------------------------------\nvoid Direct3D_Render(HWND hwnd)\n{\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮һ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(100, 100, 100), 1.0f, 0);\n\n\t//һΣڻȡھ\n\tRECT formatRect;\n\tGetClientRect(hwnd, &formatRect);\n\t\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ʼ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->BeginScene();                     // ʼ\n\n\t// \n\tfor (DWORD i = 0; i < g_dwNumMtrls; i++)\n\t{\n\t\tg_pd3dDevice->SetMaterial(&g_pMaterials[i]);\n\t\tg_pd3dDevice->SetTexture(0, g_pTextures[i]);\n\t\tg_pMesh->DrawSubset(i);\n\t}\n\n\t\t\t//ڴϽǴʾÿ֡\n\t\t\tint charCount = swprintf_s(g_strFPS, 20, _T(\"FPS:%0.3f\"), Get_FPS() );\n\t\t\tg_pTextFPS->DrawText(NULL, g_strFPS, charCount , &formatRect, DT_TOP | DT_RIGHT, D3DCOLOR_RGBA(0,239,136,255));\n\n\t\t\t//ʾԿ\n\t\t\tg_pTextAdaperName->DrawText(NULL,g_strAdapterName, -1, &formatRect, \n\t\t\t\tDT_TOP | DT_LEFT, D3DXCOLOR(1.0f, 0.5f, 0.0f, 1.0f));\n\n\t\t\t// Ϣ\n\t\t\t formatRect.top = 30;\n\t\t\tstatic wchar_t strInfo[256] = {0};\n\t\t\tswprintf_s(strInfo,-1, L\"ģ: (%.2f, %.2f, %.2f)\", g_matWorld._41, g_matWorld._42, g_matWorld._43);\n\t\t\tg_pTextHelper->DrawText(NULL, strInfo, -1, &formatRect, DT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(135,239,136,255));\n\n\t\t\t// Ϣ\n\t\t\tformatRect.left = 0,formatRect.top = 380;\n\t\t\tg_pTextInfor->DrawText(NULL, L\"˵:\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(235,123,230,255));\n\t\t\tformatRect.top += 35;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ס϶ƽģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    סҼ϶תģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ֣ģ\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    WSADƽģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ϡ¡ҷתģ \", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\t\t\tformatRect.top += 25;\n\t\t\tg_pTextHelper->DrawText(NULL, L\"    ESC : ˳\", -1, &formatRect, \n\t\t\t\tDT_SINGLELINE | DT_NOCLIP | DT_LEFT, D3DCOLOR_RGBA(255,200,0,255));\n\n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮ġ\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->EndScene();                       // \n\t//--------------------------------------------------------------------------------------\n\t// Direct3DȾ岽֮塿ʾת\n\t//--------------------------------------------------------------------------------------\n\tg_pd3dDevice->Present(NULL, NULL, NULL, NULL);  // תʾ\n\t \n}\n\n\n//-----------------------------------Get_FPS( )------------------------------------------\n//\tڼÿ֡ʵһ\n//--------------------------------------------------------------------------------------------------\nfloat Get_FPS()\n{\n\n\t//ĸ̬\n\tstatic float  fps = 0; //ҪFPSֵ\n\tstatic int    frameCount = 0;//֡\n\tstatic float  currentTime =0.0f;//ǰʱ\n\tstatic float  lastTime = 0.0f;//ʱ\n\n\tframeCount++;//ÿһGet_FPS()֡1\n\tcurrentTime = timeGetTime()*0.001f;//ȡϵͳʱ䣬timeGetTimeصԺΪλϵͳʱ䣬Ҫ0.001õλΪʱ\n\n\t//ǰʱȥʱ1ӣͽһFPSļͳʱĸ£ֵ֡\n\tif(currentTime - lastTime > 1.0f) //ʱ1\n\t{\n\t\tfps = (float)frameCount /(currentTime - lastTime);//1ӵFPSֵ\n\t\tlastTime = currentTime; //ǰʱcurrentTimeʱlastTimeΪһĻ׼ʱ\n\t\tframeCount    = 0;//֡frameCountֵ\n\t}\n\n\treturn fps;\n}\n\n\n\n//-----------------------------------Direct3D_CleanUp( )--------------------------------\n//\tDirect3DԴͷCOMӿڶ\n//---------------------------------------------------------------------------------------------------\nvoid Direct3D_CleanUp()\n{\n\t//ͷCOMӿڶ\n\tSAFE_RELEASE(g_pTextAdaperName)\n\tSAFE_RELEASE(g_pTextHelper)\n\tSAFE_RELEASE(g_pTextInfor)\n\tSAFE_RELEASE(g_pTextFPS)\n\tSAFE_RELEASE(g_pd3dDevice)\n}\n\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo9/DirectInputClass.cpp",
    "content": "//=============================================================================\n// Desc: DirectInput봦Դļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#include \"DirectInputClass.h\"\n\n\n//-----------------------------------------------------------------------------\n// Desc: 캯\n//-----------------------------------------------------------------------------\nDInputClass::DInputClass()\n{\n\tm_pDirectInput = NULL;\n\tm_KeyboardDevice = NULL;\n\tZeroMemory(m_keyBuffer,sizeof(char)*256);\n\tm_MouseDevice= NULL;\n\tZeroMemory(&m_MouseState, sizeof(m_MouseState));\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::Init(\n// Desc: ʼDirectInput̼豸\n//-----------------------------------------------------------------------------\nHRESULT DInputClass::Init( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags )\n{\n\tHRESULT hr;\n\t//ʼһIDirectInput8ӿڶ\n\tHR(DirectInput8Create( hInstance, DIRECTINPUT_VERSION, \n\t\tIID_IDirectInput8,(void**)&m_pDirectInput,NULL ));\n\n\t//м豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysKeyboard, &m_KeyboardDevice, NULL ));\n\tHR( m_KeyboardDevice->SetCooperativeLevel( hWnd, keyboardCoopFlags));\n\tHR( m_KeyboardDevice->SetDataFormat( &c_dfDIKeyboard ));\n\tHR( m_KeyboardDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\t//豸ĳʼ\n\tHR( m_pDirectInput->CreateDevice( GUID_SysMouse, &m_MouseDevice, NULL ));\n\tHR( m_MouseDevice->SetCooperativeLevel( hWnd,mouseCoopFlags));\n\tHR( m_MouseDevice->SetDataFormat( &c_dfDIMouse ));\n\tHR( m_MouseDevice->Acquire( ));\n\tHR( m_KeyboardDevice->Poll( ));\n\n\treturn S_OK;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::GetInput()\n// Desc: ڻȡϢĺ\n//-----------------------------------------------------------------------------\nvoid DInputClass::GetInput()\n{\n\tHRESULT hr = m_KeyboardDevice->GetDeviceState(sizeof(m_keyBuffer), (void**)&m_keyBuffer); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_KeyboardDevice->Acquire();  \n\t\tm_KeyboardDevice->GetDeviceState( sizeof(m_keyBuffer),(LPVOID)m_keyBuffer );\n\t}\n\n\thr = m_MouseDevice->GetDeviceState(sizeof(DIMOUSESTATE), (void**)&m_MouseState); \n\t//ȡϢ\n\tif(hr)\n\t{\n\t\tm_MouseDevice->Acquire();\n\t\tm_MouseDevice->GetDeviceState( sizeof(DIMOUSESTATE), (void**)&m_MouseState);\n\t}\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsKeyDown()\n// Desc: жϼĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsKeyDown(int iKey)\n{\n\tif(m_keyBuffer[iKey] & 0x80)\n\t\treturn true;\n\telse\n\t\treturn false;\n}\n\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::IsMouseButtonDown()\n// Desc: жĳǷ\n//-----------------------------------------------------------------------------\nbool DInputClass::IsMouseButtonDown(int button)\n{\n\treturn (m_MouseState.rgbButtons[button] & 0x80) != 0;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDX\n// Desc: ָXֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDX()\n{\n\treturn (float)m_MouseState.lX;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDY\n// Desc: ָYֵ\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDY()\n{\n\treturn (float)m_MouseState.lY;\n}\n\n//-----------------------------------------------------------------------------\n// NameDInputClass::MouseDZ\n// Desc: ָZֵ֣\n//-----------------------------------------------------------------------------\nfloat DInputClass::MouseDZ()\n{\n\treturn (float)m_MouseState.lZ;\n}\n\n\n\n\n//-----------------------------------------------------------------------------\n// Desc: \n//-----------------------------------------------------------------------------\nDInputClass::~DInputClass(void)\n{\n\tif(m_KeyboardDevice != NULL)\n\t\tm_KeyboardDevice->Unacquire();\n\tif(m_MouseDevice != NULL)\n\t\tm_MouseDevice->Unacquire();\n\tSAFE_RELEASE(m_KeyboardDevice);\n\tSAFE_RELEASE(m_MouseDevice);\n\tSAFE_RELEASE(m_pDirectInput);\n}\n"
  },
  {
    "path": "Direct3D-Game-Demo/D3Ddemo9/DirectInputClass.h",
    "content": "//=============================================================================\n// Name: DirectInputClass.h\n//\tDes: װDirectInput봦ͷļ\n// 2013 203  Create by ǳī \n//=============================================================================\n#pragma once\n#include \"D3DUtil.h\"\n#define DIRECTINPUT_VERSION 0x0800\n#include <dinput.h>\n\n//DInputClassඨ忪ʼ\nclass DInputClass\n{\nprivate:\n\tIDirectInput8\t\t\t\t\t* m_pDirectInput;   //IDirectInput8ӿڶ\n\tIDirectInputDevice8\t\t* m_KeyboardDevice;  //豸ӿڶ\n\tchar\t\t\t\t\t\t\t\tm_keyBuffer[256];       //ڼֵ̼洢\n\n\tIDirectInputDevice8\t\t*m_MouseDevice;      //豸ӿڶ\n\tDIMOUSESTATE\t\t\t\tm_MouseState;\t\t\t//ֵ洢һṹ\n\npublic:\n\tHRESULT\t\tInit( HWND hWnd,HINSTANCE hInstance,DWORD keyboardCoopFlags, DWORD mouseCoopFlags ); //ʼDirectInput̼豸\n\tvoid\t\t\t\tGetInput();   //ڻȡϢĺ\n\tbool\t\t\t\tIsKeyDown(int iKey);   //жϼĳǷ\n\t\n\tbool\t\t\t\tIsMouseButtonDown(int button);  //ж갴Ƿ񱻰\n\tfloat\t\t\t\tMouseDX();   //Xֵ\n\tfloat\t\t\t\tMouseDY();\t//Yֵ\n\tfloat\t\t\t\tMouseDZ();\t//Zֵ\n\n\npublic:\n\tDInputClass(void);\t\t//캯\n\t~DInputClass(void);\t//\n};\n"
  },
  {
    "path": "GDI-Game-Demo/10_GDIdemo6.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo6\n//\t 20133 Create by ǳī\n//  Ϸ֮ ʱʾ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")  //ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿Ϸ֮ ʱʾ ʾ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL;       //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSprite[12];     //λͼλͼ\nint\t\t\t\t\tg_iNum=0;         //\"g_iNum\"¼Ŀǰʾͼ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"֮ʫ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\t\tcase WM_TIMER:\t\t\t\t\t\t//ʱϢ\n\t\t\tGame_Paint(hwnd);                //Game_Paintдڻͼ\n\t\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\t\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\t\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\t\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\t\n\twchar_t   filename[20];\n\t//λͼ\n\tfor(int i=0;i<12;i++)      \n\t{\n\t\tmemset(filename, 0, sizeof(filename));  //filenameĳʼ\n\t\tswprintf_s(filename,L\"%d.bmp\",i);  //swprintf_sװӦͼƬļ\n\t\tg_hSprite[i] = (HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\t}\n\t//-----λͼĲ֮DC-----\n\tg_mdc = CreateCompatibleDC(g_hdc);    //豸ڴDC\n\n\tg_iNum = 0;                     //óʼʾͼΪ\"0\"\n\tSetTimer(hwnd,1,90,NULL);   //ʱ0.09뷢Ϣ\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//ͼ\n\tif(g_iNum == 11)               //жǷ񳬹ͼţͼš12ʾͼΪ\"0\"\n\t\tg_iNum = 0;               \n\n\t//ͼͼ\n\tSelectObject(g_mdc,g_hSprite[g_iNum]);//ͼѡӦλͼ\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);         //ĿǰͼŽдͼ\n\n\t//ͼ\n\tg_iNum++;                    //g_iNumֵ1ΪһҪʾͼ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\tKillTimer(hwnd,1);   //ɾĶʱ  \n\t//ͷԴ\n\tfor(int i=0;i<12;i++)\n\t\tDeleteObject(g_hSprite[i]);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);  //ͷ豸\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/11_GDIdemo7.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo7\n//\t 20133 Create by ǳī\n//  Ϸ֮ Ϸѭʾ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿Ϸ֮ Ϸѭʾ ʾ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL;     //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSprite[12];\t\t\t\t\t\t//λͼλͼ\nDWORD\t\tg_tPre=0,g_tNow=0;          //l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\t\t\t\tg_iNum=0;\t\t\t\t\t//g_iNum¼Ŀǰʾͼ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"ɽ¥.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 100)        //˴ѭϴλͼʱ0.1ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\n\twchar_t   filename[20];\n\n\t//λͼ\n\tfor(int i=0;i<12;i++)      \n\t{\n\t\tmemset(filename, 0, sizeof(filename));  //filenameĳʼ\n\t\tswprintf_s(filename,L\"%d.bmp\",i);  //swprintf_sװӦͼƬļ\n\t\tg_hSprite[i] = (HBITMAP)LoadImage(NULL,filename,IMAGE_BITMAP,800,600,LR_LOADFROMFILE);\n\t}\n\n\t//-----λͼĲ֮DC-----\n\tg_mdc = CreateCompatibleDC(g_hdc);    //豸ڴDC\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\tif(g_iNum == 11)               //жǷ񳬹ͼţͼš10ʾͼΪ\"0\"\n\t\tg_iNum = 0;        \n\n\tSelectObject(g_mdc,g_hSprite[g_iNum]);\n\tBitBlt(g_hdc,0,0,800,600,g_mdc,0,0,SRCCOPY);         //ĿǰͼŽдͼ\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ䣬´ϷѭжǷѾﵽ²趨ʱ\n\tg_iNum++;                    //g_iNumֵ1ΪһҪʾͼ\n\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tfor(int i=0;i<12;i++)\n\t\tDeleteObject(g_hSprite[i]);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/12_GDIdemo8.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo8\n//\t 20133 Create by ǳī\n//  Ϸ֮͸\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿Ϸ֮ ͸\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSprite=NULL,g_hBackGround=NULL;\t\t\t\t\t\t\t\t//λͼһڴ洢ͼһڴ洢ͼ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\t\t\t\tg_iNum=0,g_iX=0,g_iY=0;                //g_iNum¼ͼ,g_iX,g_iYֱ¼ͼĺ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"ɽԭ澰.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 100)        //˴ѭϴλͼʱ0.1ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵmdc\n\tg_hSprite = (HBITMAP)LoadImage(NULL,L\"goright.bmp\",IMAGE_BITMAP,480,108,LR_LOADFROMFILE);\n\tg_hBackGround= (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\n\tg_iNum = 0;\n\tg_iX =0;\t//ͼʼX\n\tg_iY= 350;    //ͼʼY\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\tif(g_iNum == 8)               //жǷ񳬹ͼţͼš7ʾͼΪ\"0\"\n\t\tg_iNum = 0;               \n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//mdcн͸\n\tSelectObject(g_bufdc,g_hSprite);\n\tTransparentBlt(g_mdc,g_iX,g_iY,60,108,g_bufdc,g_iNum*60,0,60,108,RGB(255,0,0));//TransparentBlt͸ɫʷ\n\n\n\t//Ļʾڴ\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ䣬´ϷѭжǷѾﵽ²趨ʱ\n\tg_iNum++;                    //g_iNumֵ1ΪһҪʾͼ\n\n\tg_iX+=10;\t\t\t\t\t   //´ͼ\n\t//ͼ곬ڱԵΪ-60\n\tif(g_iX>=WINDOW_WIDTH)      \n\t\tg_iX =-60;\n\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hSprite);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}\n\n\n\n\n"
  },
  {
    "path": "GDI-Game-Demo/13_GDIdemo9.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo10\n//\t 20133 Create by ǳī\n//  Ϸʾ֮ͼ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n#include  <time.h> //ʹûȡϵͳʱtime()Ҫͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿Ϸʾ֮ ͼ\"\t//Ϊڱⶨĺ\n#define SPRITE_NUMBER 30  //SPRITE_NUMBERʾҪֵĿڴ趨Ϊ30\n\n//-----------------------------------ȫֽṹ嶨岿֡-------------------------------------\n//\tȫֽṹ嶨\n//------------------------------------------------------------------------------------------------\nstruct Sprites        //spriteṹϵṹԱxyΪͼ꣬directionΪĿǰƶ\n{\n\tint x,y;\t\t\t//xyΪͼ\n\tint direction; // directionΪĿǰƶ\n}; \n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSprite[4],g_hBackGround;\t\t\t\t\t\t\t\t//λͼλͼ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\t\t\t\tg_iPicNum=0,g_iX=0,g_iY=0;                //g_iPicNum¼ͼ,g_iX,g_iYֱ¼ͼĺ\t\t\t\nSprites\t\t\tSprite[SPRITE_NUMBER];   //SPRITE_NUMBERֵSprite[]\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"OrcTheme.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 150)        //˴ѭϴλͼʱ0.1ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n\n//-----------------------------------BubSort( )--------------------------------------\n//\tݷ\n//------------------------------------------------------------------------------------------------\nVOID\t\tBubSort(int n)\n{\n\tint i,j;\n\tbool f;\n\tSprites tmp;\n\n\tfor(i=0;i<n-1;i++)\n\t{\n\t\tf = false;\n\t\tfor(j=0;j<n-i-1;j++)\n\t\t{\n\t\t\tif(Sprite[j+1].y < Sprite[j].y)\n\t\t\t{\n\t\t\t\ttmp = Sprite[j+1];\n\t\t\t\tSprite[j+1] = Sprite[j];\n\t\t\t\tSprite[j] = tmp;\n\t\t\t\tf = true;\n\t\t\t}\n\t\t}\n\t\tif(!f)\n\t\t\tbreak;\n\t}\n}\n\n\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tsrand((unsigned)time(NULL));      //ϵͳʱʼ\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵmdc\n\n\t//ظܶͼͼ\n\tg_hBackGround= (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\tg_hSprite[0] = (HBITMAP)LoadImage(NULL,L\"11.bmp\",IMAGE_BITMAP,384,96,LR_LOADFROMFILE);\n\tg_hSprite[1] = (HBITMAP)LoadImage(NULL,L\"22.bmp\",IMAGE_BITMAP,384,96,LR_LOADFROMFILE);\n\tg_hSprite[2] = (HBITMAP)LoadImage(NULL,L\"33.bmp\",IMAGE_BITMAP,384,96,LR_LOADFROMFILE);\n\tg_hSprite[3] = (HBITMAP)LoadImage(NULL,L\"44.bmp\",IMAGE_BITMAP,384,96,LR_LOADFROMFILE);\n\n\n\t//趨ʼͼ궼Ϊڵ꣬ʼƶΪ\n\tfor(int i=0;i<SPRITE_NUMBER;i++)\n\t{\n\t\tSprite[i].direction = 3;    //ʼ\n\t\tSprite[i].x = rand()%WINDOW_WIDTH;\t   //ͼʼX\n\t\tSprite[i].y = rand()%WINDOW_HEIGHT;    //ͼʼY\n\t}\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\tif(g_iPicNum == 4)\t\t//жǷ񳬹ͼţͼš3ʾͼΪ\"0\"\n\t\tg_iPicNum = 0;\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\tBubSort(SPRITE_NUMBER);    //ͼ֮ǰBubSort\n\n\tfor(int i=0;i<SPRITE_NUMBER;i++)\n\t{\n\t\tSelectObject(g_bufdc,g_hSprite[Sprite[i].direction]);\n\t\tTransparentBlt(g_mdc,Sprite[i].x,Sprite[i].y,96,96,g_bufdc,g_iPicNum*96,0,96,96,RGB(0,0,0));//TransparentBlt͸ɫʷ\n\t}\n\n\t//Ļʾڴ\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n\tg_iPicNum++;\n\n\n\t//forѭÿһֻһεƶͼ\n\tfor(int i=0;i<SPRITE_NUMBER;i++)\n\t{\n\t\tswitch(rand()%4)          //4´ƶ0,1,2,3ֱϣ£\n\t\t{\n\t\tcase 0:\t\t\t\t\t     //\n\t\t\tSprite[i].y -= 20;\n\t\t\t//ڼµͼ֮󣬻жϴµ᲻ʹͼڱ߽磬򽫸÷ϵ趨Ϊպõٽֵ\n\t\t\tif(Sprite[i].y < 0)\n\t\t\t\tSprite[i].y = 0;\n\t\t\tSprite[i].direction = 0;\n\t\t\tbreak;\n\t\t\t//պͬķ\n\t\tcase 1:\t\t//\n\t\t\tSprite[i].y += 20;\n\t\t\tif(Sprite[i].y > WINDOW_HEIGHT-100)\n\t\t\t\tSprite[i].y = WINDOW_HEIGHT-100;\n\t\t\tSprite[i].direction = 1;\n\t\t\tbreak;\n\t\tcase 2:\t\t\t\t    \t//\n\t\t\tSprite[i].x-= 20;\n\t\t\tif(Sprite[i].x < 0)\n\t\t\t\tSprite[i].x = 0;\n\t\t\tSprite[i].direction = 2;\n\t\t\tbreak;\n\t\tcase 3:\t\t\t\t    \t//\n\t\t\tSprite[i].x+= 20;\n\n\t\t\tif(Sprite[i].x >WINDOW_WIDTH-100)\n\t\t\t\tSprite[i].x = WINDOW_WIDTH-100;\n\t\t\tSprite[i].direction = 3;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tfor (int i=0;i<4;i++)\n\t{\n\t\tDeleteObject(g_hSprite[i]);\n\t}\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/14_GDIdemo10.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo10\n//\t 20133 Create by ǳī\n//  WindowsϢ֮Ϣ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿WindowsϢ֮ Ϣ \"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSprite[4]={NULL},g_hBackGround=NULL;\t\t\t\t\t\t\t\t//λͼڴ洢ŷͼԼ洢ͼľ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\t\t\t\tg_iNum=0,g_iX=0,g_iY=0;                //g_iNum¼ͼţg_iXg_iYֱʾͼĺ\nint\t\t\t\t\tg_iDirection=0;//g_iDirectionΪƶ0123ϣ£ҷϵƶ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"ɽ».wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 50)        //˴ѭϴλͼʱ0.05ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\n\tcase WM_KEYDOWN:\t     //¼Ϣ\n\t\t//жϰ\n\t\tswitch (wParam) \n\t\t{\n\t\tcase VK_ESCAPE:           //¡Esc\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\t\tPostQuitMessage( 0 );  //\n\t\t\tbreak;\n\t\tcase VK_UP:\t\t\t\t  //¡\n\t\t\t//ݰƶÿΰһΰƶ10λͼXYֵжǷ񳬳\n\t\t\tg_iY -= 10;\n\t\t\tg_iDirection = 0;\n\t\t\tif(g_iY < 0)\n\t\t\t\tg_iY = 0;\n\t\t\tbreak;\n\t\tcase VK_DOWN:\t\t\t  //¡\n\t\t\tg_iY += 10;\n\t\t\tg_iDirection = 1;\n\t\t\tif(g_iY > WINDOW_HEIGHT-135)\n\t\t\t\tg_iY = WINDOW_HEIGHT-135;\t\n\t\t\tbreak;\n\t\tcase VK_LEFT:\t\t\t  //¡\t\t\t\n\t\t\tg_iX -= 10;\n\t\t\tg_iDirection = 2;\n\t\t\tif(g_iX < 0)\n\t\t\t\tg_iX = 0;\t\t\n\t\t\tbreak;\n\t\tcase VK_RIGHT:\t\t\t   //¡\n\t\t\tg_iX += 10;\n\t\t\tg_iDirection = 3;\n\t\t\tif(g_iX > WINDOW_WIDTH-75)\n\t\t\t\tg_iX = WINDOW_WIDTH-75;\n\t\t\tbreak;\n\t\t}\t\t\t\n\t\tbreak;\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT);\n\n\t//趨ͼʼλúƶ\n\tg_iX = 150;\n\tg_iY = 350;\n\tg_iDirection = 3;\n\tg_iNum = 0;\n\n\tSelectObject(g_mdc,bmp);\n\t//ظܶͼͼ0,1,2,3ϣ£ƶ\n\tg_hSprite[0] = (HBITMAP)LoadImage(NULL,L\"go1.bmp\",IMAGE_BITMAP,480,216,LR_LOADFROMFILE);\n\tg_hSprite[1] = (HBITMAP)LoadImage(NULL,L\"go2.bmp\",IMAGE_BITMAP,480,216,LR_LOADFROMFILE);\n\tg_hSprite[2] = (HBITMAP)LoadImage(NULL,L\"go3.bmp\",IMAGE_BITMAP,480,216,LR_LOADFROMFILE);\n\tg_hSprite[3] = (HBITMAP)LoadImage(NULL,L\"go4.bmp\",IMAGE_BITMAP,480,216,LR_LOADFROMFILE);\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//ĿǰƶȡӦ߶ͼȷȡͼĿ߶\n\tSelectObject(g_bufdc,g_hSprite[g_iDirection]);\n\tBitBlt(g_mdc,g_iX,g_iY,60,108,g_bufdc,g_iNum*60,108,SRCAND);\n\tBitBlt(g_mdc,g_iX,g_iY,60,108,g_bufdc,g_iNum*60,0,SRCPAINT);\n\t//Ļʾڴ\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n\tg_iNum++;\n\tif(g_iNum == 8)\n\t\tg_iNum = 0;\n\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tfor (int i=0;i<4;i++)\n\t{\n\t\tDeleteObject(g_hSprite[i]);\n\t}\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/15_GDIdemo11.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo11\n//\t 20133 Create by ǳī\n//  WindowsϢ֮ Ϣ  ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿WindowsϢ֮ Ϣ \"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֽṹ嶨岿֡-------------------------------------\n//\tȫֽṹ嶨\n//------------------------------------------------------------------------------------------------\nstruct SwordBullets       //SwordBulletsṹӵ\n{\n\tint x,y;        //ӵ\n\tbool exist;     //ӵǷ\n};\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSwordMan=NULL,g_hSwordBlade=NULL,g_hBackGround=NULL;\t\t//λͼڴ洢λͼԴ\nDWORD\t\tg_tPre=0,g_tNow=0;\t  //l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\t\t\t\tg_iX=0,g_iY=0,g_iXnow=0,g_iYnow=0;    //g_iX,g_iYλãg_iXnowg_iYnowǰ꣬Ҳͼλ\nint\t\t\t\t\tg_iBGOffset=0,g_iBulletNum=0;       //g_iBGOffsetΪҪüȣg_iBulletNum¼нӵĿ\nSwordBullets Bullet[30];           //һSwordBullets͵飬洢Ľӵ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"ɽԭս3.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 5)        //˴ѭϴλͼʱ0.1ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\n\tcase WM_KEYDOWN:\t     //¼Ϣ\n\t\t//жϰ\n\t\tswitch (wParam) \n\t\t{\n\t\tcase VK_ESCAPE:           //¡Esc\n\t\t\tDestroyWindow(hwnd);    // ٴ, һWM_DESTROYϢ\n\t\t\tPostQuitMessage( 0 );  //\n\t\t\tbreak;\n\t\t}\n\n\t\tbreak;\n\n\tcase WM_LBUTTONDOWN:\t\t\t//Ϣ\n\t\tfor(int i=0;i<30;i++)\n\t\t{\n\t\t\tif(!Bullet[i].exist)\n\t\t\t{\n\t\t\t\tBullet[i].x = g_iXnow;\t\t//ӵx\n\t\t\t\tBullet[i].y = g_iYnow + 30; //ӵy\n\t\t\t\tBullet[i].exist = true;\n\t\t\t\tg_iBulletNum++;\t\t\t//ۼӽӵĿ\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\tcase WM_MOUSEMOVE:   //ƶϢ\n\t\t//XĴ\n\t\tg_iX = LOWORD(lParam);\t\t\t//ȡX\n\t\tif(g_iX > WINDOW_WIDTH-317)\t//ٽ\n\t\t\tg_iX = WINDOW_WIDTH-317;\n\t\telse if(g_iX < 0)\n\t\t\tg_iX = 0;\n\t\t//YĴ\n\t\tg_iY = HIWORD(lParam);\t\t\t//ȡY\n\t\tif(g_iY > WINDOW_HEIGHT-283)\n\t\t\tg_iY = WINDOW_HEIGHT-283;\n\t\telse if(g_iY < -200)\n\t\t\tg_iY = -200;\n\t\tbreak;\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT);\n\n\t//趨ͼʼֵλóʼֵ\n\tg_iX = 300;\n\tg_iY = 100;\n\tg_iXnow = 300;\n\tg_iYnow = 100;\n\n\tSelectObject(g_mdc,bmp);\n\t//ظܶͼͼ\n\tg_hSwordMan = (HBITMAP)LoadImage(NULL,L\"swordman.bmp\",IMAGE_BITMAP,317,283,LR_LOADFROMFILE);\n\tg_hSwordBlade = (HBITMAP)LoadImage(NULL,L\"swordblade.bmp\",IMAGE_BITMAP,100,26,LR_LOADFROMFILE);\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\n\n\tPOINT pt,lt,rb;\n\tRECT rect;\n\t//趨λ\n\tpt.x = 300;\n\tpt.y = 100;\n\tClientToScreen(hwnd,&pt);\n\tSetCursorPos(pt.x,pt.y);\n\n\tShowCursor(false);\t\t//\n\n\t//ƶ\n\tGetClientRect(hwnd,&rect);  //ȡôڲ\n\t//ϵlt\n\tlt.x = rect.left;\n\tlt.y = rect.top;\n\t//rb\n\trb.x = rect.right;\n\trb.y = rect.bottom;\n\t//ltrbĴתΪĻ\n\tClientToScreen(hwnd,&lt);\n\tClientToScreen(hwnd,&rb);\n\t//Ļ趨\n\trect.left = lt.x;\n\trect.top = lt.y;\n\trect.right = rb.x;\n\trect.bottom = rb.y;\n\t//ƶ\n\tClipCursor(&rect);\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,g_iBGOffset,WINDOW_HEIGHT,g_bufdc,WINDOW_WIDTH-g_iBGOffset,0,SRCCOPY);\n\tBitBlt(g_mdc,g_iBGOffset,0,WINDOW_WIDTH-g_iBGOffset,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\twchar_t str[20] = {};\n\n\t//㽣ͼ꣬趨ÿνнͼʱͼ꣨g_iXnowg_iYnow10λڵĿĵ㣨xyӽֱͬΪֹ\n\tif(g_iXnow < g_iX)//ǰͼXСX\n\t{\n\t\tg_iXnow += 10;\n\t\tif(g_iXnow > g_iX)\n\t\t\tg_iXnow = g_iX;\n\t}\n\telse   //ǰͼXX\n\t{\n\t\tg_iXnow -=10;\n\t\tif(g_iXnow < g_iX)\n\t\t\tg_iXnow = g_iX;\n\t}\n\n\tif(g_iYnow < g_iY)  //ǰͼYСY\n\t{\n\t\tg_iYnow += 10;\n\t\tif(g_iYnow > g_iY)\n\t\t\tg_iYnow = g_iY;\n\t}\n\telse  //ǰͼYY\n\t{\n\t\tg_iYnow -= 10;  \n\t\tif(g_iYnow < g_iY)\n\t\t\tg_iYnow = g_iY;\n\t}\n\n\t//Ͻͼ\n\tSelectObject(g_bufdc,g_hSwordMan);\n\tTransparentBlt(g_mdc,g_iXnow,g_iYnow,317,283,g_bufdc,0,0,317,283,RGB(0,0,0));\n\n\t//ӵͼжϽӵĿg_iBulletNumֵǷΪ0Ϊ0ԽӵиڵĽӵڵ꣨b[i].x,b[i].yѭͼ\n\tSelectObject(g_bufdc,g_hSwordBlade);\n\tif(g_iBulletNum!=0)\n\t\tfor(int i=0;i<30;i++)\n\t\t\tif(Bullet[i].exist)\n\t\t\t{\n\t\t\t\t//Ͻӵͼ\n\t\t\t\tTransparentBlt(g_mdc,Bullet[i].x-70,Bullet[i].y+100,100,33,g_bufdc,0,0,100,26,RGB(0,0,0));\n\n\t\t\t\t//һӵꡣӵǴģˣÿXϵֵݼ10λͼƶЧӵ´εѳڵĿɼΧh[i].x<0,ôӵΪڣӵg_iBulletNumֵ1.\n\t\t\t\tBullet[i].x -= 10;\n\t\t\t\tif(Bullet[i].x < 0)\n\t\t\t\t{\n\t\t\t\t\tg_iBulletNum--;\n\t\t\t\t\tBullet[i].exist = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tHFONT hFont;  \n\t\t\thFont=CreateFont(20,0,0,0,0,0,0,0,GB2312_CHARSET,0,0,0,0,TEXT(\"΢ź\"));  //\n\t\t\tSelectObject(g_mdc,hFont);  //ѡ嵽g_mdc\n\t\t\tSetBkMode(g_mdc, TRANSPARENT);    //ֱ͸\n\t\t\tSetTextColor(g_mdc,RGB(255,255,0));  //ɫ\n\n\t\t\t//Ͻǽ\n\t\t\tswprintf_s(str,L\"XΪ%d    \",g_iX);\n\t\t\tTextOut(g_mdc,0,0,str,wcslen(str));\n\t\t\tswprintf_s(str,L\"YΪ%d    \",g_iY);\n\t\t\tTextOut(g_mdc,0,20,str,wcslen(str));\n\n\t\t\t//ϱͼ\n\t\t\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\t\t\tg_tPre = GetTickCount();\n\n\t\t\tg_iBGOffset += 5; //ñ+5\n\t\t\tif(g_iBGOffset==WINDOW_WIDTH)//ﵽ˱ֵ\n\t\t\t\tg_iBGOffset = 0;  \n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}\n\n"
  },
  {
    "path": "GDI-Game-Demo/16_GDIdemo12.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo12\n//\t 20133 Create by ǳī\n//  ˶ģ֮ ŭС ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿˶ģ֮ ŭСʾ\"\t//Ϊڱⶨĺ\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hAngrybird=NULL,g_hBackGround=NULL;   //λͼڴ洢λͼԴ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\tg_iX=0,g_iY=0,g_iXSpeed=0,g_iYSpeed=0;  //g_iX,g_iYͼλãg_iXSpeed,g_iYSpeedʾXYϵٶ\nRECT\t  g_rect;\t\t\t\t//һRECTṹ壬ڴڲ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"֥.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 20)        //˴ѭϴλͼʱ0.1ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_KEYDOWN:\t\t\t\t\t//Ϣ\n\t\tif(wParam==VK_ESCAPE)\t\t//¡Esc\n\t\t\tPostQuitMessage(0);\n\t\tbreak;\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);\n\n\t//ϷλͼԴ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\tg_hAngrybird = (HBITMAP)LoadImage(NULL,L\"angrybird.bmp\",IMAGE_BITMAP,120,60,LR_LOADFROMFILE);\n\n\tGetClientRect(hwnd,&g_rect);\t\t//ȡڲĴС\n\n\t//Сĳʼͳʼٶ\n\tg_iX=50;\n\tg_iY=50;\n\tg_iXSpeed=20;\n\tg_iYSpeed=20;\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//ݵǰСͼ\n\tSelectObject(g_bufdc,g_hAngrybird);\n\tBitBlt(g_mdc,g_iX,g_iY,60,60,g_bufdc,60,0,SRCAND);\n\tBitBlt(g_mdc,g_iX,g_iY,60,60,g_bufdc,0,0,SRCPAINT);\n\n\t//g_mdcеg_hdc\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\t//Xͼٶ\n\tg_iX += g_iXSpeed; //ͼ\n\t//ڱԵٶȷ\n\tif(g_iX <= 0)\n\t{\n\t\tg_iX = 0;\n\t\tg_iXSpeed = -g_iXSpeed;\n\t}\n\telse if(g_iX >= g_rect.right-60)\n\t{\n\t\tg_iX = g_rect.right - 60;\n\t\tg_iXSpeed = -g_iXSpeed;\n\t}\n\n\t//Yͼٶ\n\tg_iY += g_iYSpeed;\t//ͼ\t\n\t //ڱԵٶȷ\n\tif(g_iY<=0) \n\t{\n\t\tg_iY = 0;\n\t\tg_iYSpeed = -g_iYSpeed;\n\t}\n\telse if(g_iY >= g_rect.bottom-60)\n\t{\n\t\tg_iY = g_rect.bottom - 60;\n\t\tg_iYSpeed = -g_iYSpeed;\n\t}\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hAngrybird);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/17_GDIdemo13.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo13\n//\t 20133 Create by ǳī\n//  ŭСģ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿ŭСģdemo\"\t//Ϊڱⶨĺ\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hAngrybird=NULL,g_hBackGround=NULL;   //λͼڴ洢λͼԴ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\tg_iX=0,g_iY=0,g_iXSpeed=0,g_iYSpeed=0,g_iYGravity=0;  //g_iX,g_iYͼλãg_iXSpeed,g_iYSpeedʾXYϵٶ,g_iYGravityʾٶ\nRECT\t  g_rect;\t\t\t\t//һRECTṹ壬ڴڲ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"ӥ른.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 20)        //˴ѭϴλͼʱ0.1ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_KEYDOWN:\t\t\t\t\t//Ϣ\n\t\tif(wParam==VK_ESCAPE)\t\t//¡Esc\n\t\t\tPostQuitMessage(0);\n\t\tbreak;\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵg_mdc\n\n\t//ϷλͼԴ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\tg_hAngrybird = (HBITMAP)LoadImage(NULL,L\"angrybird.bmp\",IMAGE_BITMAP,120,60,LR_LOADFROMFILE);\n\n\tGetClientRect(hwnd,&g_rect);\t\t//ȡڲĴС\n\n\t//øʼֵ\n\tg_iX=0;\t//ʼg_iX=0\n\tg_iY=100;//ʼg_iY=100\n\tg_iXSpeed=3;  //ʼˮƽٶg_iXSpeed=3\n\tg_iYSpeed=0;  //ʼֱٶg_iYSpeed=0\n\tg_iYGravity=3; //ٶΪʾ㣬Ϊ3\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//Сͼ\n\tSelectObject(g_bufdc,g_hAngrybird);\n\tBitBlt(g_mdc,g_iX,g_iY,60,60,g_bufdc,60,0,SRCAND);\n\tBitBlt(g_mdc,g_iX,g_iY,60,60,g_bufdc,0,0,SRCPAINT);\n\n\t//g_mdcеg_hdc\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\t//ϵͳʵִ\n\tg_iX += g_iXSpeed;\t\t\t//X᷽ͼ꣬ÿһGame_Paintxͼһ㶨vx൱˶\n\n\tg_iYSpeed = g_iYSpeed + g_iYGravity;\t\t//Y᷽ٶȷg_iYSpeedÿһGame_Paintĵþͼһg_iYGravityٶȣ\n\tg_iY += g_iYSpeed;\t\t\t//Y᷽ͼ꣬ÿһGame_Paintyͼһոıg_iYSpeed൱ڼ˶\n\n\t//жǷ񴥵أڱ߽磬g_iYSpeedΪ෴\n\tif(g_iY >= g_rect.bottom-60)     \n\t{\n\t\tg_iY= g_rect.bottom - 60;\n\t\tg_iYSpeed= -g_iYSpeed;\n\t}\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hAngrybird);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/18_GDIdemo14.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo14\n//\t 20133 Create by ǳī\n//  ŭСĦģ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿ŭСĦģdemo\"\t//Ϊڱⶨĺ\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hAngrybird=NULL,g_hBackGround=NULL;  \t\t\t\t\t\t\t//λͼڴ洢ͼƬز\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nint\t\tg_iX,g_iY,g_iXSpeed,g_iYSpeed; //g_iX,g_iYͼλãg_iXSpeed,g_iYSpeedʾXYϵٶ\nint\t\tg_iYGravity=0,g_iXFriction=0,g_iYFriction=0;     //ٶg_iYGravityxĦΪg_iXFrictionfĦΪg_iYFriction\nRECT\t  g_rect;\t\t\t\t//һRECTṹ壬ڴڲ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"NOIR2.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 40)        //˴ѭϴλͼʱ0.04ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_KEYDOWN:\t\t\t\t\t//Ϣ\n\t\tif(wParam==VK_ESCAPE)\t\t//¡Esc\n\t\t\tPostQuitMessage(0);\n\t\tbreak;\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵmdc\n\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\tg_hAngrybird = (HBITMAP)LoadImage(NULL,L\"angrybird.bmp\",IMAGE_BITMAP,140,70,LR_LOADFROMFILE);\n\n\tGetClientRect(hwnd,&g_rect);\t\t//ȡڲĴС\n\n\t//øʼֵ\n\tg_iX=0;  //ʼg_iX=0\n\tg_iY=100;//ʼg_iY=100\n\tg_iXSpeed=8;//ʼˮƽٶg_iXSpeed=8\n\tg_iYSpeed=0; //ʼֱٶg_iYSpeed=0\n\tg_iYGravity=3;//ٶΪʾ㣬Ϊ3\n\tg_iXFriction=-1;  //ˮƽĦΪ-1\n\tg_iYFriction=-4;  //ֱĦΪ-4\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//Сͼ\n\tSelectObject(g_bufdc,g_hAngrybird);\n\tBitBlt(g_mdc,g_iX,g_iY,70,70,g_bufdc,70,0,SRCAND);\n\tBitBlt(g_mdc,g_iX,g_iY,70,70,g_bufdc,0,0,SRCPAINT);\n\n\t//g_mdcеg_hdc\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\t//Xͼٶ\n\tg_iX += g_iXSpeed;\t\t\t//X᷽ͼ꣬ÿһGame_Paintxͼһ㶨g_iXSpeed൱˶\n\tg_iYSpeed = g_iYSpeed + g_iYGravity;\t\t//Y᷽ٶȷg_iYSpeedÿһGame_Paintĵþͼһg_iYGravityٶȣ\n\tg_iY += g_iYSpeed;\t\t\t//Y᷽ͼ꣬ÿһGame_Paintyͼһոıg_iYSpeed൱ڼ˶\n\n\t//жǷ񴥵أڱ߽磬vyΪ෴\n\tif(g_iY >= g_rect.bottom-70)     \n\t{\n\t\tg_iY= g_rect.bottom - 70;\n\n\t\t//X᷽Ħ\n\t\tg_iXSpeed += g_iXFriction;\t\t//\tvx=fx+vxg_iXFrictionΪֵÿһGame_Paintg_iXSpeed㶨Сһg_iXFrictionֵĴС\t\t\t\t\n\t\tif(g_iXSpeed < 0)\t\t//g_iXSpeedֵݼС0ʱͽΪ0СXƶ\n\t\t\tg_iXSpeed = 0;\n\n\t\t//Y᷽Ħ\n\t\tg_iYSpeed += g_iYFriction;      //vy=fy+vyfyͬΪֵÿһGame_Paintg_iYSpeed㶨Сһg_iYFrictionľֵ\n\t\tif(g_iYSpeed < 0)     //ٶȼСڵ0Ϊ㣬СXƶ\n\t\t\tg_iYSpeed = 0;\n\t\t//YٶȴС䣬\n\t\tg_iYSpeed= -g_iYSpeed;\n\t}\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hAngrybird);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/19_GDIdemo15.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo4\n//\t 20133 Create by ǳī\n//  ϵͳ֮ ѩ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n#include  <time.h> //ʹûȡϵͳʱtime()Ҫͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿ϵͳ֮ ѩdemo\"\t//Ϊڱⶨĺ\n#define PARTICLE_NUMBER\t80\t\t\t\t\t\t\t//ʾĺ꣬Է޸\n\n//-----------------------------------ȫֽṹ嶨岿֡-------------------------------------\n//\tȫֽṹ嶨\n//------------------------------------------------------------------------------------------------\nstruct SNOW\n{\n\tint x; //ѩ X \n\tint y; //ѩY\n\tBOOL exist;  //ѩǷ\n};\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hSnow=NULL,g_hBackGround=NULL;  \t\t //λͼڴ洢λͼԴ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nRECT\t\t\t\tg_rect;\t\t\t\t//һRECTṹ壬ڴڲ\nSNOW\t\t\tSnowFlowers[PARTICLE_NUMBER];   //ѩ\nint\t\t\t\t\tg_SnowNum=0; //g_SnowNumڼ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"NOIR3.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 60)        //˴ѭϴλͼʱ0.06ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_KEYDOWN:\t\t\t\t\t//Ϣ\n\t\tif(wParam==VK_ESCAPE)\t\t//¡Esc\n\t\t\tPostQuitMessage(0);\n\t\tbreak;\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tsrand((unsigned)time(NULL));      //ϵͳʱʼ \n\n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵg_mdc\n\n\t//λͼԴ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\tg_hSnow = (HBITMAP)LoadImage(NULL,L\"snow.bmp\",IMAGE_BITMAP,30,30,LR_LOADFROMFILE);\n\n\tGetClientRect(hwnd,&g_rect);\t\t//ȡڲĴС\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//\n\tif(g_SnowNum< PARTICLE_NUMBER)  //Сڹ涨ʱµӣ趨ÿӵֵ\n\t{\n\t\tSnowFlowers[g_SnowNum].x = rand()%g_rect.right; //ӵXΪˮƽϵλ\n\t\tSnowFlowers[g_SnowNum].y = 0;    //ÿӵY궼Ϊ\"0\"Ӵ\n\t\tSnowFlowers[g_SnowNum].exist = true; //趨Ӵ\n\t\tg_SnowNum++;   //ÿһӺۼӼ\n\t}\n\n\n\t//жǷڣڣ͸ͼ\n\tfor(int i=0;i<PARTICLE_NUMBER;i++)\n\t{\n\t\tif(SnowFlowers[i].exist)  //ӻ\n\t\t{\n\t\t\t//ͼ\n\t\t\tSelectObject(g_bufdc,g_hSnow);\n\t\t\tTransparentBlt(g_mdc,SnowFlowers[i].x,SnowFlowers[i].y,30,30,g_bufdc,0,0,30,30,RGB(0,0,0));\n\n\t\t\t//ƶƫ\n\t\t\tif(rand()%2==0)\n\t\t\t\tSnowFlowers[i].x+=rand()%6;  //x0~5֮һֵ\n\t\t\telse \n\t\t\t\tSnowFlowers[i].x-=rand()%6;\t //y0~5֮һֵ\n\t\t\t//ݷ˶\n\t\t\tSnowFlowers[i].y+=10;  //10\n\t\t\t//곬˴ڳȣxڴڶ\n\t\t\tif(SnowFlowers[i].y > g_rect.bottom)\n\t\t\t{\n\t\t\t\tSnowFlowers[i].x = rand()%g_rect.right;\n\t\t\t\tSnowFlowers[i].y = 0;\n\t\t\t}\n\t\t}\n\n\t}\n\t//mdcеȫhdc\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hSnow);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/1_HelloVisualStudio.cpp",
    "content": "#include <Windows.h>\nint WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)\n{ \n\tMessageBox( NULL, L\"First blood! ãVisual Studio\", L\" Ϣ\", 0 );//ʾһϢ\n\treturn 0; \n} \n\n"
  },
  {
    "path": "GDI-Game-Demo/20_GDIdemo16.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo16\n//\t 20133 Create by ǳī\n//  ϵͳ֮ ǹ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n#include  <time.h> //ʹûȡϵͳʱtimeҪͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿ϵͳ֮ ǹdemo\"\t//Ϊڱⶨĺ\n#define FLYSTAR_NUMBER\t100\t\t\t\t\t\t\t//ʾĺ꣬Է޸\n#define FLYSTAR_LASTED_FRAME 60                \t//ʾӳ֡ĺ꣬Է޸ÿǹųʱ           \n\n\n//-----------------------------------ȫֽṹ嶨岿֡-------------------------------------\n//\tȫֽṹ嶨\n//------------------------------------------------------------------------------------------------\nstruct FLYSTAR\n{\n\tint x;       //ǹڵx\n\tint y;       //ǹڵy\n\tint vx;      //ǹxٶ\n\tint vy;      //ǹyٶ\n\tint lasted;  //ǹڵʱ\n\tBOOL exist;  //ǹǷ\n};\n\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nHBITMAP\t\tg_hStar=NULL,g_hBackGround=NULL;  \t\t //λͼڴ洢λͼԴ\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nRECT\t\t\t\tg_rect;\t\t\t\t//һRECTṹ壬ڴڲ\nFLYSTAR\t\tFlyStars[FLYSTAR_NUMBER];  //\nint\t\t\t\t\tg_StarNum=0; //g_StarNumڼ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,150,20,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ150,20\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"뤫 (Long Version).wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 30)        //˴ѭϴλͼʱ0.03ʱٽػ\n\t\t\t\tGame_Paint(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_KEYDOWN:\t\t\t\t\t//Ϣ\n\t\tif(wParam==VK_ESCAPE)\t\t//¡Esc\n\t\t\tPostQuitMessage(0);\n\t\tbreak;\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\n\tsrand((unsigned)time(NULL));      //ϵͳʱʼ \n\tHBITMAP bmp;\n\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵg_mdc\n\n\t//λͼ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);\n\tg_hStar = (HBITMAP)LoadImage(NULL,L\"star.bmp\",IMAGE_BITMAP,30,30,LR_LOADFROMFILE);\n\n\tGetClientRect(hwnd,&g_rect);\t\t//ȡڲĴС\n\n\tGame_Paint(hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//\n\tif(g_StarNum == 0)              //ñը\n\t{\n\t\tint\tx=rand()%g_rect.right;\n\t\tint\ty=rand()%g_rect.bottom;\n\n\t\tfor(int i=0;i<FLYSTAR_NUMBER;i++)       //ǹ\n\t\t{\n\t\t\tFlyStars[i].x = x;\n\t\t\tFlyStars[i].y = y;\n\t\t\tFlyStars[i].lasted = 0;  //趨ӴڵʱΪ\n\t\t\t //ӱiĸ˶xyƶٶΪ115֮һֵ1+rand()%15ɡ\n\t\t\tif(i%4==0)      \n\t\t\t{\n\t\t\t\tFlyStars[i].vx =  -(1+rand()%15);\n\t\t\t\tFlyStars[i].vy =  -(1+rand()%15);\n\t\t\t}\n\t\t\tif(i%4==1)\n\t\t\t{\n\t\t\t\tFlyStars[i].vx = 1+rand()%15;\n\t\t\t\tFlyStars[i].vy = 1+rand()%15;\n\t\t\t}\n\t\t\tif(i%4==2)\n\t\t\t{\n\t\t\t\tFlyStars[i].vx = -(1+rand()%15);\n\t\t\t\tFlyStars[i].vy = 1+rand()%15;\n\t\t\t}\n\t\t\tif(i%4==3)\n\t\t\t{\n\t\t\t\tFlyStars[i].vx = 1+rand()%15;\n\t\t\t\tFlyStars[i].vy = -(1+rand()%15);\n\t\t\t}\n\t\t\tFlyStars[i].exist = true;  //趨Ӵ\n\t\t}\n\t\tg_StarNum = FLYSTAR_NUMBER;   //ȫforѭɺǽΪFLYSTAR_NUMBERĿǰFLYSTAR_NUMBERǹ\n\t}\n\n\n\t//ʾӲһ֡\n\tfor(int i=0;i<FLYSTAR_NUMBER;i++)\n\t{\n\t\tif(FlyStars[i].exist)   //жǷ񻹴,ڣ꣨FlyStars[i].x,FlyStars[i].yͼ\n\t\t{\n\t\t\tSelectObject(g_bufdc,g_hStar);\n\t\t\tTransparentBlt(g_mdc,FlyStars[i].x,FlyStars[i].y,30,30,g_bufdc,0,0,30,30,RGB(0,0,0));\n\n\t\t\t//һͼ\n\t\t\tFlyStars[i].x+=FlyStars[i].vx;\n\t\t\tFlyStars[i].y+=FlyStars[i].vy;\n\n\t\t\t//ÿһͼ󣬽ӵĴʱۼ1.\n\t\t\tFlyStars[i].lasted++;\n\t\t\t//жϣĳܳһķΧ򽫸Ϊڣ֮ݼ\n\t\t\tif(FlyStars[i].x<=-10 || FlyStars[i].x>g_rect.right || FlyStars[i].y<=-10 || FlyStars[i].y>g_rect.bottom || FlyStars[i].lasted>FLYSTAR_LASTED_FRAME)\n\t\t\t{\n\t\t\t\tFlyStars[i].exist = false;  //ɾǹ \n\t\t\t\tg_StarNum--;                    //ݼǹ\n\t\t\t}\n\t\t}\n\t}\n\n\t//mdcеȫhdc\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hStar);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/21_GDIdemo17.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo17\n//\t 20133 Create by ǳī\n//  СͻغϷ߶\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include <tchar.h>//ʹswprintf_sͷļ\n#include  <time.h> //ʹûȡϵͳʱtime()Ҫͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")\t\t\t//PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")\t\t//ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\t\tL\"ϨϷ롿߶\"\t//Ϊڱⶨĺ\n#define PARTICLE_NUMBER\t50\t\t\t\t\t\t\t//ʾĺ꣬Է޸\n\n\n//-----------------------------------ȫֽṹö嶨岿֡-------------------------\n//\tȫֽṹöٵĶ\n//------------------------------------------------------------------------------------------------\n//һɫṹ\nstruct CHARACTER  \n{\n\tint\t\tNowHp;\t\t//ǰֵ\n\tint\t\tMaxHp;\t\t\t//ֵ\n\tint\t\tNowMp;\t\t//ǰħֵ\n\tint\t\tMaxMp;\t\t//ħֵ\n\tint\t\tLevel;\t\t\t//ɫȼ\n\tint\t\tStrength;\t\t//ɫֵ\n\tint\t\tIntelligence; //ɫֵ\n\tint\t\tAgility;\t\t\t//ɫֵ\n};\n\nstruct SNOW\n{\n\tint x; //ѩ X \n\tint y; //ѩY\n\tBOOL exist;  //ѩǷ\n};\n\n\n//һö\nenum ActionTypes\n{\n\tACTION_TYPE_NORMAL=0,\t\t//ͨ\n\tACTION_TYPE_CRITICAL=1,\t\t//һ\n\tACTION_TYPE_MAGIC=2,\t\t//ħ\n\tACTION_TYPE_MISS=3,\t\t\t//\t\n\tACTION_TYPE_RECOVER=4,\t//ͷŻָħ \n};\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL,g_bufdc=NULL;      //ȫ豸ȫڴDC\nDWORD\t\tg_tPre=0,g_tNow=0;\t\t\t\t\t//l¼ʱ,g_tPre¼һλͼʱ䣬g_tNow¼˴׼ͼʱ\nRECT\t\t\t\tg_rect;\t\t\t\t//һRECTṹ壬ڴڲ\nint\t\t\t\t\tg_iFrameNum,g_iTxtNum;  //֡\nwchar_t\t\t\ttext[8][100];  //洢ֵַ\nBOOL\t\t\tg_bCanAttack,g_bGameOver;   //Ϸ״̬ʶɫǷԹϷǷ\nSNOW\t\t\tSnowFlowers[PARTICLE_NUMBER];   //ѩ\nint\t\t\t\t\tg_SnowNum=0; //g_SnowNumѩļ\nCHARACTER\tHero,Boss;  //ɫṹʵֱʾӢۺBOSS\nActionTypes\tHeroActionType,BossActionType;  //öʵֱʾӢۺBOSSĶ\n//һϵλͼĶ\nHBITMAP\t\tg_hBackGround,g_hGameOver,g_hVictory,g_hSnow;  //ϷϷʤλͼ\nHBITMAP\t\tg_hMonsterBitmap,g_hHeroBitmap,g_hRecoverSkill;  //BOSSɫͼӢ۽ɫͼָͼλͼ\nHBITMAP\t\tg_hSkillButton1,g_hSkillButton2,g_hSkillButton3,g_hSkillButton4;  //4ܰťλͼ\nHBITMAP\t\tg_hHeroSkill1,g_hHeroSkill2,g_hHeroSkill3;  //3ӢۼЧλͼ\nHBITMAP\t\tg_hBossSkill1,g_hBossSkill2,g_hBossSkill3;  //3BOSSЧλͼ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Main( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_ShutDown(HWND hwnd );\t//ڴ˺нԴ\nVOID\t\t\t\t\t\t\tDie_Check(int NowHp,bool isHero);   //麯\nVOID\t\t\t\t\t\t\tMessage_Insert(wchar_t* str);  //Ϣ\nVOID\t\t\t\t\t\t\tHeroAction_Logic();  //Ӣ۶߼жϺ\nVOID\t\t\t\t\t\t\tHeroAction_Paint();  //Ӣ۶ͼ\nVOID\t\t\t\t\t\t\tBossAction_Logic(); //ﶯ߼жϺ\nVOID\t\t\t\t\t\t\tBossAction_Paint(); //ﶯͼ\nVOID\t\t\t\t\t\t\tSnow_Paint();\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"GameMedia\\\\λԭ-ս1-ɭ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tg_tNow = GetTickCount();   //ȡǰϵͳʱ\n\t\t\tif(g_tNow-g_tPre >= 60)        //˴ѭϴλͼʱ0.06ʱٽػ\n\t\t\t\tGame_Main(hwnd);\n\t\t}\n\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_KEYDOWN:\t\t\t\t\t//Ϣ\n\t\tif(wParam==VK_ESCAPE)\t\t//¡Esc\n\t\t\tPostQuitMessage(0);\n\t\tbreak;\n\n\tcase WM_LBUTTONDOWN:\t\t\t//Ϣ\n\t\tif(!g_bCanAttack)\n\t\t{\n\t\t\tint x = LOWORD(lParam);\t\t//X\n\t\t\tint y = HIWORD(lParam);\t\t//Y\n\n\t\t\tif(x >= 530 && x <= 570 && y >=420 && y <= 470)\n\t\t\t{\tg_bCanAttack = true;\n\t\t\t\tHeroActionType=ACTION_TYPE_NORMAL;\n\t\t\t}\n\t\t\tif(x >= 590 && x <= 640 && y >=420 && y <= 470)\n\t\t\t{\n\t\t\t\tg_bCanAttack = true;\n\t\t\t\tHeroActionType=ACTION_TYPE_MAGIC;\n\t\t\t}\n\t\t\tif(x >= 650 && x <= 700 && y >=420 && y <= 470)\n\t\t\t{\n\t\t\t\tg_bCanAttack = true;\n\t\t\t\tHeroActionType=ACTION_TYPE_RECOVER;\n\t\t\t}\n\t\t\t\n\t\t}\n\t\tbreak;\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_ShutDown(hwnd);\t\t\t//ԶԴGame_ShutDown˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼϷԴĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tsrand((unsigned)time(NULL));      //ϵͳʱʼ \n\n\tHBITMAP bmp;\n\n\t//ϵĴ\n\tg_hdc = GetDC(hwnd);  \n\tg_mdc = CreateCompatibleDC(g_hdc);  //һhdcݵڴDC\n\tg_bufdc = CreateCompatibleDC(g_hdc);//ٴһhdcݵĻDC\n\tbmp = CreateCompatibleBitmap(g_hdc,WINDOW_WIDTH,WINDOW_HEIGHT); //һʹڼݵĿյλͼ\n\n\tSelectObject(g_mdc,bmp);//λͼŵmdc\n\n\t//һϵϷԴͼλͼ\n\tg_hGameOver=(HBITMAP)LoadImage(NULL,L\"GameMedia\\\\gameover.bmp\",IMAGE_BITMAP,1086,396,LR_LOADFROMFILE);  //Ϸλͼ\n\tg_hVictory=(HBITMAP)LoadImage(NULL,L\"GameMedia\\\\victory.bmp\",IMAGE_BITMAP,800,600,LR_LOADFROMFILE);  //Ϸʤλͼ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\bg.bmp\",IMAGE_BITMAP,800,600,LR_LOADFROMFILE);  //λͼ\n\tg_hMonsterBitmap = (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\monster.bmp\",IMAGE_BITMAP,360,360,LR_LOADFROMFILE);  //ɫλͼ\n\tg_hHeroBitmap = (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\hero.bmp\",IMAGE_BITMAP,360,360,LR_LOADFROMFILE);  //Ӣ۽ɫλͼ\n\tg_hHeroSkill1=(HBITMAP)LoadImage(NULL,L\"GameMedia\\\\heroslash.bmp\",IMAGE_BITMAP,364,140,LR_LOADFROMFILE);  //Ӣ1λͼ\n\tg_hHeroSkill2=(HBITMAP)LoadImage(NULL,L\"GameMedia\\\\heromagic.bmp\",IMAGE_BITMAP,374,288,LR_LOADFROMFILE);  //Ӣ2λͼ\n\tg_hHeroSkill3=(HBITMAP)LoadImage(NULL,L\"GameMedia\\\\herocritical.bmp\",IMAGE_BITMAP,574,306,LR_LOADFROMFILE);  //Ӣ3λͼ\n\tg_hSkillButton1 = (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\skillbutton1.bmp\",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);  //1ͼλͼ\n\tg_hSkillButton2= (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\skillbutton2.bmp\",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);   //2ͼλͼ\n\tg_hSkillButton3= (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\skillbutton3.bmp\",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);   //3ͼλͼ\n\tg_hSkillButton4= (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\skillbutton4.bmp\",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);   //4ͼλͼ\n\tg_hBossSkill1= (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\monsterslash.bmp\",IMAGE_BITMAP,234,188,LR_LOADFROMFILE);   //1λͼ\n\tg_hBossSkill2= (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\monstermagic.bmp\",IMAGE_BITMAP,387,254,LR_LOADFROMFILE);  //2λͼ\n\tg_hBossSkill3= (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\monstercritical.bmp\",IMAGE_BITMAP,574,306,LR_LOADFROMFILE); //3λͼ\n\tg_hSnow = (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\snow.bmp\",IMAGE_BITMAP,30,30,LR_LOADFROMFILE);   //ѩλͼ\n\tg_hRecoverSkill = (HBITMAP)LoadImage(NULL,L\"GameMedia\\\\recover.bmp\",IMAGE_BITMAP,150,150,LR_LOADFROMFILE);    //ָλͼ\n\n\tGetClientRect(hwnd,&g_rect);\t\t//ȡڲĴС\n\n\t//趨ʥʿĸֵ\n\tHero.NowHp = Hero.MaxHp = 1000;\t//趨ֵĵǰֵ\n\tHero.Level = 6;\t\t\t\t\t//趨ҽɫȼ\n\tHero.NowMp=Hero.MaxMp=60;    //ħֵĵǰֵ\n\tHero.Strength  = 10;\t\t\t//趨Ӣ۵ֵ\n\tHero.Agility=20;\t\t\t\t//趨Ӣ۵ֵ   \n\tHero.Intelligence=10;\t\t//趨Ӣ۵ֵ\n\n\t//趨BOSSƽħĸֵ\n\tBoss.NowHp = Boss.MaxHp = 2000;\t//趨BOSSֵĵǰֵ\n\tBoss.Level = 10;\t\t\t\t\t\t//趨BOSSĵȼ\n\tBoss.Strength = 10;\t\t\t\t//趨BOSSֵ\n\tBoss.Agility=10;                   //趨BOSSֵ\n\tBoss.Intelligence=10;\t\t\t//趨BOSSֵ\n\n\tg_iTxtNum = 0;\t\t//ʼʾϢĿ\n\n\t//\n\tHFONT hFont;\n\thFont=CreateFont(20,0,0,0,700,0,0,0,GB2312_CHARSET,0,0,0,0,TEXT(\"΢ź\"));\n\tSelectObject(g_mdc,hFont);\n\tSetBkMode(g_mdc, TRANSPARENT);    //ʾ͸\n\n\tGame_Main(hwnd);  //һϷMain\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Main( )--------------------------------------\n//\tϷMainϷ࣬ϷССĺ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Main( HWND hwnd )\n{\n\twchar_t str[100];\n\n\t//mdcϱͼ\n\tSelectObject(g_bufdc,g_hBackGround);\n\tBitBlt(g_mdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_bufdc,0,0,SRCCOPY);\n\n\t//ѩЧĻ\n\tif (!g_bGameOver)//Ϸδ\n\t{\n\t\tSnow_Paint(); //÷װѩЧĺģѩ\n\t}\n\n\t//ʾսϢ\n\tSetTextColor(g_mdc,RGB(255,255,255));\n\tfor(int i=0;i<g_iTxtNum;i++)\n\t\tTextOut(g_mdc,20,410+i*18,text[i],wcslen(text[i]));\n\n\t//ϹͼԼʾѪ\n\tif(Boss.NowHp>0)\n\t{\n\t\t//Ϲͼ\n\t\tSelectObject(g_bufdc,g_hMonsterBitmap);\n\t\tTransparentBlt(g_mdc,0,50,360,360,g_bufdc,0,0,360,360,RGB(0,0,0));//TransparentBlt͸ͼ\n\t\t//ʾѪ\n\t\tswprintf_s(str,L\"%d / %d\",Boss.NowHp,Boss.MaxHp);\n\t\tSetTextColor(g_mdc,RGB(255,10,10));\n\t\tTextOut(g_mdc,100,370,str,wcslen(str));\n\t}\n\n\t//ͼԼֵħֵʾ\n\tif(Hero.NowHp>0)\n\t{\n\t\t//ͼ\n\t\tSelectObject(g_bufdc,g_hHeroBitmap);\n\t\tTransparentBlt(g_mdc,400,50,360,360,g_bufdc,0,0,360,360,RGB(0,0,0));//͸ɫΪRGB(0,0,0)ɫ\n\t\t//ʾѪ\n\t\tswprintf_s(str,L\"%d / %d\",Hero.NowHp,Hero.MaxHp);\n\t\tSetTextColor(g_mdc,RGB(255,10,10));\n\t\tTextOut(g_mdc,600,350,str, wcslen(str));\n\t\t//ʾħֵ\n\t\tswprintf_s(str,L\"%d / %d\",Hero.NowMp,Hero.MaxMp);\n\t\tSetTextColor(g_mdc,RGB(10,10,255));\n\t\tTextOut(g_mdc,600,370,str, wcslen(str));\n\t}\n\n\t//жϷǷ\n\tif(g_bGameOver)\t\t\t\t\n\t{\n\t\tif(Hero.NowHp <= 0)  //GameOverͼƬ\n\t\t{\n\t\t\tSelectObject(g_bufdc,g_hGameOver);\n\t\t\tBitBlt(g_mdc,120,50,543,396,g_bufdc,543,0,SRCAND);\n\t\t\tBitBlt(g_mdc,120,50,543,396,g_bufdc,0,0,SRCPAINT);\n\t\t}\n\n\t\telse  //ʤͼƬ\n\t\t{\n\t\t\tSelectObject(g_bufdc,g_hVictory);\n\t\t\tTransparentBlt(g_mdc,0,0,800,600,g_bufdc,0,0,800,600,RGB(0,0,0));//͸ɫΪRGB(0,0,0)\n\t\t}\n\t}\n\t//ϷûΪҿɹ״̬ϼͼ\n\telse if(!g_bCanAttack)\t\t//ϼܰť\n\t{\n\t\tSelectObject(g_bufdc,g_hSkillButton1);\n\t\tBitBlt(g_mdc,530,420,50,50,g_bufdc,0,0,SRCCOPY);\n\t\tSelectObject(g_bufdc,g_hSkillButton2);\n\t\tBitBlt(g_mdc,590,420,50,50,g_bufdc,0,0,SRCCOPY);\n\t\tSelectObject(g_bufdc,g_hSkillButton3);\n\t\tBitBlt(g_mdc,650,420,50,50,g_bufdc,0,0,SRCCOPY);\n\t\tSelectObject(g_bufdc,g_hSkillButton4);\n\t\tBitBlt(g_mdc,710,420,50,50,g_bufdc,0,0,SRCCOPY);\n\t}\t\n\t//ϷûΪҲɹ״̬㿪ʼĻͼ\n\telse\n\t{\n\t\tg_iFrameNum++;\n\n\t\t//5~10ʱʾҹЧͼ\n\t\tif(g_iFrameNum>=5 && g_iFrameNum<=10)\n\t\t{\n\t\t\t//5ʱ֮ǰϷ߼Ϣʾ\n\t\t\tif(g_iFrameNum == 5)\n\t\t\t{\t\t\t\n\t\t\t\tHeroAction_Logic( );\n\t\t\t\tDie_Check(Boss.NowHp,false);\n\t\t\t}\t\n\t\t\t//ĶͽӦͼ\n\t\t\tHeroAction_Paint();\n\t\t}\n\n\t\t//15ʱжϹ\n\t\tif(g_iFrameNum == 15)\n\t\t{\n\t\t\tBossAction_Logic();\n\t\t}\n\n\t\t//26~30ʱʾ﹥ͼ\n\t\tif(g_iFrameNum>=26  && g_iFrameNum<=30)\n\t\t{\n\t\t\tBossAction_Paint();\n\t\t}\n\n\t\tif(g_iFrameNum == 30)\t\t\t//غϽ\n\t\t{\n\t\t\tg_bCanAttack = false;\n\t\t\tg_iFrameNum = 0;\n\n\t\t\t//ÿغϵħȻָ6̶ֵ0ֵ֮һֵ\n\t\t\tif(!g_bGameOver)\n\t\t\t{\n\t\t\t\tint MpRecover=2*(rand()%Hero.Intelligence)+6;\n\t\t\t\tHero.NowMp+=MpRecover;\n\n\t\t\t\tif (Hero.NowMp>=Hero.MaxMp)\n\t\t\t\t{\n\t\t\t\t\tHero.NowMp=Hero.MaxMp;\n\t\t\t\t}\n\t\t\t\n\t\t\tswprintf_s(str,L\"غϽԶָˡ%dħֵ\",MpRecover);\n\t\t\tMessage_Insert(str);\n\t\t\t}\n\t\t}\n\t}\n\n\t//mdcеȫhdc\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);\n\tg_tPre = GetTickCount();     //¼˴λͼʱ\n}\n\n\n//-----------------------------------Message_Insert( )----------------------------------\n//\tսϢڲϢ\n//---------------------------------------------------------------------------------------------------\nvoid Message_Insert(wchar_t* str)\n{\n\t//δ8Ϣֱ¿һϢ\n\tif(g_iTxtNum < 8)\n\t{\n\t\tswprintf_s(text[g_iTxtNum],str);\n\t\tg_iTxtNum++;\n\t}\n\t//8ϢֻмһϢ\n\telse\n\t{\n\t\tfor(int i=0;i<g_iTxtNum;i++)\n\t\t\tswprintf_s(text[i],text[i+1]);\n\t\t\tswprintf_s(text[7],str);\n\t}\n}\n\n\n//-----------------------------------Die_Check( )----------------------------------------\n//\tֵжϺɫǷһĳɫǰֵ\n//--------------------------------------------------------------------------------------------------\nvoid Die_Check(int NowHp,bool isHero)\n{\n\twchar_t str[100];\n\t\n\tif(NowHp <= 0)//ֵСڵ0\n\t{\n\t\tg_bGameOver = true;\n\t\tif(isHero)  //Ӣ۵ֵС㣬ʾϷʧ\n\t\t{\n\t\t\tPlaySound(L\"GameMedia\\\\failure.wav\", NULL, SND_FILENAME | SND_ASYNC); //ʧ \n\t\t\tswprintf_s(str,L\": ( ʤ˱ҳ£......\");  //ʧʾ\n\t\t\tMessage_Insert(str);  //뵽Ϣ\n\t\t}\n\t\telse\n\t\t{\n\t\t\tPlaySound(L\"GameMedia\\\\victory.wav\", NULL, SND_FILENAME | SND_ASYNC); //ʤ \n\t\t\tswprintf_s(str,L\"꣬ӮˣӰ~~~~~\");  //ʤʾ\n\t\t\tMessage_Insert(str);  //뵽Ϣ\n\t\t}\n\t}\n}\n\n//-----------------------------------HeroAction_Logic( )------------------------------\n//\tҶ߼жϺ\n//--------------------------------------------------------------------------------------------------\nVOID\t\tHeroAction_Logic( )\n{\n\t\tint damage=0;\n\t\twchar_t str[100];\n\n\t\tswitch( HeroActionType)\n\t\t{\n\t\t\tcase ACTION_TYPE_NORMAL:\n\n\t\t\t\tif (1==rand()%4)                   // 20%ʴӰ̿͵ĴУͽѣ4˺\n\t\t\t\t{\n\t\t\t\t\tHeroActionType=ACTION_TYPE_CRITICAL;\n\t\t\t\t\tdamage = (int)(4.5f*(float)(3*(rand()%Hero.Agility) + Hero.Level*Hero.Strength+20));\n\t\t\t\t\tBoss.NowHp -= (int)damage;\n\n\t\t\t\t\tswprintf_s(str,L\"ͽѴţˣ4.5...Թճˡ%d˺\",damage);\n\t\t\t\t} \n\t\t\t\telse       //ûдͽѡͨ޵ն\n\t\t\t\t{\n\t\t\t\t\tdamage = 3*(rand()%Hero.Agility) + Hero.Level*Hero.Strength+20;\n\t\t\t\t\tBoss.NowHp -= (int)damage;\n\n\t\t\t\t\tswprintf_s(str,L\"ʥʿʹͨ޵ն˺һ...Թճˡ%d˺\",damage);\n\t\t\t\t}\n\n\t\t\t\tMessage_Insert(str);\n\t\t\t\tbreak;\n\n\t\t\tcase ACTION_TYPE_MAGIC:  //ͷһ𽣷\n\t\t\t\tif(Hero.NowMp>=30)\n\t\t\t\t{\n\t\t\t\t\tdamage = 5*(2*(rand()%Hero.Agility) + Hero.Level*Hero.Intelligence);\n\t\t\t\t\tBoss.NowHp -= (int)damage;\n\t\t\t\t\tHero.NowMp-=30;\n\t\t\t\t\tswprintf_s(str,L\"ʥʿͷһ𽣷...Թճˡ%d˺\",damage);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tHeroActionType=ACTION_TYPE_MISS;\n\t\t\t\t\tswprintf_s(str,L\"ɵ~!ħֵ30㣬ʩʧܣغϰ׷~\");\n\t\t\t\t}\n\t\t\t\tMessage_Insert(str);\n\t\t\t\tbreak;\n\n\t\t\tcase ACTION_TYPE_RECOVER:  //ʹ\n\n\t\t\t\t\tif(Hero.NowMp>=40)\n\t\t\t\t\t{\n\t\t\t\t\t\tHero.NowMp-=40;\n\t\t\t\t\t\tint HpRecover=5*(5*(rand()%Hero.Intelligence)+40);\n\t\t\t\t\t\tHero.NowHp+=HpRecover;\n\t\t\t\t\t\tif (Hero.NowHp>=Hero.MaxHp)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tHero.NowHp=Hero.MaxHp;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswprintf_s(str,L\"ʥʿʹָˡ%dֵоöˡ\",HpRecover);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tHeroActionType=ACTION_TYPE_MISS;\n\t\t\t\t\t\tswprintf_s(str,L\"ɵ~!ħֵ40㣬ʩʧܣغϰ׷~\");\n\t\t\t\t\t}\n\t\t\t\t\tMessage_Insert(str);\n\t\t\t\t\tbreak;\n\t\t}\n\t\t\n}\n\n\n//-----------------------------------HeroAction_Paint( )-------------------------------\n//\tҶͼ\n//--------------------------------------------------------------------------------------------------\nVOID HeroAction_Paint()\n{\n\tswitch (HeroActionType)\n\t{\n\tcase ACTION_TYPE_NORMAL:   //ͨ޵ն\n\t\tSelectObject(g_bufdc,g_hHeroSkill1);\n\t\tTransparentBlt(g_mdc,50,170,364,140,g_bufdc,0,0,364,140,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\tbreak;\n\n\tcase ACTION_TYPE_CRITICAL:  //ͽ\n\t\tSelectObject(g_bufdc,g_hHeroSkill3);\n\t\tTransparentBlt(g_mdc,20,60,574,306,g_bufdc,0,0,574,306,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\tbreak;\n\n\tcase ACTION_TYPE_MAGIC:  //ħһ𽣷\n\t\tSelectObject(g_bufdc,g_hHeroSkill2);\n\t\tTransparentBlt(g_mdc,50,100,374,288,g_bufdc,0,0,374,288,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\tbreak;\n\n\tcase ACTION_TYPE_RECOVER:   //ָ\n\t\tSelectObject(g_bufdc,g_hRecoverSkill);\n\t\tTransparentBlt(g_mdc,560,170,150,150,g_bufdc,0,0,150,150,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\tbreak;\n\t}\n}\n\n//-----------------------------------BossAction_Logic( )-------------------------------\n//\tBoss߼жϺ\n//--------------------------------------------------------------------------------------------------\nVOID BossAction_Logic()\n{\n\tsrand((unsigned)time(NULL));      //ϵͳʱʼ \n\tif(Boss.NowHp > (Boss.MaxHp/2))\t\t\t\t//ֵ1/2ʱ\n\t{\n\t\tswitch(rand()%3)\n\t\t{\n\t\tcase 0:\t\t\t\t\t\t//ͷͨڤ\n\t\t\tBossActionType = ACTION_TYPE_NORMAL;\n\t\t\tbreak;\n\t\tcase 1:\t\t\t\t\t\t//ͷһ\n\t\t\tBossActionType = ACTION_TYPE_CRITICAL;\n\t\t\tbreak;\n\t\tcase 2:\t\t\t\t\t\t//ʹѪ\n\t\t\tBossActionType = ACTION_TYPE_MAGIC;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse\t\t\t\t\t\t\t\t//ֵС1/2ʱ\n\t{\n\t\tswitch(rand()%3)\n\t\t{\n\t\tcase 0:\t\t\t\t\t\t//ͷѪ\n\t\t\tBossActionType = ACTION_TYPE_MAGIC;\n\t\t\tbreak;\n\t\tcase 1:\t\t\t\t\t\t//ͷһ\n\t\t\tBossActionType = ACTION_TYPE_CRITICAL;\n\t\t\tbreak;\n\t\tcase 2:\t\t\t\t\t\t//ʹ÷˹ķظ\n\t\t\tBossActionType = ACTION_TYPE_RECOVER;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\n//-----------------------------------BossAction_Paint( )-------------------------------\n//\tBossͼ\n//--------------------------------------------------------------------------------------------------\nVOID\t\tBossAction_Paint()\n{\n\tint damage=0,recover=0;\n\twchar_t str[100];\n\n\tswitch(BossActionType)\n\t{\n\tcase ACTION_TYPE_NORMAL:\t\t\t\t\t\t\t//ͷͨڤ\n\t\tSelectObject(g_bufdc,g_hBossSkill1);\n\t\tTransparentBlt(g_mdc,500,150,234,188,g_bufdc,0,0,234,188,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\t//30ʱ˺̶ȲʾϢ\n\t\tif(g_iFrameNum == 30)\n\t\t{\n\t\t\tdamage = rand()%Boss.Agility+ Boss.Level*Boss.Strength;\n\t\t\tHero.NowHp -= (int)damage;\n\n\t\t\tswprintf_s(str,L\"ƽħͷڤ...ճɡ %d ˺\",damage);\n\t\t\tMessage_Insert(str);\n\n\t\t\tDie_Check(Hero.NowHp,true);\n\t\t}\n\t\tbreak;\n\n\tcase ACTION_TYPE_MAGIC:\t\t\t\t\t\t\t//ͷѪ\n\t\tSelectObject(g_bufdc,g_hBossSkill2);\n\t\tTransparentBlt(g_mdc,450,150,387,254,g_bufdc,0,0,387,254,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\t//30ʱ˺̶ȲʾϢ\n\t\tif(g_iFrameNum == 30)\n\t\t{\n\t\t\tdamage = 2*(2*(rand()%Boss.Agility) + Boss.Strength*Boss.Intelligence);  //Ѫ˺ֵ\n\t\t\tHero.NowHp -= damage;\t   //ӢѪһ˺ֵ\n\t\t\trecover\t=(int)((float)damage*0.2f);   //Ѫ20%\n\t\t\tBoss.NowHp+=recover;   //ָѪ\n\t\t\tswprintf_s(str,L\"ƽħͷѪ...ճɡ %d ˺,ָ%dֵ\",damage,recover);   //ָʽ\n\t\t\tMessage_Insert(str);   //Ϣ\n\n\t\t\tDie_Check(Hero.NowHp,true);\n\t\t}\n\t\tbreak;\n\n\tcase ACTION_TYPE_CRITICAL:\t\t\t\t\t\t\t//ͷһ\n\t\tSelectObject(g_bufdc,g_hBossSkill3);\n\t\tTransparentBlt(g_mdc,280,100,574,306,g_bufdc,0,0,574,306,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\t//30ʱ˺̶ȲʾϢ\n\t\tif(g_iFrameNum == 30)\n\t\t{\n\t\t\tdamage = 2*(rand()%Boss.Agility+ Boss.Level*Boss.Strength);\n\t\t\tHero.NowHp -= (int)damage;\n\n\t\t\tswprintf_s(str,L\"ƽħһ...ճɡ%d˺.\",damage);\n\t\t\tMessage_Insert(str);\n\n\t\t\tDie_Check(Hero.NowHp,true);\n\t\t}\n\t\tbreak;\n\n\tcase ACTION_TYPE_RECOVER:\t\t\t\t\t\t\t//ʹ÷˹ķѪ\n\t\tSelectObject(g_bufdc,g_hRecoverSkill);\n\t\tTransparentBlt(g_mdc,150,150,150,150,g_bufdc,0,0,150,150,RGB(0,0,0));//TransparentBlt͸ɫΪRGB(0,0,0)\n\t\t//30ʱظֵʾϢ\n\t\tif(g_iFrameNum == 30)\n\t\t{\n\t\t\t\trecover= 2*Boss.Intelligence*Boss.Intelligence;\n\t\t\t\tBoss.NowHp +=recover;\n\t\t\tswprintf_s(str,L\"ƽħʹ÷˹ķ...ָˡ%dֵ\",recover);\n\t\t\tMessage_Insert(str);\n\t\t}\n\t\tbreak;\n\t}\n}\n\n//-----------------------------------Snow_Paint( )--------------------------------------\n//\tװѩЧĺģѩ\n//--------------------------------------------------------------------------------------------------\nVOID Snow_Paint()\n{\n\t//\n\tif(g_SnowNum< PARTICLE_NUMBER)  //Сڹ涨ʱµӣ趨ÿӵֵ\n\t{\n\t\tSnowFlowers[g_SnowNum].x = rand()%g_rect.right; //ӵXΪˮƽϵλ\n\t\tSnowFlowers[g_SnowNum].y = 0;    //ÿӵY궼Ϊ\"0\"Ӵ\n\t\tSnowFlowers[g_SnowNum].exist = true; //趨Ӵ\n\t\tg_SnowNum++;   //ÿһӺۼӼ\n\t}\n\n\t//жǷڣڣ͸ͼ\n\tfor(int i=0;i<PARTICLE_NUMBER;i++)\n\t{\n\t\tif(SnowFlowers[i].exist)  //ӻ\n\t\t{\n\t\t\t//ͼ\n\t\t\tSelectObject(g_bufdc,g_hSnow);\n\t\t\tTransparentBlt(g_mdc,SnowFlowers[i].x,SnowFlowers[i].y,30,30,g_bufdc,0,0,30,30,RGB(0,0,0));\n\n\t\t\t//ƶƫ\n\t\t\tif(rand()%2==0)\n\t\t\t\tSnowFlowers[i].x+=rand()%6;  //x0~5֮һֵ\n\t\t\telse \n\t\t\t\tSnowFlowers[i].x-=rand()%6;\t //y0~5֮һֵ\n\t\t\t//ݷ˶\n\t\t\tSnowFlowers[i].y+=10;  //10\n\t\t\t//곬˴ڳȣxڴڶ\n\t\t\tif(SnowFlowers[i].y > g_rect.bottom)\n\t\t\t{\n\t\t\t\tSnowFlowers[i].x = rand()%g_rect.right;\n\t\t\t\tSnowFlowers[i].y = 0;\n\t\t\t}\n\t\t}\n\n\t}\n}\n\n//-----------------------------------Game_ShutDown( )---------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//--------------------------------------------------------------------------------------------------\nBOOL Game_ShutDown( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hGameOver);\n\tDeleteObject(g_hVictory);\n\tDeleteObject(g_hSnow);\n\tDeleteObject(g_hMonsterBitmap);\n\tDeleteObject(g_hHeroBitmap);\n\tDeleteObject(g_hRecoverSkill);\n\tDeleteObject(g_hSkillButton1);\n\tDeleteObject(g_hSkillButton2);\n\tDeleteObject(g_hSkillButton3);\n\tDeleteObject(g_hSkillButton4);\n\tDeleteObject(g_hHeroSkill1);\n\tDeleteObject(g_hHeroSkill2);\n\tDeleteObject(g_hHeroSkill3);\n\tDeleteObject(g_hBossSkill1);\n\tDeleteObject(g_hBossSkill2);\n\tDeleteObject(g_hBossSkill3);\n\tDeleteDC(g_bufdc);\n\tDeleteDC(g_mdc);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}\n"
  },
  {
    "path": "GDI-Game-Demo/2_FirstBlood!.cpp",
    "content": "#include <Windows.h>\n#pragma comment(lib,\"winmm.lib\")\nint WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)\n{ \n\tPlaySound(L\"FirstBlood.wav\", NULL, SND_FILENAME | SND_ASYNC);   //Ч\n\tMessageBox( NULL, L\"First blood! ãϷ磬ˣ\", L\"First blood! Ϣ\", 0 );//ʾһϢ\n\treturn 0; \n} \n\n"
  },
  {
    "path": "GDI-Game-Demo/3_GameCore.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GameCore\n//\t 20133 Create by ǳī\n//  ô빴ճϷĳ\n//------------------------------------------------------------------------------------------------\n\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿Ŀ\"\t\t//Ϊڱⶨĺ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );  //ڹ̺\n\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:                // Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t//ǴϢ\n\t\tPostQuitMessage( 0 );\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t//˳\n}\n\n"
  },
  {
    "path": "GDI-Game-Demo/4_GDIdemoCore.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemoCore\n//\t 20133 Create by ǳī\n//  ʵGDIϷĺĳ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿GDIĿ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\tg_hdc=NULL;       //ȫ豸\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tPAINTSTRUCT paintStruct;\t\t\t//һPAINTSTRUCTṹ¼һЩϢ\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tg_hdc = BeginPaint( hwnd, &paintStruct );  //ָڽлͼ׼ýͻͼйصϢ䵽paintStructṹС\n\t\tGame_Paint( hwnd);\n\t\tEndPaint( hwnd, &paintStruct );\t\t\t//EndPaintָڵĻ滭̽\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);\n\tGame_Paint( hwnd);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/5_GDIdemo1.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemoCore\n//\t 20133 Create by ǳī\n//  GDIλͼʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n#include  <time.h> //ʹûȡϵͳʱtimeҪͷļ\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿GDIλͼ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\tg_hdc=NULL;       //ȫ豸\nHPEN\t\tg_hPen[7]={0}; //廭ʾ\nHBRUSH\tg_hBrush[7]={0}; //廭ˢ\nint\t\t\t\tg_iPenStyle[7] = {PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME};  //廭ʽ鲢ʼ\nint\t\t\t\tg_iBrushStyle[6] = {HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL};  //廭ˢʽ鲢ʼ\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"AIR - Ӱ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tPAINTSTRUCT paintStruct;\t\t\t//һPAINTSTRUCTṹ¼һЩϢ\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tg_hdc = BeginPaint( hwnd, &paintStruct );  //ָڽлͼ׼ýͻͼйصϢ䵽paintStructṹС\n\t\tGame_Paint( hwnd);\n\t\tEndPaint( hwnd, &paintStruct );\t\t\t//EndPaintָڵĻ滭̽\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\tsrand((unsigned)time(NULL));      //ϵͳʱʼ \n\n\t//ʼʺͻˢɫֵ\n\tfor(int i=0;i<=6;i++)\n\t{\n\t\t\tg_hPen[i] = CreatePen(g_iPenStyle[i],1,RGB(rand()%256,rand()%256,rand()%256));\n\t\tif(i==6)\n\t\t\tg_hBrush[i] = CreateSolidBrush(RGB(rand()%256,rand()%256,rand()%256));\n\t\telse\n\t\t\tg_hBrush[i] = CreateHatchBrush(g_iBrushStyle[i],RGB(rand()%256,rand()%256,rand()%256));\n\t}\n\n\tGame_Paint(hwnd);\n\tReleaseDC(hwnd,g_hdc);\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//һyֵ\n\tint y=0;\n\n\t//һforѭ7ֲͬĻʻ\n\tfor(int i=0;i<=6;i++)\n\t{\n\t\ty = (i+1) * 70;\n\n\t\tSelectObject(g_hdc,g_hPen[i]);//ӦĻѡ\n\t\tMoveToEx(g_hdc,30,y,NULL);\t //ꡱƶӦģ30y괦\n\t\tLineTo(g_hdc,100,y);\t\t\t //ӣ30y괦100y߶\n\t}\n\n\t/*ע滭y=420滭εʱ*/\n\t//xֵ\n\tint x1 = 120;\n\tint x2 = 190;\n\n\t//7ֲͬĻˢ\n\tfor(int i=0;i<=6;i++)\n\t{\n\t\tSelectObject(g_hdc,g_hBrush[i]);  //ѡûˢ\n\t\tRectangle(g_hdc,x1,70,x2,y);\t //һյľΣϽΪx1,50½Ϊx2y\n\t\tx1 += 90;\n\t\tx2 += 90;\n\t}\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//һforѭͷŵеĻʺͻˢ\n\tfor (int i=0;i<=6;i++)\n\t{\n\t\tDeleteObject(g_hPen[i]);\n\t\tDeleteObject(g_hBrush[i]);\n\t}\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/6_GDIdemo2.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemoCore\n//\t 20133 Create by ǳī\n//  GDIʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t800\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t600\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿GDIʾ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\tg_hdc=NULL;       //ȫ豸\n\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ250,80\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"֮ʫ.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tPAINTSTRUCT paintStruct;\t\t\t//һPAINTSTRUCTṹ¼һЩϢ\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tg_hdc = BeginPaint( hwnd, &paintStruct );  //ָڽлͼ׼ýͻͼйصϢ䵽paintStructṹС\n\t\tGame_Paint( hwnd);\n\t\tEndPaint( hwnd, &paintStruct );\t\t\t//EndPaintָڵĻ滭̽\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\tGame_Paint(hwnd);\n\tReleaseDC(hwnd,g_hdc);  //ͷ豸\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\tHFONT hFont=CreateFont(30,0,0,0,0,0,0,0,GB2312_CHARSET,0,0,0,0,L\"΢ź\");  //һ\n\tSelectObject(g_hdc,hFont);  //ѡ豸\n\tSetBkMode(g_hdc, TRANSPARENT);    //ֱɫΪ͸\n\n\t//\n\twchar_t text1[]=L\"е붼Գ棬ֻҪȥ׷ǡ\";\n\twchar_t text2[]=L\"All our dreams can come true, if we have the courage to pursue them. \";\n\twchar_t text3[]=L\"--------ֶ ˹\";\n\n\t//ɫһ\n\tSetTextColor(g_hdc,RGB(50,255,50));\n\tTextOut(g_hdc,30,150,text1,wcslen(text1));\n\t//ɫڶ\n\tSetTextColor(g_hdc,RGB(50,50,255));\n\tTextOut(g_hdc,30,200,text2,wcslen(text2));\n\t//ɫ\n\tSetTextColor(g_hdc,RGB(255,150,50));\n\tTextOut(g_hdc,500,250,text3,wcslen(text3));\n\n\tDeleteObject(hFont);//ͷ\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/7_GDIdemo3.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemoCore\n//\t 20133 Create by ǳī\n//  GDIλͼʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿GDIλͼʾ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL;       //ȫ豸\nHBITMAP\t\tg_hBitmap=NULL;  //һλͼ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,200,20,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ200,20\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"o.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tPAINTSTRUCT paintStruct;\t\t\t//һPAINTSTRUCTṹ¼һЩϢ\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tg_hdc = BeginPaint( hwnd, &paintStruct );  //ָڽлͼ׼ýͻͼйصϢ䵽paintStructṹС\n\t\tGame_Paint( hwnd);\n\t\tEndPaint( hwnd, &paintStruct );\t\t\t//EndPaintָڵĻ滭̽\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\n\t//-----λͼĲ֮һλͼ-----\n\tg_hBitmap = (HBITMAP)LoadImage(NULL,L\"Naruto.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);   //λͼ\n\n\t//-----λͼĲ֮DC-----\n\tg_mdc = CreateCompatibleDC(g_hdc);    //豸ڴDC\n\n\tGame_Paint(hwnd);\n\tReleaseDC(hwnd,g_hdc);  //ͷ豸\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//-----λͼĲ֮ѡλͼ -----\n\tSelectObject(g_mdc,g_hBitmap);    //λͼѡ뵽g_mdcڴDC\n\t//-----λͼĲ֮ģͼ-----\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);    //BitBltͼΪڴС  \n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBitmap);\n\tDeleteDC(g_mdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/8_GDIdemo4.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo4\n//\t 20133 Create by ǳī\n//  ͸ͼϵ֮͸ַ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿͸ͼϵ֮͸ַ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL;       //ȫ豸ȫڴDC\nHBITMAP g_hBackGround,g_hCharacter1,g_hCharacter2;  //3λͼ3ͼƬĴ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,200,20,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ200,20\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"ƿʱ1.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tPAINTSTRUCT paintStruct;\t\t\t//һPAINTSTRUCTṹ¼һЩϢ\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tg_hdc = BeginPaint( hwnd, &paintStruct );  //ָڽлͼ׼ýͻͼйصϢ䵽paintStructṹС\n\t\tGame_Paint( hwnd);\n\t\tEndPaint( hwnd, &paintStruct );\t\t\t//EndPaintָڵĻ滭̽\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\n\t//-----λͼĲ֮һλͼ-----\n\t//ļ3λͼ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);   \n\tg_hCharacter1 = (HBITMAP)LoadImage(NULL,L\"character1.bmp\",IMAGE_BITMAP,640,579,LR_LOADFROMFILE);  \n\tg_hCharacter2 =  (HBITMAP)LoadImage(NULL,L\"character2.bmp\",IMAGE_BITMAP,800,584,LR_LOADFROMFILE);  \n\n\t//-----λͼĲ֮DC-----\n\tg_mdc = CreateCompatibleDC(g_hdc);    //豸ڴDC\n\n\tGame_Paint(hwnd);\n\tReleaseDC(hwnd,g_hdc);  //ͷ豸\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//ϱͼ\n\tSelectObject(g_mdc,g_hBackGround);\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);    //BitBltg_hdcϱͼ\n\n\t//͸ַƳһ\n\tSelectObject(g_mdc,g_hCharacter1);\n\tBitBlt(g_hdc,50,WINDOW_HEIGHT-579,320,640,g_mdc,320,0,SRCAND);//͸ַһͼ뱳ͼ\"AND\" \n\tBitBlt(g_hdc,50,WINDOW_HEIGHT-579,320,640,g_mdc,0,0,SRCPAINT);//͸ַڶǰͼ뱳ͼ\"OR\"\n\n\t//͸ַƳڶ\n\tSelectObject(g_mdc,g_hCharacter2);\n\tBitBlt(g_hdc,450,WINDOW_HEIGHT-584,400,584,g_mdc,400,0,SRCAND);//͸ַһͼ뱳ͼ\"AND\"\n\tBitBlt(g_hdc,450,WINDOW_HEIGHT-584,400,584,g_mdc,0,0,SRCPAINT);//͸ַڶǰͼ뱳ͼ\"OR\"\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hCharacter2);\n\tDeleteObject(g_hCharacter1);\n\tDeleteDC(g_mdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "GDI-Game-Demo/9_GDIdemo5.cpp",
    "content": "\n//-----------------------------------˵----------------------------------------------\n//  :GDIdemo5\n//\t 20133 Create by ǳī\n//  ͸ͼϵ֮͸ɫʷ ʾ\n//------------------------------------------------------------------------------------------------\n\n//-----------------------------------ͷļ֡---------------------------------------\n//\tͷļ\n//------------------------------------------------------------------------------------------------\n#include <windows.h>\n\n//-----------------------------------ļ֡---------------------------------------\n//\tĿļ\n//------------------------------------------------------------------------------------------------\n#pragma comment(lib,\"winmm.lib\")  //PlaySoundļ\n#pragma  comment(lib,\"Msimg32.lib\")  //ʹTransparentBltĿļ\n\n//-----------------------------------궨岿֡--------------------------------------------\n//\tһЩ\n//------------------------------------------------------------------------------------------------\n#define WINDOW_WIDTH\t932\t\t\t\t\t\t\t//Ϊڿȶĺ꣬Էڴ˴޸Ĵڿ\n#define WINDOW_HEIGHT\t700\t\t\t\t\t\t\t//Ϊڸ߶ȶĺ꣬Էڴ˴޸Ĵڸ߶\n#define WINDOW_TITLE\tL\"ϨϷ롿͸ͼϵ֮͸ɫʷ\"\t//Ϊڱⶨĺ\n\n//-----------------------------------ȫֱ֡-------------------------------------\n//\tȫֱ\n//------------------------------------------------------------------------------------------------\nHDC\t\t\t\tg_hdc=NULL,g_mdc=NULL;       //ȫ豸ȫڴDC\nHBITMAP g_hBackGround,g_hCharacter1,g_hCharacter2;  //3λͼ3ͼƬĴ\n\n//-----------------------------------ȫֺ֡-------------------------------------\n//\tȫֺֹδıʶϵд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK\tWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );//ڹ̺\nBOOL\t\t\t\t\t\tGame_Init(HWND hwnd);\t\t\t//ڴ˺нԴĳʼ\nVOID\t\t\t\t\t\t\tGame_Paint( HWND hwnd);\t\t//ڴ˺нлͼд\nBOOL\t\t\t\t\t\tGame_CleanUp(HWND hwnd );\t//ڴ˺нԴ\n\n//-----------------------------------WinMain( )--------------------------------------\n//\tWindowsӦóںǵĳ￪ʼ\n//------------------------------------------------------------------------------------------------\nint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)\n{\n\t//1ڴĲ֮һʼһĴ\n\tWNDCLASSEX wndClass = { 0 };\t\t\t\t\t\t\t//WINDCLASSEXһ\n\twndClass.cbSize = sizeof( WNDCLASSEX ) ;\t\t\t//ýṹֽС\n\twndClass.style = CS_HREDRAW | CS_VREDRAW;\t//ôڵʽ\n\twndClass.lpfnWndProc = WndProc;\t\t\t\t\t//ָ򴰿ڹָ̺\n\twndClass.cbClsExtra\t\t= 0;\t\t\t\t\t\t\t\t//ĸڴ棬ȡ0Ϳ\n\twndClass.cbWndExtra\t\t= 0;\t\t\t\t\t\t\t//ڵĸڴ棬Ȼȡ0\n\twndClass.hInstance = hInstance;\t\t\t\t\t\t//ָڹ̵ĳʵ\n\twndClass.hIcon=(HICON)::LoadImage(NULL,L\"icon.ico\",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);  //ؼԶicoͼ\n\twndClass.hCursor = LoadCursor( NULL, IDC_ARROW );    //ָĹ\n\twndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  //ΪhbrBackgroundԱָһɫˢ\t\n\twndClass.lpszMenuName = NULL;\t\t\t\t\t\t//һԿַָֹ˵Դ֡\n\twndClass.lpszClassName = L\"ForTheDreamOfGameDevelop\";\t\t//һԿַָֹ֡\n\n\t//2ڴĲ֮עᴰ\n\tif( !RegisterClassEx( &wndClass ) )\t\t\t\t//괰ںҪԴעᣬܴ͵Ĵ\n\t\treturn -1;\t\t\n\n\t//3ڴĲ֮ʽ\n\tHWND hwnd = CreateWindow( L\"ForTheDreamOfGameDevelop\",WINDOW_TITLE,\t\t\t\t//ϲּĴںCreateWindow\n\t\tWS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,\n\t\tWINDOW_HEIGHT, NULL, NULL, hInstance, NULL );\n\n\t//4ڴĲ֮ģڵƶʾ\n\tMoveWindow(hwnd,200,20,WINDOW_WIDTH,WINDOW_HEIGHT,true);\t\t//ʾʱλãʹϽλڣ200,20\n\tShowWindow( hwnd, nShowCmd );    //ShowWindowʾ\n\tUpdateWindow(hwnd);\t\t\t\t\t\t//Դڽи£·Ҫװһ\n\n\t//ϷԴĳʼʼʧܣһϢ򣬲FALSE\n\tif (!Game_Init (hwnd)) \n\t{\n\t\tMessageBox(hwnd, L\"Դʼʧ\", L\"Ϣ\", 0); //ʹMessageBoxһϢ\n\t\treturn FALSE;\n\t}\n\tPlaySound(L\"쥹ˮ_.wav\", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //ѭű \n\n\t//5Ϣѭ\n\tMSG msg = { 0 };\t\t\t\t//岢ʼmsg\n\twhile( msg.message != WM_QUIT )\t\t//ʹwhileѭϢWM_QUITϢͼѭ\n\t{\n\t\tif( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )   //鿴ӦóϢУϢʱеϢɷȥ\n\t\t{\n\t\t\tTranslateMessage( &msg );\t\t//ϢתΪַϢ\n\t\t\tDispatchMessage( &msg );\t\t\t//ַһϢڳ\n\t\t}\n\t}\n\n\t//6ע\n\tUnregisterClass(L\"ForTheDreamOfGameDevelop\", wndClass.hInstance);  //׼ע\n\treturn 0;  \n}\n\n//-----------------------------------WndProc( )--------------------------------------\n//\tڹ̺WndProc,ԴϢд\n//------------------------------------------------------------------------------------------------\nLRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      \n{\n\tPAINTSTRUCT paintStruct;\t\t\t//һPAINTSTRUCTṹ¼һЩϢ\n\n\tswitch( message )\t\t\t\t\t\t//switch俪ʼ\n\t{\n\tcase WM_PAINT:\t\t\t\t\t\t// ǿͻػϢ\n\t\tg_hdc = BeginPaint( hwnd, &paintStruct );  //ָڽлͼ׼ýͻͼйصϢ䵽paintStructṹС\n\t\tGame_Paint( hwnd);\n\t\tEndPaint( hwnd, &paintStruct );\t\t\t//EndPaintָڵĻ滭̽\n\t\tValidateRect(hwnd, NULL);\t\t// ¿ͻʾ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_KEYDOWN:\t\t\t\t\t// Ǽ̰Ϣ\n\t\tif (wParam == VK_ESCAPE)    // µļESC\n\t\t\tDestroyWindow(hwnd);\t\t// ٴ, һWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tcase WM_DESTROY:\t\t\t\t\t//ǴϢ\n\t\tGame_CleanUp(hwnd);\t\t\t//ԶԴGame_CleanUp˳ǰԴ\n\t\tPostQuitMessage( 0 );\t\t\t//ϵͳиֹ߳ӦWM_DESTROYϢ\n\t\tbreak;\t\t\t\t\t\t\t\t\t//switch\n\n\tdefault:\t\t\t\t\t\t\t\t\t\t//caseϣִиdefault\n\t\treturn DefWindowProc( hwnd, message, wParam, lParam );\t\t//ȱʡĴڹ\n\t}\n\n\treturn 0;\t\t\t\t\t\t\t\t\t//˳\n}\n\n//-----------------------------------Game_Init( )--------------------------------------\n//\tʼһЩ򵥵ĳʼ\n//------------------------------------------------------------------------------------------------\nBOOL Game_Init( HWND hwnd )\n{\n\tg_hdc = GetDC(hwnd);  //ȡ豸\n\n\t//-----λͼĲ֮һλͼ-----\n\t//ļ3λͼ\n\tg_hBackGround = (HBITMAP)LoadImage(NULL,L\"bg.bmp\",IMAGE_BITMAP,WINDOW_WIDTH,WINDOW_HEIGHT,LR_LOADFROMFILE);   \n\tg_hCharacter1 = (HBITMAP)LoadImage(NULL,L\"character1.bmp\",IMAGE_BITMAP,535,650,LR_LOADFROMFILE);  \n\tg_hCharacter2 =  (HBITMAP)LoadImage(NULL,L\"character2.bmp\",IMAGE_BITMAP,506,650,LR_LOADFROMFILE);  \n\t//-----λͼĲ֮DC-----\n\tg_mdc = CreateCompatibleDC(g_hdc);    //豸ڴDC\n\n\tGame_Paint(hwnd);\n\tReleaseDC(hwnd,g_hdc);  //ͷ豸\n\treturn TRUE;\n}\n\n//-----------------------------------Game_Paint( )--------------------------------------\n//\tƺڴ˺нлƲ\n//--------------------------------------------------------------------------------------------------\nVOID Game_Paint( HWND hwnd )\n{\n\t//ϱͼ\n\tSelectObject(g_mdc,g_hBackGround);\n\tBitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY);    //BitBltg_hdcϱͼ\n\n\t//һͼ\n\tSelectObject(g_mdc,g_hCharacter1);\n\tTransparentBlt(g_hdc,0,WINDOW_HEIGHT-650,535,650,g_mdc,0,0,535,650,RGB(0,0,0));//͸ɫΪRGB(0,0,0)\n\n\t//ڶͼ\n\tSelectObject(g_mdc,g_hCharacter2);\n\tTransparentBlt(g_hdc,500,WINDOW_HEIGHT-650,506,650,g_mdc,0,0,506,650,RGB(0,0,0));//͸ɫΪRGB(0,0,0)\n}\n\n//-----------------------------------Game_CleanUp( )--------------------------------\n//\tԴڴ˺нг˳ǰԴ\n//---------------------------------------------------------------------------------------------------\nBOOL Game_CleanUp( HWND hwnd )\n{\n\t//ͷԴ\n\tDeleteObject(g_hBackGround);\n\tDeleteObject(g_hCharacter2);\n\tDeleteObject(g_hCharacter1);\n\tDeleteDC(g_mdc);\n\treturn TRUE;\n}"
  },
  {
    "path": "README.md",
    "content": "《逐梦旅程：Windows游戏编程之从零开始》源代码\n===============================\n<BR>\n\n# 简介\n这是我在23岁出国留学期间，花费一年时间所著的一本关于如何利用Win32和Direct3D、C++开发端游的入门级游戏教程。\n    \n![](http://img.blog.csdn.net/20150327124003877?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)\n    \n<BR>\n\n# 一些游戏demo运行截图\n<br>\n\n![](http://img.blog.csdn.net/20131021011428343?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n![](http://img.blog.csdn.net/20131021011222000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n![](http://img.blog.csdn.net/20131021011251062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n![](http://img.blog.csdn.net/20131021012735937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n![](http://img.blog.csdn.net/20131021011652125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n![](http://img.blog.csdn.net/20131021011504062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n![](http://img.blog.csdn.net/20131021011518875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9lbV9xaWFubW8=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)\n\n<BR>\n# 所有资源文件的下载\n此仓库中仅上传了全部源代码，资源和工程可以移步[这里](http://pan.baidu.com/s/13PVB3)下载。<br>\n<br><br><br>\n    \n# 配套示例程序的一些说明\n\n### 第3章\n    1.【FirstBlood!】 一个简单的Windows API示例程序，并附有dota中第一个击杀会播放的很酷的“FirstBlood”音效。\n    2.【GameCore】 用代码勾勒出游戏开发所需的核心框架程序\n \n### 第4章\n    3.【GDIdemoCore】实现GDI游戏开发所需的核心框架程序\n    4.【GDIdemo1】GDI基本几何绘图示例程序\n    5.【GDIdemo2】GDI文字输出示例程序\n    6.【GDIdemo3】GDI位图绘制示例程序\n\n### 第5章\n    7.【GDIdemo4】透明贴图两套体系之：透明遮罩法示例程序\n    8.【GDIdemo5】透明贴图两套体系之：透明色彩法示例程序\n### 第6章\n    9.【GDIdemo6】游戏动画技巧之 定时器动画显示示例程序\n    10.【GDIdemo7】游戏动画技巧之 游戏循环动画显示示例程序\n    11.【GDIdemo8】游戏动画技巧之 透明动画示例程序\n    12.【GDIdemo9】游戏动画技巧之 排序贴图示例程序\n### 第7章\n    13.【GDIdemo10】Windows消息处理之键盘消息处理示例程序\n    14.【GDIdemo11】Windows消息处理之鼠标消息处理示例程序\n\n### 第8章\n    15.【GDIdemo12】愤怒的小鸟弹球之物理匀速运动模拟示例程序\n    16.【GDIdemo13】愤怒的小鸟弹球之重力环境模拟示例程序\n    17.【GDIdemo14】愤怒的小鸟弹球之摩擦力环境模拟示例程序\n    18.【GDIdemo15】粒子系统初步之雪花飞舞示例程序\n    19.【GDIdemo16】粒子系统初步之星光绽放示例程序\n \n### 第9章\n    20.【GDIdemo17】小型回合制游戏：《勇者斗恶龙》程序源码\n \n###第11章\n    21.【D3DdemoCore】Direct3D程序的核心框架\n    22.【D3Ddemo1】Direct3D初始化四步曲 示例程序\n    23.【D3Ddemo2】Direct3D渲染五步曲 示例程序\n### 第12章\n    24.【D3Ddemo3】Direct3D顶点缓存的逆袭 示例程序\n    25.【D3Ddemo4】Direct3D索引缓存的故事 示例程序\n###第13章\n    26.【D3Ddemo5】迈向三维世界：Direct3D四大变换 示例程序\n \n### 第14章\n    27.【D3Ddemo6】Direct3D中几种几何体的快捷绘制示例程序\n    28.【D3Ddemo7】绘制真实质感的三维世界：光照与材质示例程序\n### 第15章\n    29.【D3Ddemo8】游戏输入控制利器 : DirectInput 示例程序\n    30.【D3Ddemo9】对DirectInput的封装 示例程序\n### 第16章\n    31.【D3Ddemo10】为三维世界添彩：纹理映射示例程序之一\n    32.【D3Ddemo11】为三维世界添彩：纹理映射示例程序之二\n### 第17章\n    33.【D3Ddemo12】网格模型和X文件使用面面观 示例程序\n### 第18章\n    34.【D3Ddemo13】水乳交融的艺术：alpha混合技术 示例程序\n### 第19章\n    35.【D3Ddemo14】横看成岭侧成峰：深度测试和Z缓存 示例程序\n### 第20章\n    36.【D3Ddemo15】虚实结合的光影 : 模板技术 示例程序\n### 第21章\n    37.【D3Ddemo16】翱翔于三维空间：第一人称摄像机的实现示例程序\n### 第22章\n    38.【D3Ddemo17】钟灵毓秀的世界：三维地形系统的实现示例程序\n### 第23章\n    39.【D3Ddemo18】向碧蓝的苍穹致敬：三维天空的实现示例程序第24章：\n    40.【D3Ddemo19】让唯美的雪花飘扬：三维粒子系统的实现示例程序\n### 第25章\n    41.【D3Ddemo20】造物主的降临：多游戏模型的载入示例程序\n<br>\n<br>\n\n# 一些链接\n\n### [本书的前身——在CSDN连载的【Visual C++】游戏开发专栏](http://blog.csdn.net/column/details/vc-game-programming.html \"悬停显示\") \n\n### [本书的百度百科](http://baike.baidu.com/link?url=poL_81VLebCBK-7xuXqnPkeqLpgJvKNLYBHSpIoUQC837z7DG3ivMddMOKFmrZnb48woEYpFEj2XZwkMvM5m5q \"悬停显示\")\n\n### [ 简介、勘误CSDN博文](http://blog.csdn.net/poem_qianmo/article/details/12895487 \"悬停显示\")  \n<br>\n\n<br>\n以上。\n\n\n"
  }
]