锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 2銆佽幏寰楁覆鏌撶洰鏍囷紝鏈変簡娓叉煋鐩爣錛屾墠鑳界粰鐩爣鎸囧畾瑙嗗彛鍜屾憚鍍忔満 3銆佺粰榪欎釜娓叉煋鐩爣鎸囧畾鎽勫儚鏈猴紝鍋氫簡榪欐楠や箣鍚庯紝姣忓撫鏇存柊鏃跺氨浼氭妸榪欎釜鎽勫儚鏈虹湅鍒扮殑涓滆タ娓叉煋鍒皌exture涓?br />Viewport *v = rttTex->addViewport( mReflectCam ); 4銆丱K錛?/p> 濡傛灉鏈枃瀵逛綘鐨勫紑鍙戞湁鎵甯姪錛屽茍涓斾綘鎵嬪ご鎭板ソ鏈夐浂閽便?/p> 涓嶅鎵撹祻鎴戜竴鏉挅鍟★紝榧撳姳鎴戠戶緇垎浜紭縐鐨勬枃绔犮?br />
1銆佸垱寤烘覆鏌撶洰鏍囩汗鐞嗭紝鍏抽敭瑕佹寚瀹歍U_RENDERTARGET鍙傛暟錛屽湪鍒涘緩榪欎釜娓叉煋鐩爣綰圭悊鐨勮繃紼嬩腑錛孫gre浼氳嚜鍔ㄨ皟鐢?nbsp; Root::getSingleton().getRenderSystem()->attachRenderTarget鎶婅繖涓汗鐞嗘坊鍔犲埌Root鐨勬覆鏌撶洰鏍囦腑錛屼篃灝辨槸璇存瘡甯ч兘浼氭覆鏌撳埌榪欎釜綰圭悊銆?br />TexturePtr texture = TextureManager::getSingleton().createManual( "RttTex",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D,
512, 512, 0, PF_R8G8B8, TU_RENDERTARGET );
RenderTarget *rttTex = texture->getBuffer()->getRenderTarget();
鏈緇堟帓宸殑鍘熷洜鏄疍rawIndexedPrimitiveUP鏈鍚庝竴涓弬鏁?em>VertexStreamZeroStride 錛岃繖涓弬鏁版槸鐢ㄦ潵鎸囧畾欏剁偣鎵鍗犵殑瀛楄妭鏁般傛垜鑷綔鑱槑鐨勬妸欏剁偣緇撴瀯鍚庡鍔犱簡涓涓嚜宸辯敤鐨勬暟鎹紝濡傦細姝e父鐨勯《鐐圭粨鏋?br />struct CUSTOMVERTEX
{
聽FLOAT x, y, z,rhw;
聽DWORD color;
聽float u,v;
};
鎴戞敼浜嗕箣鍚庣殑欏剁偣緇撴瀯錛?br />struct CUSTOMVERTEX
{
聽FLOAT x, y, z,rhw;
聽DWORD color;
聽float u,v;
DWORD dwMyData; // 鐢ㄦ潵淇濆瓨鎴戣嚜宸辯敤鐨勬暟鎹?br />};
緇撴灉錛屽湪鎴戠殑鏄懼崱涓婁竴鍒囨甯革紝榪欎釜鏁版嵁涔熸湁鐢紝鐒跺悗DrawIndexedPrimitiveUP鐨勬椂鍊欙紝涔熶細鏍規嵁鏈鍚庣殑鍙傛暟sizeof(CUSTOMVERTEX)欏哄埄鐨勮鍙栫浉搴旂殑欏剁偣銆備絾鏄紝鎷垮埌845G鐨勫唴緗樉鍗′笂灝辨媧昏姳灞忋傚悗鏉ョ粓浜庣煡閬撴槸榪欎釜鍘熷洜錛屼簬鏄В鍐沖姙娉曞氨鏄妸dwMyData鍘繪帀錛屾斁鍒伴《鐐圭粨鏋勫闈㈠幓銆?br />
欏轟究璇磋DrawIndexedPrimitiveUP鐨勭敤娉曪細
HRESULT DrawIndexedPrimitiveUP(
聽 D3DPRIMITIVETYPEPrimitiveType, // 鍥懼師鐨勭被鍨?/b>
聽 UINTMinVertexIndex,聽 //聽鎸囧畾0
聽 UINTNumVertices,聽 // 鎸囧畾闇瑕佹覆鏌撶殑欏剁偣鐨勬暟閲忥紙濡備竴涓煩褰㈠彲浠ョ敱4涓《鐐圭粍鎴愶紝鐒跺悗閫氳繃欏剁偣绱㈠紩鏉ヨ揪鍒版覆鏌?涓笁瑙掑艦鐨勬晥鏋滐紝閭d箞榪欓噷灝卞簲璇ュ~鍐?錛岃屼笉鏄?錛?/b>
聽 UINTPrimitiveCount, // 瑕佹覆鏌撶殑鍥懼師鐨勬暟閲忥紙濡備竴涓煩褰紝鐢變袱涓笁瑙掑艦緇勬垚錛屽氨搴旇濉啓2錛?/b>
聽 CONST void *pIndexData, // 绱㈠紩鏁版嵁鎸囬拡
聽 D3DFORMATIndexDataFormat, // 绱㈠紩鏁版嵁鏍煎紡錛屼竴鑸負D3DFMT_INDEX16鎴朌3DFMT_INDEX32聽
聽 CONST void*pVertexStreamZeroData, // 欏剁偣鏁版嵁鎸囬拡
聽 UINTVertexStreamZeroStride // 欏剁偣澶у皬涓鑸負sizeof(欏剁偣緇撴瀯)
);
璁板緱榛樿鎯呭喌涓嬫覆鏌撲笁瑙掑艦鐨勯『搴忔槸閫嗘椂閽堢殑錛堝垵瀛﹁呯粡甯歌寖榪欎釜閿欒錛屾湰鏉ユ兂娓叉煋涓涓煩褰紝緇撴灉涓涓笁瑙掑艦欏烘椂闂淬佸彟涓涓笁瑙掑艦閫嗘椂閽堬紝緇撴灉娓叉煋鍑烘潵鍙湅鍒頒竴涓笁瑙掑艦浜嗭紝琚儗闈㈠墧闄ゆ帀浜嗭級銆?br />
DirectX璁懼鐨勫垱寤哄湪DXUT涓緱鍒頒簡鏀硅繘銆備綘鍙互璁╀綘鐨勫簲鐢ㄧ▼搴忕洿鎺ュ垱寤鴻澶囪屽叾瀹冩湁妗嗘灦鎻愪緵鐨勭壒寰佷粛鐒跺彲鐢ㄣ?br />鍒涘緩璁懼
閫夋嫨鏈浣崇殑璁懼璁劇疆
淇敼鍙敤鐨勮澶囪緗?br />闄嶄負杞歡欏剁偣澶勭悊
浣跨敤浣犺嚜宸辯殑璁懼
鍒涘緩璁懼
鍏稿瀷鍦幫紝浣犲皢閫氳繃鏍囧噯鐨凞irect3D鏂規硶鍒涘緩璁懼
HRESULT CreateDevice(
聽聽聽 UINT聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Adapter,
聽聽聽 D3DDEVTYPE聽聽聽聽聽聽聽聽聽聽聽 DeviceType,
聽聽聽 HWND聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 hFocusWindow,
聽聽聽 DWORD聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 BehaviorFlags,
聽聽聽 D3DPRESENT_PARAMETERS *pPresentationParameters,
聽聽聽 IDirect3DDevice9聽聽聽聽聽 **ppReturnedDeviceInterface
);
榪欎釜鏂規硶闇瑕佹湁鏁堢殑閫傞厤鍣紝璁懼綾誨瀷(HAL or REF),紿楀彛鍙ユ焺錛岃涓烘爣蹇?software/hardware vertex processing 鍜屽叾瀹冮┍鍔ㄦ爣蹇?錛屼互鍙婂憟鐜板弬鏁?presentation parameters).姝ゅ錛孌3DPRESENT_PARAMETER緇撴瀯浣撹繕鎷ユ湁澶ч噺鐨勬垚鍛樻寚瀹氬悗澶囩紦鍐插尯錛屽閲嶉噰鏍瘋瀹氾紝浜ゆ崲鏁堟灉錛岀獥鍙fā寮忥紝娣卞害妯$増緙撳啿錛屽埛鏂扮巼錛屽憟鐜伴棿闅旓紝浠ュ強鍛堢幇鏍囧織銆?br />涓烘墍鏈夎繖浜涘弬鏁伴夋嫨鏈夋晥鐨勮瀹氭槸鍏鋒湁鎸戞垬鎬х殑銆傛鏋墮氳繃DXUTCreateDevice鍑芥暟綆鍖栦簡榪欎竴閫夋嫨榪囩▼銆?br />HRESULT DXUTCreateDevice(
聽聽聽 UINT AdapterOrdinal聽 = D3DADAPTER_DEFAULT,
聽聽聽 BOOL bWindowed聽聽聽聽聽聽 = TRUE,
聽聽聽 INT nSuggestedWidth聽 = 640,
聽聽聽 INT nSuggestedHeight = 480,
聽聽聽 LPDXUTCALLBACKISDEVICEACCEPTABLE pCallbackIsDeviceAcceptable聽聽聽聽 = NULL,
聽聽聽 LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = NULL
);
鏈鍩烘湰鐨勭敤娉曟槸鍏ㄩ儴浣跨敤緙虹渷鍙傛暟璋冪敤錛?br />DXUTCreateDevice();
閫氳繃榪欐牱鐨勮皟鐢ㄦ鏋朵嬌鐢ㄧ己鐪佽緗垱寤轟竴涓湪澶у鏁版儏鍐典笅鍙敤鐨勮澶囥傜己鐪佺殑璁劇疆濡備笅錛?br />
| Direct3D Creation Flag | Description | Default Value from DXUTCreateDevice |
|---|---|---|
| AdapterFormat parameter of CheckDeviceFormat | Adapter surface format. | Desktop display mode, or D3DFMT_X8R8G8B8 if the desktop display mode is less than 32 bits. |
| Adapter parameter of IDirect3D9::CreateDevice | Display adapter ordinal. | D3DADAPTER_DEFAULT |
| D3DPRESENT_PARAMETERS. BackBufferCount | Number of back buffers. | 2, indicating triple buffering. |
| D3DPRESENT_PARAMETERS. BackBufferFormat | Back buffer format. | Desktop display mode, or D3DFMT_X8R8G8B8 if the desktop display mode is less than 32 bits. |
| D3DPRESENT_PARAMETERS. AutoDepthStencilFormat | Depth format of the automatic depth-stencil surface that the device will create. | D3DFMT_D16 if the backbuffer format is 16 bits or less, or D3DFMT_D32 otherwise. |
| The DeviceType parameter of IDirect3D9::CreateDevice | Enumerated type of the device. | D3DDEVTYPE_HAL if available, otherwise D3DDEVTYPE_REF or failure code if neither is available. |
| D3DPRESENT_PARAMETERS. MultiSampleQuality | Quality level. | MultiSampleQuality = 0, indicating multisampling is disabled. |
| D3DPRESENT_PARAMETERS. Flags | Presentation parameters flags. | D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL |
| D3DPRESENT_PARAMETERS. PresentationInterval | Presentation interval. | D3DPRESENT_INTERVAL_IMMEDIATE for windowed mode, or D3DPRESENT_INTERVAL_DEFAULT for full-screen mode. |
| D3DPRESENT_PARAMETERS. FullScreen_RefreshRateInHz | Rate at which the display adapter refreshes the screen. | 0, indicating windowed mode. |
| D3DPRESENT_PARAMETERS. BackBufferWidth and .BackBufferHeight | Display mode resolution. | 640 x 480 pixels for windowed mode, or the desktop resolution for full-screen mode. |
| D3DPRESENT_PARAMETERS. AutoDepthStencilFormat | Stencil format of the automatic depth-stencil surface that the device will create. | D3DFMT_D16 if the backbuffer format is 16 bits or less, or D3DFMT_D32 otherwise. |
| D3DPRESENT_PARAMETERS. SwapEffect | Swap effect. | D3DSWAPEFFECT_DISCARD |
| BehaviorFlags parameter of IDirect3D9::CreateDevice | Vertex processing flags. | D3DCREATE_HARDWARE_VERTEXPROCESSING if supported, otherwise D3DCREATE_SOFTWARE_VERTEXPROCESSING. |
| D3DPRESENT_PARAMETERS. Windowed | Windowed or full-screen mode. | true, indicating windowed mode. |
| hFocusWindow parameter of CreateDevice | Handle to the created window (see Using Application Windows with DXUT). | hWndFocus parameter of DXUTSetWindow |
| D3DPRESENT_PARAMETERS. hDeviceWindow | Handle to the device window. | hWndDeviceFullScreen or hWndDeviceWindowed parameters of DXUTSetWindow |
| D3DPRESENT_PARAMETERS. EnableAutoDepthStencil | Depth-stencil buffer creation flag. | true. |
閫夋嫨鏈浣崇殑璁懼璁劇疆
浣犲彲浠ヤ嬌鐢↖sDeviceAcceptable鍥炶皟鍑芥暟甯姪妗嗘灦涓轟綘鐨勫簲鐢ㄧ▼搴忛夋嫨鏈浣崇殑璁懼璁劇疆錛屽氨鍍忎笅闈㈢殑浠g爜錛?br />bool CALLBACK IsDeviceAcceptable(
D3DCAPS9*聽聽聽聽 pCaps,
D3DFORMAT聽聽聽聽 AdapterFormat,
D3DFORMAT聽聽聽聽 BackBufferFormat,
bool聽聽聽聽聽聽聽聽聽 bWindowed,
void*聽聽聽聽聽聽聽聽 pUserContext )
{
聽聽聽 // TODO: return true for acceptable settings and false otherwise.
聽聽聽 return true;
}
榪欎釜鍥炶皟鍑芥暟鐨勬ā鍨嬪熀浜嶭PDXUTCALLBACKISDEVICEACCEPTABLE鍘熷瀷(This callback function is modeled on the prototype LPDXUTCALLBACKISDEVICEACCEPTABLE)錛屾鏋朵負姣忎釜鍞竴鐨勪互涓?涓緗殑鏈夋晥緇勫悎璋冪敤榪欎釜鍑芥暟涓嬈★細
D3DDEVTYPE DeviceType;
UINT聽聽聽聽聽聽 AdapterOrdinal;
D3DFORMAT聽 AdapterFormat;
D3DFORMAT聽 BackBufferFormat;
bool聽聽聽聽聽聽 Windowed;
娉ㄦ剰閫傞厤鍣ㄥ簭鍙峰拰璁懼綾誨瀷娌℃湁鐩存帴鐨勪紶鍏ュ洖璋冨嚱鏁幫紝鑰屾槸鍒嗗埆浣滀負D3DCAPS9緇撴瀯浣撶殑鎴愬憳銆?br />閫氳繃榪欎釜鍥炶皟鍑芥暟錛屽簲鐢ㄧ▼搴忓彲浠ユ嫆緇濅換浣曞畠涓嶆敮鎸佺殑鎴栦笉鎯寵鐨勭粍鍚堛備緥濡傦紝搴旂敤紼嬪簭鍙互浣跨敤涓嬮潰鐨勪唬鐮佹嫆緇?6bits鐨勫悗澶囩紦鍐插尯鏍煎紡鍜屾墍鏈夎嚦灝戜笉鑳芥敮鎸佸儚绱犵潃鑹插櫒PS_2_0鐨勮澶囷細
bool CALLBACK IsDeviceAcceptable(
聽聽聽 D3DCAPS9*聽聽聽聽 pCaps,
聽聽聽 D3DFORMAT聽聽聽聽 AdapterFormat,
聽聽聽 D3DFORMAT聽聽聽聽 BackBufferFormat,
聽聽聽 bool聽聽聽聽聽聽聽聽聽 bWindowed )
{
聽聽聽 if( pCaps->PixelShaderVersion < D3DPS_VERSION(2,0) )
聽聽聽聽 return false;
聽聽聽 if( BackBufferFormat == D3DFMT_X1R5G5B5 || BackBufferFormat == D3DFMT_R5G6B5 )
聽聽聽聽聽聽聽 return false;
聽聽聽 return true;
}
涓烘瘡涓敮涓鐨勭粍鍚堣皟鐢ㄥ洖璋冨嚱鏁板悗錛屾鏋舵帓鍒楀墿涓嬬殑鍙敤緇勫悎錛屽茍閫夋嫨瀹冧滑褰撲腑鏈濂界殑銆傛帓鍚嶈緝楂樼殑濡備笅錛?br />D3DDEVTYPE_HAL錛岃幏鍙栫‖浠跺姞閫?br />濡傛灉搴旂敤紼嬪簭浠ュ叏灞忔ā寮忔樉紺猴紝妗嗘灦鏇磋秼鍚戜簬浣跨敤鍖歸厤妗岄潰鏍煎紡鐨勯傞厤鍣ㄦ牸寮忥紝榪欐牱鍙互鍦ㄥ叏灞忎笌紿楀彛涔嬮棿蹇熷垏鎹€備緥澶栫殑鏄紝濡傛灉妗岄潰鏄劇ず妯″紡灝忎簬32浣嶏紝妗嗘灦鏇磋秼鍚戜簬D3DFMT_X8R8G8B8.
鍖歸厤閫傞厤鍣ㄦ牸寮忕殑鍚庡緙撳啿鍖烘牸寮?br />鍦ㄩ夋嫨浜嗚繖浜涙帓鍚嶉珮鐨勭粍鍚堝悗錛岃鍒涘緩璁懼錛岃涓烘爣蹇楀拰鍛堢幇鍙傛暟浠嶇劧鏄渶瑕佺殑銆傚浜庤繖浜涜緗?Direct3D浣跨敤涓婇潰琛ㄤ腑鐨勭己鐪佸箋?/p>
浣跨敤浣犺嚜宸辯殑璁懼
浣犳病鏈夊繀瑕佷緷璧栦簬妗嗘灦鏉ュ垱寤篋irect3D璁懼銆傚簲鐢ㄧ▼搴忚嚜宸卞彲浠ュ垱寤鴻澶囧茍灝嗕粬浼犻掔粰妗嗘灦浣跨敤銆傚氨鍍忓簲鐢ㄧ▼搴忓彲浠ヨ鐩栨鏋剁殑window creation 璁劇疆銆傜畝鍗曠殑浣跨敤浣犳兂瑕佺殑璁劇疆鍒涘緩涓涓澶囷紝鐒跺悗璋冪敤 DXUTSetDevice鍑芥暟璁╂鏋跺湪浣犵殑璁懼涓婃覆鏌撱?br />娉ㄦ剰錛氬鏋滃簲鐢ㄧ▼搴忓垱寤轟簡涓嶄緷璧栦簬妗嗘灦鐨勮澶囷紝閭d箞搴旂敤紼嬪簭涔熷繀欏誨湪涓誨驚鐜墽琛屽畬浠ュ悗浜茶嚜鐨勯氳繃cleanup 閲婃斁璁懼鎺ュ彛銆?br />鍙﹁鍙傞槄
閫氳繃DXUT浣滄洿楂樼駭鐨勮澶囬夋嫨
鎽樿
鏈枃綆瑕佷粙緇嶄簡鍦―irectX 9 SDK涓彁渚涚殑Effect Framework鏀寔錛屼互鍙奃irectX FX鏂囦歡緇撴瀯鍜孧icrosoft Hight Level Shading Language鐨勫熀鏈煡璇嗐傛湰鏂囧亣瀹氳鑰呭DirectX Graphics鏈変竴瀹氫簡瑙o紝騫舵鍦ㄥ涔燚irectX Effect Framework銆傚笇鏈涜兘澶熶笌鍚勪綅璇昏呭叡鍚屾帰璁ㄣ佸垏紓嬨?
綆浠?
Effect鐨勮搗婧?
鍦ㄨ綆楁満3緇村満鏅腑錛岀墿浣撹〃闈㈢殑鏉愯川浠h〃浜嗗叾鍏夊鐗規с傛渶綆鍗曠殑鏉愯川鍙互琛ㄧ幇涓篋iffuse棰滆壊錛孲pecular棰滆壊錛孍missive棰滆壊絳変俊鎭殑闆嗗悎錛涜屼負浜嗚〃鐜扮墿浣撹〃闈㈢殑緇嗚妭錛屽彲浠?鍦ㄦ潗璐ㄤ腑鍔犲叆涓寮犵汗鐞嗏斺旇繖浜涘氨鏋勬垚浜嗘渶鍩烘湰鐨勬潗璐ㄤ俊鎭傚湪浠ュ墠鐨凞irect3D紼嬪簭涓紝榪欎簺淇℃伅鍙互鐩存帴浼犻佺粰璁懼錛岀敱璁懼鑷姩鏍規嵁瀹冧滑鏉ヨ綆楃墿浣撹〃闈㈢殑鍏夊鏁堟灉銆備絾鏄紝 浠呬粎鏈夎繖浜涘熀鏈殑鏉愯川淇℃伅錛屽凡緇忎笉瓚充互婊¤凍娓告垙鍒朵綔鑰呯殑瑕佹眰鍜屾父鎴忕帺瀹剁殑瑕佹眰浜嗏斺斾粬浠笇鏈涘満鏅腑鐨勬潗璐ㄦ洿鍔犲鏉傦紝鍏鋒湁鏇村鐨勭粏鑺傦紝鏇村姞閫肩湡銆?
鍦―irect3D涓紝闄や簡鏉愯川鐨勬蹇碉紝榪樺瓨鍦ㄤ竴涓覆鏌撶姸鎬侊紙Render State錛夌殑姒傚康銆傚湪Direct3D Device涓瓨鍦ㄥ緢澶氱殑娓叉煋鐘舵侊紝瀹冧滑鍙互鍦―irect3D榪涜娓叉煋鏃舵帶鍒舵覆鏌撶殑嫻佺▼鍜屾晥 鏋滐紝浠庤屽疄鐜版煇浜涘甫鏈夌壒鏁堢殑鏉愯川銆傜▼搴忓憳鍙互閫氳繃IDirect3DDevice*::SetRenderState()鏂規硶鏉ヨ緗繖浜涚姸鎬併傛墍鏈夌殑娓叉煋鐘舵侀兘鏄竴浜涚壒瀹氱殑鏁板箋傚鐘舵佺殑璁劇疆鍙互閫氳繃紜?緙栫爜瀹屾垚錛屽嵆鍦ㄧ▼搴忎腑璋冪敤SetRenderState()鏂規硶錛屽皢璁劇疆浠涔堟牱鐨勭姸鎬佲滃啓姝燴濆湪紼嬪簭閲岋紝浣嗘槸榪欐牱鍋氱殑緙虹偣灝辨槸澶笉鐏墊椿浜嗏斺斿鏋滄兂瑕佸疄鐜頒竴縐嶆柊鐨勬覆鏌撶姸鎬侊紝灝遍渶瑕佷慨鏀?紼嬪簭浠g爜銆傛墍浠ユ洿濂界殑涓縐嶆柟娉曟槸灝嗕負浜嗗疄鐜版煇涓縐嶇壒鏁堟潗璐ㄧ殑涓浜涙覆鏌撶姸鎬佸艱褰曞埌涓涓滄晥鏋滄枃浠垛濅腑錛岄氳繃鍦ㄧ▼搴忚繍琛屾椂璇誨彇璇ユ枃浠訛紝浠庝腑鍒嗘瀽鍑鴻繖浜涘鹼紝騫跺皢瀹冧滑浣滀負鍙?鏁拌皟鐢⊿etRenderState()銆傝繖鏍鳳紝瑕佹兂瀹炵幇涓縐嶆柊鐨勭壒鏁堬紝鍙渶淇敼鈥滄晥鏋滄枃浠垛濊屼笉鐢ㄦ洿鏀逛唬鐮併?
Direct3D SDK鏄氳繃Effect Framework鏉ユ敮鎸佽繖縐嶆満鍒剁殑銆傝屽墠闈㈡墍榪扮殑鈥滄晥鏋滄枃浠垛濆湪Direct3D涓槸浠?.fx鏂囦歡瀛樺湪鐨勩傚湪fx鏂囦歡涓繚瀛樹簡涓哄疄鐜版煇涓鐗規晥鐨勬覆鏌撶姸鎬侊紝鍖呮嫭鐘舵佸悕 縐板拰瀹冧滑鐨勫搴斿箋傛墍浠ュ湪9.0浠ュ墠鐗堟湰鐨凞irectX涓氨宸茬粡鏈塃ffect Framework鍜孎X鏂囦歡浜嗭紝鏃╂湡鐨凟ffect Framework浠呬粎鏄負浜嗗疄鐜板娓叉煋鐘舵佽繘琛屾帶鍒躲?浣嗘槸闅忕潃璁$畻鏈烘樉紺虹‖浠舵妧鏈殑鍙戝睍錛屽浘褰㈠鐞嗗崟鍏冿紙GPU錛夋鍦ㄩ噸澶岰PU鎵璧拌繃鐨勮礬鈥斺旀柊涓浠g殑GPU宸茬粡鍏鋒湁浜嗗彲緙栫▼鐗規э紝紼嬪簭鍛樺彲浠ラ氳繃瀵笹PU緙栧啓涓孌電▼搴忔潵鎺у埗鍏舵覆鏌撶殑 杈撳嚭鏁堟灉銆傝繖縐嶇▼搴忎竴鑸О涓篠hader紼嬪簭銆傜洰鍓嶇殑Shader紼嬪簭鍒嗘垚涓ょ錛孷ertex Shader鍜孭ixel Shader銆俈ertex Shader涓昏鐢ㄤ簬瀵?緇寸綉鏍兼ā鍨嬬殑姣忎竴涓《鐐硅繘琛屽鐞嗭紝鑰孭ixel Shader涓昏鐢ㄤ簬瀵硅緇樺埗鍒板睆騫曚笂鐨勬瘡涓涓薄绱犺繘琛屽鐞嗐傞氳繃Shader錛岀▼搴忓憳鍙互鍒朵綔鍑虹浉褰撲赴瀵岀殑瀹炴椂娓叉煋鏁堟灉銆?/font>
鍚孋PU涓鏍鳳紝瀵笹PU緙栫▼涔熸槸鍊熷姪涓瀹氱殑緙栫▼璇█鏉ヨ繘琛岀殑銆? 鍦―irectX 8涓紝瀵笹PU鐨勭紪紼嬫槸閫氳繃涓縐嶇被浼間簬姹囩紪鐨勮璦榪涜鐨勩傝屽湪DirectX 9涓紝浣跨敤浜嗕竴縐嶇被浼間簬C璇█鐨勯珮綰ц璦鈥斺擬icrosoft High Level Shading Language (HLSL) 銆?/font>
鏃犺浣跨敤浠涔堣璦瀵笹PU緙栫▼錛岄兘闇瑕佹妸緙栬瘧濂界殑Shader紼嬪簭杈撻佸埌鏄懼崱鍘匯侱irect3D Device鍙互閫氳繃SetVertexShader()鍜孲etPixelShader()鏉ュ悜鏄懼崱杈撻丼hader紼嬪簭銆傜劧鑰岋紝鐢?浜嶴hader鍜屾潗璐ㄥ叿鏈夊崄鍒嗙揣瀵嗙殑鍏崇郴鈥斺斾竴鑸潵璇達紝涓涓猄hader灝辨槸涓轟簡瀹炵幇涓縐嶇壒孌婄殑鏉愯川鈥斺旀渶濂芥槸鑳藉灝哠hader紼嬪簭涓庢潗璐ㄨ繘琛屾暣鍚堛?鎵浠ワ紝鍦―irectX 8鍜孌irectX 9涓紝鍘熸潵鐨凟ffect Framework鍙戠敓浜嗘墿鍏呪斺斿湪鍘熸潵鐨勫熀紜涓婂姞鍏ヤ簡瀵筍hader紼嬪簭鐨勬敮鎸併傜▼搴忓憳鍙互鎶奦ertex Shader鍜孭ixel Shader紼嬪簭浠ュ嚱鏁?鐨勬柟寮忕洿鎺ヤ功鍐欏湪FX鏂囦歡涓?/font>
聽.FX鏂囦歡
FX鏂囦歡涓殑鍐呭澶ц嚧鍙互鍒嗘垚鍑犻儴鍒嗭細
棰勭紪璇戞爣蹇楋細棰勭紪璇戞爣蹇楀寘鎷?
鍏朵腑鏈甯哥敤鍒扮殑鏄?include鍜?define錛屽悓C璇█涓殑鎰忎箟寰堢浉浼鹼細鐢?include鍙互鍦ㄤ竴涓狥X鏂囦歡涓紩鍏ュ彟澶栦竴涓垨澶氫釜鏂囦歡銆?define鍙互瀹氫箟FX鏂囦歡涓殑瀹忔浛鎹€備緥濡傦細
|
#include "helper_Funcs.fx"
聽聽聽聽 //寮曞叆涓涓悕涓篽elper_funcs.fx鐨刦x鏂囦歡 |
#include甯︽潵鐨勫ソ澶勫拰C涓篃鏄竴鏍風殑錛嶆偍鍙互鍦ㄤ竴涓ご鏂囦歡涓畾涔変竴浜涘叕鏈夊彉閲忋佸嚱鏁扮瓑錛屽湪鍏朵粬鏂囦歡涓紩鐢ㄥ畠浠紞灝變笉鐢ㄥ啓寰堝閬嶄簡銆備緥濡傦細
鏂囦歡public.fh:
|
mat4x4
matWorldViewProj; // 4x4涓栫晫錛嶈錛嶆姇褰卞彉鎹㈢煩闃?/span> |
//瀹氫箟涓涓悕涓篤S_OUTPUT鐨勭粨鏋勩傚叧浜庣粨鏋勪綋瀹氫箟錛屼笅鏂囦腑浼氭湁浠嬬粛
|
struct
VS_INPUT { 聽聽聽 float4 LocalPos : POSITION; 聽聽聽 float3 Normal : NORMAL; 聽聽聽 float4 Color : COLOR;聽 聽聽聽聽float2 Texcoord : TEXCOORD0; }; |
|
struct VS_OUTPUT
{ 聽聽聽 float4 WorldPos : POSITION; 聽聽聽 float4 Color : COLOR; 聽聽聽 float2 Texcoord : TEXCOORD0; }; |
//瀹氫箟涓涓悕涓篊aculateWorldPosition鐨勫嚱鏁般傚叧浜庡嚱鏁板畾涔夛紝涓嬫枃涓細鏈変粙緇?
|
float3
CaculateWorldPosition( float4 LocalPos ) { 聽聽聽 return mul( LocalPos, matWorldViewProj); } |
榪欐牱錛屽綋鎴戜滑鍦ㄥ彟澶栦竴涓枃浠朵腑include榪欎釜澶存枃浠舵椂錛屼笂闈㈡墍鏈夌殑瀹氫箟閮藉彲浠ョ洿鎺ヤ嬌鐢ㄤ簡銆?
鏂囦歡client.fx:
|
#include "public.fh"
|
聽
榪欐牱涓嶄粎鍙互澶嶇敤浠g爜錛岃繕鍙互浣垮彉閲忓悕銆佺粨鏋勪綋銆佸嚱鏁板悕鐨勫畾涔夌粺涓銆?
鑰?define涓嶄粎浠呭彲浠ヤ嬌鏌愪簺甯擱噺鍏鋒湁姣旇緝鏈夋剰涔夌殑鍚嶇О錛岄氳繃涓?ifdef錛?ifndef, #else, #endif絳夌粨鍚堜嬌鐢紝榪樺彲浠ョ敤鏉ユ牴鎹竴浜涢厤緗帶鍒剁紪璇戣繃紼嬨?
鍙橀噺琛?/p>
姣忎釜FX鏂囦歡閮藉彲浠ユ湁鑻ュ共鍙傛暟鍙橀噺錛岄氳繃Effect Framework鍙互鍦ㄧ▼搴忎腑璇嗗埆鍑鴻繖浜涘弬鏁扮殑綾誨瀷銆佸悕縐板拰鐢ㄩ旓紝榪欐牱灝卞彲浠ュ皢紼嬪簭涓殑涓浜涘弬鏁拌緭閫佸埌Effect涓幓錛屼粠鑰屾洿鍔犵伒媧?鐨勬帶鍒舵晥鏋溿傚弬鏁扮殑綾誨瀷寰堝錛屽彲浠ユ槸int, float, matrix, texture絳夌瓑銆備緥濡傦細
|
matrix
matWorld;聽聽聽聽//瀹氫箟涓涓悕涓簃atWorld鐨勭煩闃電被鍨嬪弬鏁板彉閲?/span> float time;聽聽聽聽聽聽聽聽聽//瀹氫箟涓涓悕涓簍ime鐨勬誕鐐圭被鍨嬪弬鏁板彉閲? texture texDiffuse; //瀹氫箟涓涓悕涓簍exDiffuse鐨勭汗鐞嗙被鍨嬪弬鏁板彉閲?/span> |
聽
鍙﹀錛屾瘡涓彉閲忚繕鏈夊墠緙淇グ絎︺丼emantic銆丄nnotation絳夛紝闄愪簬綃囧箙錛屽湪榪欓噷涓嶅啀璧樿堪錛屽叿浣撶殑浠嬬粛璇峰弬鑰僁irectX C++甯姪鏂囨。鐨凞irectX Graphics > Reference > HLSL Shader Reference > Variable Declaration Syntax鏉$洰銆?
緇撴瀯瀹氫箟
鍦‵X鏂囦歡涓彲浠ュ畾涔夌粨鏋勪綋錛岃繖浜涚粨鏋勪綋涓鑸敤浜嶴hader鍑芥暟鐨勫弬鏁板拰榪斿洖鍊箋傜粨鏋勪綋鐨勫畾涔変笌C璇█鏂瑰紡鍙婂叾綾諱技錛屼緥濡傦細
|
struct
VS_OUTPUT //緇撴瀯鍚嶇О { 聽聽聽 float4 Pos : POSITION; //鎴愬憳鍙橀噺銆?/span> 聽聽聽 float4 Color : COLOR; 聽聽聽 float2 Texcoord : TEXCOORD0; }; |
聽
涓婇潰姣忎釜鎴愬憳鍙橀噺鍚庨潰鐨勬爣璇嗙鏄鍙橀噺鐨剆emantic錛孒LSL緙栬瘧鍣ㄦ牴鎹繖涓爣璇嗙鏉ョ‘瀹氳鍙橀噺鐨勭敤澶勩備笉涓瀹氶潪寰楁槸緇撴瀯浣撴垚鍛樺彉閲忔墠鏈塻emantic錛屼竴鑸潵璇碨hader鐨勮緭鍏ヨ緭鍑哄弬鏁板彉閲忛兘鍙互鏈塻emantic銆?/p>
鍑芥暟
鍑芥暟閮ㄥ垎鏄湪Effect Framework鍔犲叆浜嗗Vertex Shader鍜孭ixel Shader鐨勬墿鍏呭悗鎵嶅姞鍏ュ埌FX鏂囦歡涓殑銆侳X鏂囦歡涓殑鍑芥暟鐨勫唴瀹瑰彲浠ョ敤姹囩紪褰㈠紡涔﹀啓錛屼篃鍙互鐢℉LSL緙栧啓銆傜洰鍓嶄竴鑸?閮芥槸浣跨敤HLSL銆傜敤榪欑璇█涔﹀啓鐨勫嚱鏁頒笌C璇█鍑芥暟鍗佸垎綾諱技錛屽彲浠ヨ錛屽彧瑕佸榪嘋璇█錛屼功鍐橲hader鍑芥暟灝辯話緇版湁浣欎簡銆傚湪鍚屼竴涓猣x鏂囦歡涓彲浠ュ畾涔夊緢澶氬嚱鏁幫紝鍦ㄥ嚱鏁頒腑涔熷彲浠ヤ簰 鐩歌皟鐢紝浣嗘槸鏈緇圫hader紼嬪簭鐨勫叆鍙e皢鍦╢x鏂囦歡鐨凾echnique閮ㄥ垎涓寚瀹氥傚浜庡摢涓嚱鏁版槸Vertex shader鍑芥暟錛屽摢涓槸Pixel shader鍑芥暟錛屼篃鏄湪Technique涓寚瀹氱殑銆傚叧浜嶵echnique錛屽皢鍦ㄤ笅鏂囦腑浠嬬粛銆?渚嬪瓙錛?
|
float4
CalcDiffuseColor( float3 Normal )
VS_OUTPUT
Vertex_Shader( float4 InPos : POSITION, |
聽
姝e涓婃枃涓墍璇達紝Shader紼嬪簭鍒嗕負涓ょ錛歏ertex shader鍜孭ixel shader銆傚湪fx鍑芥暟涓氨鏈変袱縐嶇浉搴旂殑鍑芥暟錛歏ertex shader鍑芥暟鍜孭ixel Shader鍑芥暟銆俈ertex shader鍑芥暟鐨勮緭鍏ュ弬鏁版槸緗戞牸妯″瀷涓殑姣忎竴涓《鐐規暟鎹紝鍏惰緭鍑烘槸緇忚繃璇ュ嚱鏁扮壒孌婂鐞嗙殑欏剁偣鏁版嵁錛涜孭ixel Shader鍑芥暟鐨勮緭鍏ワ紝鍒欐槸緇忚繃紜歡鍏夋爡鍖栬繃紼嬪悗緇忚繃鎻掑肩殑Vertex shader杈撳嚭緇撴灉銆傝嚦浜嶱ixel shader鐨勮緭鍑猴紝涓鑸氨鏄粡榪囪鍑芥暟璁$畻寰楀埌鐨勪竴涓鑹插鹼紝鍗寵鐢誨埌鍚庡緙撳啿涓竴涓薄绱犱笂鐨勯鑹插箋備絾鏄繖涓滈鑹插尖濇湁鏃跺茍涓嶄竴瀹氫唬琛ㄩ鑹層傝屼笖瀵逛簬鏀寔澶歊enderTarget鐨勭‖浠訛紝Pixel shader榪樺彲浠ユ湁澶氫釜杈撳嚭錛屽垎鍒搴斾笉鍚岀殑RenderTarget銆?/p>
technique
technique鏄疐X鏂囦歡鐨勪富浣擄紝鏄湡姝h緗悇縐嶆覆鏌撶姸鎬佺殑鍦版柟錛屼篃鏄寚瀹氭墍浣跨敤鐨凷hader紼嬪簭鍏ュ彛鐨勫湴鏂廣傚湪鐞嗚ВTechnique鍓嶉鍏堣鐞嗚ВPass鐨勬蹇點侾ass鏄疶echnique鐨勭粍鎴愰儴鍒?錛屼竴涓狿ass灝變唬琛ㄤ簡緇樺埗鏃剁殑涓閬嶃傞氬父涓轟簡杈懼埌涓縐嶆晥鏋滐紝浠呬粎緇樺埗涓閬嶇綉鏍兼ā鍨嬫槸涓嶅鐨勶紝闇瑕佸悜framebuffer涓嬈$粯鍒訛紝騫跺埄鐢ㄨ緗覆鏌撶姸鎬佷腑鐨凚lendState榪涜Alpha娣峰悎銆傝繖灝辨槸緇忓父鎻愬埌鐨勨淢uli-pass Rendering鈥濄備絾鏄殢鐫紜歡瓚婃潵瓚婂己澶э紝Shader紼嬪簭鐨勫姛鑳借秺鏉ヨ秺寮猴紝鐩墠鐨勮秼鍔挎槸鎵鏈夌殑鐗規晥鏉愯川閮藉皢鍙互鐢ㄨ秺鏉ヨ秺灝戜釜Pass鏉ュ畬鎴愩?涓涓猼echnique涓紝鍙互瀛樺湪涓涓垨澶氫釜Pass錛屼絾鏄嚦灝戣鏈変竴涓狿ass鏃惰technique鎵嶄細璧峰疄闄呬綔鐢ㄣ傚綋瀛樺湪澶氫釜pass鏃訛紝榛樿鎯呭喌涓嬪湪娓叉煋鏃跺皢浼氭寜鐓ass鍦ㄦ枃浠朵腑鐨勫墠鍚庨『搴?浣滀負娓叉煋鏃剁殑鍓嶅悗欏哄簭銆倀echnique鍜孭ass涓殑鍐呭閮芥槸浠ュぇ鎷彿鎷搗鏉ャ?
technique鐨勪緥瀛愶細
|
technique
Tec_Shader_1_X //瀹氫箟涓涓悕涓篢ec_Shader_1_X鐨則echnique { 聽聽聽 pass P0 //涓涓悕涓篜0鐨刾ass 聽聽聽 { 聽聽聽聽聽聽聽 VertexShader = compile vs_1_1 Vertex_Shader(); //璁劇疆Vertex Shader紼嬪簭鍏ュ彛鍑芥暟 聽聽聽聽聽聽聽 PixelShader = compile ps_1_1 Pixel_Shader();聽聽 //璁劇疆Pixel Shader紼嬪簭鍏ュ彛鍑芥暟 聽聽聽聽聽聽聽 AlphaBlendEnable= true;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //璁劇疆娓叉煋鐘舵伮犅犅犅犅犅犅? 聽聽聽聽聽聽聽 SrcBlend = SrcAlpha;聽聽 聽聽聽聽聽聽聽 DestBlend = InvSrcAlpha;聽 聽聽聽聽聽聽聽 ... //鍏朵粬璁劇疆 聽聽聽 } 聽聽聽 pass P1 //涓涓悕涓篜1鐨刾ass 聽聽聽 { 聽聽聽聽聽聽聽 ... 聽聽聽 } } |
聽
ID3DXEffect鎺ュ彛
涓婇潰浠嬬粛浜嗗緢澶歠x鏂囦歡鐩稿叧鍐呭錛屼絾鏄湪紼嬪簭涓浣曡鍙栧拰鍒嗘瀽榪欎簺fx鏂囦歡鍛紵鍦ㄧ▼搴忎腑瀵逛簬璇誨彇fx鏂囦歡錛屾帶鍒舵覆鏌撶姸鎬併佽緗甋hader紼嬪簭絳夊伐浣滈兘鏄氳繃D3DX搴撲腑鐨処D3DXEffect鎺ュ彛鏉ュ疄鐜扮殑銆侷D3DXEffect鎺ュ彛鎻愪緵浜嗗ぇ閲忕殑鏂規硶錛屽熀鏈笂鍒嗕負鍑犱釜鏂歸潰錛?
ID3DXEffect鎺ュ彛鐨勫垱寤猴細 閫氳繃D3DX搴撲腑鐨凞3DXCreateEffectFromFile()鍑芥暟錛屽彲浠ユ牴鎹竴涓寚瀹氱殑鏂囦歡鐨勫唴瀹規潵鍒涘緩涓涓狪D3DXEffect鎺ュ彛銆傚湪璇ュ嚱鏁版墽琛屾垚鍔熷悗錛屾墍鍒涘緩鐨勬帴鍙d腑灝卞寘鍚簡鏂囦歡閲屾墍瀵瑰簲鐨?鎵鏈夊唴瀹癸紝鍖呮嫭鍙傛暟鍙橀噺琛ㄣ丼hader紼嬪簭銆乼echnique鍜宲ass絳夈?
ID3DXEffect鎺ュ彛鐨勪嬌鐢細 閫氳繃璇ユ帴鍙g殑鏂規硶鍙互鑾峰緱FX鏂囦歡涓殑鎵鏈変俊鎭紝騫惰緗弬鏁板彉閲忓拰褰撳墠鐨則echnique銆傛墍鏈夌殑鍙傛暟鍙橀噺銆乼echnique銆乸ass銆乻hader絳夌瓑閮芥湁鑷繁鐨勫悕縐幫紝鏍規嵁榪欎簺鍚嶇О錛岄氳繃璋冪敤ID3DXEffect::GetParameterByName()銆両D3DXEffect::GetTechniqueByName()鍜孖D3DXEffect::GetPassByName()絳夋柟娉曞氨鍙互鑾峰緱榪欎簺瀵硅薄鐨勫彞鏌勶紝浠庤屽湪璋冪敤 ID3DXEFFECT::Set***()榪涜璁劇疆鏃朵嬌鐢ㄥ彞鏌勮屼笉鏄瓧絎︿覆榪涜绱㈠紩鏉ユ彁楂樻晥鐜囥?/p>
閫氳繃ID3DXEffect::GetParameterDesc()銆両D3DXEffect::GetTechniqueDesc()鍜孏etPassDecs絳夋柟 娉曞彲浠ヨ幏寰楀叧浜庢寚瀹氬璞$殑鎵鏈夌粏鑺傛弿榪頒俊鎭?D3DX搴撲腑瀹氫箟浜嗕竴涓狣3DXPARAMETER_DESC緇撴瀯鏉ヤ笓闂ㄨ〃紺哄弬鏁扮殑綾誨瀷銆傞氳繃ID3DXEffect::GetParameterDesc()鏂規硶錛屽彲浠ヤ負涓涓弬鏁拌幏寰楄繖鏍蜂竴涓粨鏋勭殑鏁版嵁銆?
|
typedef struct
_D3DXPARAMETER_DESC { 聽聽聽 LPCSTR Name;聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鍙傛暟鍙橀噺鍚? 聽聽聽 LPCSTR Semantic;聽聽聽聽聽聽聽聽聽聽 //鍙傛暟鍙橀噺鐨凷emantic 聽聽聽 D3DXPARAMETER_CLASS Class; //鍙傛暟鍙橀噺鐨勭被鍒紝鍙互鏄爣閲忋佺煝閲忋佺煩闃點佸璞″拰緇撴瀯 聽聽聽 D3DXPARAMETER_TYPE Type;聽聽 //鍙傛暟鍙橀噺鐨勭被鍨? 聽聽聽 UINT Rows;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//鏁扮粍鍨嬪弬鏁扮殑琛屾暟 聽聽聽 UINT Columns;聽聽聽聽聽聽聽聽聽聽聽聽聽 //鏁扮粍鍨嬪弬鏁扮殑鍒楁暟 聽聽聽 UINT Elements;聽聽聽聽聽聽聽聽聽聽聽聽 //鏁扮粍涓殑鍏冪礌涓暟 聽聽聽 UINT Annotations;聽聽聽聽聽聽聽聽聽 //鍙傛暟鍙橀噺鐨凙nnotation涓暟 聽聽聽 UINT StructMembers;聽聽聽聽聽聽聽 //緇撴瀯鍨嬪弬鏁板彉閲忔垚鍛樼殑涓暟 聽聽聽 DWORD Flags;聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鍙傛暟灞炴? 聽聽聽 UINT Bytes;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鍙傛暟澶у皬錛屼互瀛楄妭璁? } D3DXPARAMETER_DESC; |
聽
鍏朵腑鐨勫弬鏁扮被鍨嬪彲浠ユ湁涓嬪垪鍑犵錛?
|
typedef
enum _D3DXPARAMETER_TYPE { 聽聽聽 D3DXPT_VOID, //Void鍨嬫寚閽? 聽聽聽 D3DXPT_BOOL, //Bool鍨? 聽聽聽 D3DXPT_INT, //鏁村瀷 聽聽聽 D3DXPT_FLOAT, //嫻偣鍨? 聽聽聽 D3DXPT_STRING, //瀛楃涓? 聽聽聽 D3DXPT_TEXTURE, //綰圭悊 聽聽聽 D3DXPT_TEXTURE1D, //涓緇寸汗鐞? 聽聽聽 D3DXPT_TEXTURE2D, //浜岀淮綰圭悊 聽聽聽 D3DXPT_TEXTURE3D, //涓夌淮綰圭悊 聽聽聽 D3DXPT_TEXTURECUBE, //绔嬫柟浣撶幆澧冪汗鐞? 聽聽聽 D3DXPT_SAMPLER, //綰圭悊鍙栨牱鍣? 聽聽聽 D3DXPT_SAMPLER1D, //涓緇寸汗鐞嗗彇鏍峰櫒 聽聽聽 D3DXPT_SAMPLER2D, //浜岀淮綰圭悊鍙栨牱鍣? 聽聽聽 D3DXPT_SAMPLER3D, //涓夌淮綰圭悊鍙栨牱鍣? 聽聽聽 D3DXPT_SAMPLERCUBE, //绔嬫柟浣撶幆澧冪汗鐞嗗彇鏍峰櫒 聽聽聽 D3DXPT_PIXELSHADER, //Pixel Shader紼嬪簭 聽聽聽 D3DXPT_VERTEXSHADER, //Vertex Shader紼嬪簭 聽聽聽 D3DXPT_PIXELFRAGMENT, //Pixel Shader鐗囨柇 聽聽聽 D3DXPT_VERTEXFRAGMENT, //Vertex Shader鐗囨柇 聽聽聽 D3DXPT_FORCE_DWORD = 0x7fffffff } D3DXPARAMETER_TYPE; |
聽
鑰岀湡姝h璁〦ffect璧蜂綔鐢紝闇瑕佸湪緇樺埗緗戞牸妯″瀷鍓嶅悗璋冪敤ID3DXEffect::BeginPass()鍜孍ndPass鏂規硶銆傚湪璋冪敤榪欎袱涓嚱鏁頒箣鍓嶅拰涔嬪悗錛岃繕闇璋冪敤ID3DXEffect::Begin()鍜?ID3DXEffect::End()鏂規硶鏉ョ晫瀹氭嬈ffect璁劇疆鐨勮搗姝€傚ぇ鑷寸殑褰㈠紡濡備笅錛?
|
LPD3DXEffect pd3dEffect錛?span class="unnamed1"> //ID3DXEffect鎺ュ彛鎸囬拡
UINT numPasses; //鐢ㄤ簬鎺ュ彈褰撳墠鎵浣跨敤鐨則echnique涓殑pass涓暟 |
聽
3DS MAX瀵笵irectX 9 Shader Material鐨勬敮鎸侊紱Effect鏁版嵁鑾峰彇鍜屽鍑?/strong>
鍦‵X鏂囦歡涓殑鍙傛暟錛屽ぇ閮ㄥ垎閮芥槸鐢ㄦ潵璋冩暣FX鏂囦歡鎵鎸囧畾鐨凟ffect鐨勪竴浜涚粏鑺傦紝渚嬪錛屼竴縐嶅甫鏈夊嚬鍑哥汗鐞嗙殑鏁堟灉錛屽彲鑳藉湪FX涓氨鏈変竴涓弬鏁版帶鍒剁潃鍑瑰嚫涓嶅鉤鐨勭▼搴︺傝岃繖浜涘弬鏁版槸闇瑕佺敱緹庡伐鏉ヨ皟鏁寸殑銆傚彟澶栵紝緹庡伐涔熼渶瑕佹湁涓涓斿緞鑳藉灝咶X鏂囦歡瀹氫箟鐨凟ffect璧嬩簣鍒頒竴涓ā鍨嬫垨瀹冪殑涓閮ㄥ垎涓婂幓銆傚悓鏃剁編宸ヤ篃搴旇鑳藉瀹炴椂鐨勯瑙堣Effect鍦ㄦā鍨嬩笂鐨勫疄闄呮晥鏋溿?鍦ㄤ互鍓嶏紝瀹炵幇榪欎簺瑕佹眰鍙兘閫氳繃鑷埗鏁堟灉棰勮鍣ㄣ佹ā鍨嬬紪杈戝櫒鎴栬呬負DCC杞歡緙栧啓鎻掍歡鏉ュ畬鎴愩傝繖瀵逛簬灝忕殑宸ヤ綔緇勫拰宸ユ湡杈冪煭鐨勯」鐩潵璇存槸闈炲父鍥伴毦鐨勩傚垢榪愮殑鏄紝鐩墠鐨凞CC杞歡 宸茬粡寮濮嬩負娓告垙鍒朵綔鎻愪緵涓板瘜鐨勬敮鎸佸姛鑳姐傞氳繃DCC杞歡鑷韓灝卞彲浠ラ瑙堝埌瀹炴椂Effect鐨勬晥鏋滐紝騫惰皟鏁村叾鍙傛暟銆傚湪銆婇緳鐨勪紶璇淬嬭繖涓」鐩腑錛屾垜浠嬌鐢?DS MAX 6.0鏉ヤ綔涓烘ā鍨嬪緩绔?宸ュ叿鍜孲hader棰勮宸ュ叿銆?
鍦?DS MAX 6.0涓紝鏂板姞鍏ヤ簡涓縐嶆潗璐ㄧ被鍨嬧斺擠irectX 9 Shader鏉愯川銆傝繖縐嶆潗璐ㄦ槸鍩轟簬FX鏂囦歡鐨勩備竴涓狥X鏂囦歡灝卞彲浠ヤ唬琛ㄤ竴縐嶆潗璐ㄣ傚畠鍙互鍚孧AX涓殑鍏朵粬鏉愯川涓鏍瘋祴浜堝埌妯″瀷涓?銆傚湪MAX鐨刅iewport涓彲浠ュ疄鏃跺湴瑙傚療鍒癋X鏂囦歡涓璁$殑鏁堟灉銆傞氳繃涓篎X涓殑鍙傛暟璁劇疆鐗瑰畾鐨凷emantic錛屽彲浠ュ皢榪欎簺鍙傛暟涓嶮AX涓殑鍦烘櫙淇℃伅鑱旂郴璧鋒潵錛屽鎽勫儚鏈轟綅緗佷笘鐣屽彉鎹㈢煩 闃電瓑銆傚浜庢帶鍒禘ffect鏁堟灉鐨勪竴浜涙湰鍦板弬鏁幫紝鍙互閫氳繃涓哄畠浠坊鍔犵壒瀹氱殑Annotation錛屼嬌MAX鑳藉鐩存帴璇嗗埆榪欎簺鍙傛暟騫跺湪鐢ㄦ埛鐣岄潰涓樉紺哄畠浠殑鍚嶇О鍜岃皟鑺傛帶浠躲傚搴斾笉鍚岀被鍨嬬殑鍙?鏁幫紝MAX鍙互涓哄畠浠敓鎴愪笉鍚岀殑璋冭妭鎺т歡銆傝繖鏍鳳紝榪欑鏉愯川灝卞拰MAX鐨勫叾浠栨潗璐ㄤ竴鏍鳳紝鍙互鏇存敼綰圭悊絳夌瓑鐨勫弬鏁頒簡銆?瀵逛簬緹庡伐鏉ヨ錛岄氳繃榪欑鐢ㄦ埛鐣岄潰灝卞彲浠ヨ皟鏁磋FX鏉愯川鐨勫弬鏁拌揪鍒版渶濂界殑鏁堟灉銆?/p>
浣嗘槸緹庡伐鎵璋冩暣鐨勭粨鏋滃繀欏昏鑳藉淇濆瓨涓嬫潵鎵嶆湁鎰忎箟銆傝繖涓伐浣滃氨寰楃敱紼嬪簭鍛樻潵瀹屾垚浜嗐傝淇濆瓨3DS MAX涓紪杈戠殑鎵鏈夊唴瀹癸紝闇瑕佷負3DS MAX緙栧啓鏂囦歡瀵煎嚭鎻掍歡錛屽皢鍏跺唴閮ㄦ暟鎹繚瀛樺湪鐗瑰畾鏍煎紡鐨勬枃浠朵腑銆傚湪銆婇緳鐨勪紶璇淬嬭繖涓」鐩腑錛屾垜浠嬌鐢∕icrosoft DirectX .X 鏂囦歡銆傚鏋滀粠澶村紑濮嬪啓瀵煎嚭鎻掍歡錛屽伐浣滈噺鏄浉褰撳ぇ鐨勶紱騫歌繍鐨勬槸錛屽湪Microsoft DirectX SDK Extra涓彁渚涗簡涓涓兘澶熷鍑烘ā鍨嬪拰3DS MAX鏍囧噯鏉愯川鍒癤鏂囦歡鐨勬彃浠舵簮浠g爜銆傞氳繃淇敼璇ユ簮浠g爜錛屽彲浠ヤ嬌瀹冭兘澶熷鍑篋irectX 9 Shader鏉愯川銆傚湪3DS MAX 6 SDK涓柊澧炲姞浜嗕竴涓狪DxMaterial鎺ュ彛錛岄氳繃鏌ヨ涓涓狪Material鎺ュ彛鏄惁涓篒DxMaterial鎺ュ彛錛屽氨鍙互紜畾璇ユ潗璐ㄦ槸鍚︿負DirectX 9 Shader鏉愯川銆傞氳繃IDxMaterial鎺ュ彛鍙互鑾峰緱璇ユ潗璐ㄥ搴旂殑FX鏂囦歡鐨勬枃浠跺悕錛屼互鍙婂叾鍙傛暟淇℃伅銆傝繖鏍峰氨鍙互灝嗗畠浠鍑轟簡銆?
.X鏂囦歡涓Effect鐨勬敮鎸侊紱EffectInstance鍜孍ffectDefault
Microsoft DirectX .X鏂囦歡鐨勬牸寮忔槸鍩轟簬妯℃澘鐨勩佸彲鎵╁睍鐨勬枃浠舵牸寮忋傞氳繃涓哄叾鍒跺畾鏂扮殑妯℃澘錛屽氨鍙互鍦ㄥ叾涓姞鍏ユ柊鐨勫唴瀹廣備竴鑸殑.X鏂囦歡涓殑鍐呭鏈変笁緇村満鏅殑鐗╀綋灞傜駭鍏崇郴銆佺綉鏍兼ā鍨嬪嚑浣曟暟鎹佹潗璐ㄤ俊鎭佸姩鐢諱俊鎭瓑銆傚湪DirectX鐨勪紬澶歑鏂囦歡妯℃澘涓湁涓涓ā鏉挎槸涓撻棬鐢ㄦ潵浠h〃Effect鐨勫疄渚嬬殑銆傚綋涓涓狥X鏂囦歡鐨勫弬鏁拌緹庡伐鍔犱互璋冩暣浠庤屽叿澶囦竴浜涚壒瀹氱殑鍊間箣鍚庯紝璇?FX鏂囦歡鍜岃繖浜涘弬鏁板肩殑闆嗗悎灝卞艦鎴愪簡涓涓狤ffect瀹炰緥銆傝妯℃澘鐨勫畾涔夊涓嬶細
|
template
EffectInstance { 聽聽聽 < E331F7E4-0559-4cc2-8E99-1CEC1657928F > 聽聽聽 STRING EffectFilename; 聽聽聽 [ ... ] } |
聽
鍏朵腑錛?EffectFilename浠h〃浜嗚Effect瀹炰緥涓殑FX鏂囦歡鍚嶏紝 [ ... ]浠h〃鍦ㄥ叾涓彲浠ユ彃鍏ヤ換浣昘鏂囦歡妯℃澘瀵瑰簲鐨勬暟鎹傝繖鏍峰氨鍙互浠h〃浠諱綍綾誨瀷鐨勫弬鏁板箋?
鐒惰岃鎯寵Direct3D紼嬪簭鑳藉璇嗗埆[ ... ]涓殑鍐呭錛岄渶瑕佷嬌鐢╔鏂囦歡妯℃澘涓殑EffectParam緋誨垪妯℃澘錛屽寘鎷珽ffectParamDWord, EffectParamFlaots, EffectParamString銆傞氳繃榪欎笁縐嶆ā鏉垮搴旂殑鏁版嵁錛屾墍鏈夌被鍨嬬殑Effect鍙傛暟鍊奸兘鍙互琚褰曞湪X鏂囦歡涓?
鏈鍚庯紝EffectInstance鏁版嵁闇瑕佽鏀劇疆鍦∕aterial鏁版嵁涓墠鍙互琚瘑鍒?/p>
Material妯℃澘錛?
|
template
Material { 聽聽聽 < 3D82AB4D-62DA-11CF-AB39-0020AF71E433 > 聽聽聽 ColorRGBA faceColor; 聽聽聽 FLOAT power; 聽聽聽 ColorRGB specularColor; 聽聽聽 ColorRGB emissiveColor; 聽聽聽 [...] } |
聽
鍓嶉潰鐨勪竴浜涢鑹叉ā鏉胯〃鏄庡湪Material鏁版嵁涓繖浜涢鑹蹭俊鎭槸蹇呴』鏈夌殑錛岃屾渶鍚庣殑[ ... ]鍒欎唬琛ㄥ彲浠ユ彃鍏ヤ換浣昘鏂囦歡妯℃澘瀵瑰簲鐨勬暟鎹傛垜浠殑EffectInstance鏁版嵁灝卞彲浠ユ斁緗湪榪欓噷 銆?
涓句竴涓畝鍗曠殑渚嬪瓙錛?
|
Material { //鏉愯川 聽聽聽 0.500000;0.500000;0.500000;1.000000;; //faceColor 聽聽聽 0.000000; //power 聽聽聽 0.900000;0.900000;0.900000;; //specularColor 聽聽聽 0.000000;0.000000;0.000000;; //emissiveColor 聽聽聽 EffectInstance 聽聽聽 {聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//[...]錛岃繖閲屾槸EffectInstance 聽聽聽聽聽聽聽 "SkyboxNew01.fx";聽聽聽聽聽聽聽 //fx鏂囦歡鐨勬枃浠跺悕銆傞氳繃D3DXCreateEffectFromFile()鍙互 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //寤虹珛璇ユ枃浠跺搴旂殑D3DXEffect瀵硅薄 聽聽聽聽聽聽聽 //涓嬮潰鏄疎ffectInstance涓殑[...] 聽聽聽聽聽聽聽 EffectParamString聽 聽聽聽聽聽聽聽聽{聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //EffectParamString錛屽嵆瀛楃涓插瀷鍙傛暟鍊?/span>聽 聽聽聽聽聽聽聽聽聽聽聽聽"TexCloudTop";聽聽聽聽聽聽 //鍙傛暟鐨勫悕縐幫紝閫氳繃璇ュ悕縐拌皟鐢↖D3DXEffect::GetXXXByName()鏂規硶 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鍙互寰楀埌涓巉x鏂囦歡涓搴旂殑鍙傛暟銆? 聽聽聽聽聽聽聽聽聽聽聽 "DarkClouds01.jpg";聽 //鍙傛暟鐨勫悸?/span> 聽聽聽聽聽聽聽聽}聽 聽聽聽聽聽聽聽聽EffectParamString 聽聽聽聽聽聽聽 {聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鍚屼笂 聽聽聽聽聽聽聽聽聽聽聽 "TexCloudBottom"; 聽聽聽聽聽聽聽聽聽聽聽 "DarkClouds02.jpg"; 聽聽聽聽聽聽聽 } 聽聽聽聽聽聽聽 EffectParamFloats 聽聽聽聽聽聽聽 {聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //EffectParamFloats錛屽嵆嫻偣鏁扮粍鍨嬪弬鏁板?/span> 聽聽聽聽聽聽聽聽聽聽聽 "Brightness";聽聽聽聽聽聽 //鍙傛暟鍚嶇О 聽聽聽聽聽聽聽聽聽聽聽 1;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //嫻偣鏁扮粍澶у皬 聽聽聽聽聽聽聽聽聽聽聽 0.500000;聽聽聽聽聽聽聽聽聽聽 //鍊? 聽聽聽聽聽聽聽 } 聽聽聽 } } |
聽
褰撴垜浠湪紼嬪簭涓皟鐢―3DXLoadMeshFromX()鎴朌3DXLoadMeshHierarchyFromX()鏃訛紝灝卞彲浠ラ氳繃鍏禠PD3DXBUFFER *ppEffectInstances鍙傛暟鏉ユ帴鏀跺埌緗戞牸鎵鐢ㄧ殑鎵鏈塃ffectInstance鐨勪俊鎭?/p>
鍦ㄧ▼搴忎腑錛屽搴斾簬X鏂囦歡涓殑EffectInstance妯℃澘鍜孍ffectParam緋誨垪妯℃澘錛屾湁涓や釜緇撴瀯浣撶敤鏉ヤ唬琛‥ffect鏁版嵁錛?
|
typedef struct
_D3DXEFFECTINSTANCE
typedef struct _D3DXEFFECTDEFAULT 闇瑕佹敞鎰忕殑鏄紝浠庢枃浠朵腑寰楀埌鐨勫弬鏁扮被鍨嬪彧鏈変互涓嬪嚑縐嶏細 |
聽
鍦ㄨ皟鐢ㄤ簡D3DXLoadMeshFromX()鍜孌3DXLoadMeshHierarchyFromX()涔嬪悗錛孹鏂囦歡涓殑鎵鏈塃ffect鏁版嵁淇℃伅灝變互涓婅堪緇撴瀯浣撶殑褰㈠紡鏀劇疆鍦╬pEffectInstances涓簡銆?鍙﹀錛屽湪浠?DS MAX瀵煎嚭鍙傛暟鍒癤鏂囦歡鏃訛紝瀵逛簬鏁村瀷鍜屾誕鐐規暟緇勫瀷鐨勫彉閲忥紝瀹冧滑鐨勫煎皢鐩存帴瀵煎嚭鍒癤鏂囦歡涓幓錛涜屽浜庢墍鏈夌殑綰圭悊璐村浘鏂囦歡鍙傛暟錛屽鍑虹殑浠呬粎鏄鏂囦歡鐨勬枃浠跺悕銆傛墍浠?鍦ㄧ▼搴忎腑闇瑕佸啀鏍規嵁榪欎簺鏂囦歡鍚嶆潵寤虹珛綰圭悊瀵硅薄銆?鍦ㄣ婇緳鐨勪紶璇淬嬩腑錛屾垜浠嬌鐢ㄤ竴涓嚜瀹氫箟鐨凜EffectInstance綾繪潵澶勭悊灝嗘枃浠跺悕杞崲涓虹汗鐞嗗璞$殑榪囩▼銆?涓鑸潵璇達紝寤虹珛涓涓畬鏁寸殑CEffectInstance鐨勮繃紼嬪涓嬶細
鏍規嵁D3DXEFFECTINSTANCE緇撴瀯涓殑pEffectFilename瀛楃涓插鎵懼搴旂殑FX鏂囦歡;
鏍規嵁璇X鏂囦歡寤虹珛ID3DXEffect錛屽茍灝嗘寚閽堜繚瀛樺湪CEffectInstance涓?
鏍規嵁D3DXEFFECTINSTANCE緇撴瀯涓殑pDefaults璁劇疆CEffectInstance涓殑鍙傛暟淇℃伅錛毬?/p>
瀵逛簬闀挎暣鍨嬪拰嫻偣鏁扮粍錛岀洿鎺ユ嫹璐濓紱聽
瀵逛簬瀛楃涓詫紝棣栧厛璋冪敤ID3DXEffect鎺ュ彛涓殑GetParameterByName()鍜孏etParameterDesc()鏂規硶錛屽緱鍒拌鍙傛暟鐨勭被鍨嬶紱 鐒跺悗榪涗竴姝ュ垽鏂細
濡傛灉紜疄鏄瓧絎︿覆鍙傛暟錛屽垯鐩存帴鎷瘋礉
濡傛灉鏄汗鐞嗗弬鏁幫紝鍒欏皢璇ュ瓧絎︿覆浣滀負綰圭悊鏂囦歡鍚嶅緩绔嬬汗鐞嗗璞★紝騫跺皢鎸囬拡淇濆瓨鍦–EffectInstance涓?
鑰屽湪鏈鏂版帹鍑虹殑DirectX 9 SDK Summer 2004涓紝閫氳繃ID3DXEffect::BeginParameterBlock()鍜孖D3DXEffect::EndParameterBlock()鏂規硶錛屾垜浠彲浠ュ皢Effect鍙傛暟璁劇疆榪囩▼緇熶竴緇戝畾鍒頒竴涓狿aramBlock鍙ユ焺涓娿傝繖鏍鳳紝鍦ㄨ皟鐢↖D3DXEffect::Begin()涔嬪墠灝卞彲浠ョ洿鎺ヤ嬌鐢↖D3DXEffect::ApplyParameterBlock()鏂規硶鏉ヨ緗墍鏈夎緇戝畾鐨勫弬鏁板箋備緥濡傦細
[浠ュ墠鐨勫仛娉?/strong>]錛?
鍦ㄨ鍙栧弬鏁版椂錛氳幏寰楁瘡涓涓弬鏁扮殑鍙ユ焺
|
hParam1 = pEffect->GetParameterByName( NULL, "LightPos" ); 鍦ㄥ疄鏃剁粯鍒舵椂錛氬垎鍒緗瘡涓涓弬鏁? pEffect->SetValue( hParam1, value1 ); |
聽
[鍦―irectX 9 SDK Summer 2004涓殑鍋氭硶]錛?
鍦ㄨ鍙栧弬鏁版椂錛氱粦瀹氭墍鏈夊弬鏁拌緗埌鍚屼竴鍙ユ焺
|
hParam1 = pEffect->GetParameterByName( NULL, "LightPos" ); 鍦ㄥ疄鏃剁粯鍒舵椂錛氱粺涓璁劇疆緇戝畾鍊? pEffect->ApplyParameterBlock( hParamBlock ); |
聽
榪欐牱涓嶄粎綆鍖栦簡鍦ㄨ鍙栨椂瀵瑰弬鏁扮殑鍒嗘瀽榪囩▼錛岃屼笖鎻愰珮浜嗗疄闄呯粯鍒舵椂鍙傛暟璁劇疆榪囩▼鐨勬晥鐜囥?
鎬葷粨
浠ヤ笂灝辨槸涓浜涘浜庡湪DirectX 9.0涓Effect Framework鐨勪嬌鐢ㄧ殑綆瑕佷粙緇嶃傛諱箣錛屼嬌鐢‥ffect鏉ユ浛浠d互鍓嶇殑鏍囧噯鏉愯川鏄洰鍓嶅疄鏃跺浘褰㈤鍩熺殑鍙戝睍瓚嬪娍銆傞氳繃Effect Framework錛岀▼搴忓憳鍜岀編宸ュ彲浠ヤ負瀹炴椂涓夌淮紼嬪簭瀹炵幇澶氱澶氭牱鐨勬潗璐ㄦ晥鏋滃拰瑙嗚鏁堟灉銆?鐢變簬鍐呭瀹炲湪澶錛岄檺浜庣瘒騫咃紝鏈枃鍙槸瀵笶ffect Framework涓浉鍏蟲蹇電殑涓涓諱綋姒傛嫭鍜岀畝瑕佷粙緇嶏紝鎵浠ユ樉寰楁湁浜涙櫐娑┿傚湪浠ュ悗鐨勬枃绔犱腑錛屽皢鍒嗘壒瀵硅繖涓狥ramework浠ュ強鍦ㄥ叾涔嬩笂榪涜宸ヤ綔鐨勬祦紼嬭繘琛屾瘮杈冭緇嗙殑浠嬬粛銆?/p>
1.鍘繪帀浜嗗浐瀹氱綰?br />鏂囨。閲屽垪鍑轟簡鐢―X10鐗規фā鎷熺殑涓浜涘浐瀹氱綰跨殑鎿嶄綔錛孧S閭d箞澶у害鎶奃X閮藉紑婧愪簡(^O^)銆?/font>
2.鍘繪帀浜嗕互鍓嶇増鏈珼X鐨勮澶囪兘鍔涙鏌?CAPS)
涓篋X10鍜學indows聽Vista鎻愪緵鐨勬樉紺虹‖浠跺繀欏繪弧瓚矰X10鐨勬墍鏈夌‖浠剁壒鎬с傝繖鏍峰浜庡紑鍙戣呭氨姣旇緝鍙互鏀懼績鐨勪嬌鐢ㄥ悇縐嶇‖浠剁壒鎬т簡錛屽緢綾諱技Console騫沖彴
鐨勫紑鍙戙?/font>
3.鐘舵佸璞?State聽Object)
"浠?00澶氫釜娓叉煋鐘舵佷腑瑙h劚鍑烘潵鍚?"
D3D10瀵規覆鏌撶姸鎬佽繖涓蹇佃繘琛屾貳鍖栵紝涓鏂歸潰浣跨敤鍏⊿hader鍖栫殑鏋舵瀯浣垮緱鐘舵佺殑鍓嶅悗璁劇疆鍜屼簰鐩稿獎鍝嶅娓叉煋鎴愬姛鐜囬檷浣庡埌鏈灝?br />鍙﹀瀵笰PI鏋舵瀯涔熸洿涓虹畝媧侊紝鍙︿竴鏂歸潰瀵逛竴浜涘叧閿覆鏌撶姸鎬佽繘琛屽皝瑁呭拰鍒嗙被銆備富瑕佸垎綾繪湁:
Input聽Layout聽Object聽杈撳叆灞傚璞?br />榪欎釜涓滆タ寰堢被浼糄3D9閲岀殑欏剁偣澹版槑錛屼篃灝辨槸瀵圭敤鎴瘋緭鍏ユ暟鎹繘琛屾暣鍚堝拰緋葷粺鍖?br />
Rasterizer聽Object聽鍏夋爡鍖栧璞?br />榪欓儴鍒嗕富瑕佹帶鍒跺厜鏍呭櫒鐨勮涓猴細濉厖妯″紡(FILL_MODE),鍓旈櫎妯″紡(CULL_MODE),澶氶噰鏍?DepthBias絳夌瓑
DepthStencil聽Object聽娣卞害緙撳啿瀵硅薄
涓昏鎺у埗娣卞害緙撳啿鐨勮涓猴紝鍍廧-buffer聽Enable涔嬬被鐨?br />
Blend聽Object聽娣峰悎瀵硅薄
璁劇疆璞$礌娣峰悎鐨勬柟娉曪紝綾諱技AlphaBlend聽SrcAlpha聽,DestAlpha絳夌瓑
Sampler聽Object聽閲囨牱鍣ㄥ璞?br />璁劇疆綰圭悊閲囨牱鐘舵侊紝鍖呮嫭榪囨護鍣ㄥ拰MipMap
4.鏂扮殑璧勬簮璁塊棶妯″紡鍜岃祫婧愯鍥?View)姒傚康
濡傛灉瀵規瘮D3D9鐨凷hader浣跨敤浠g爜鍜孌3D10鐨勭被浼間唬鐮佷細鍙戠幇涓涓笉鍚屻?br />D3D9聽Shader闇瑕佸綰圭悊榪涜鎿嶄綔鏃訛紝闇瑕佸皢綰圭悊璁劇疆鍒癝hader灝卞彲浠ヤ簡錛岃孌3D10閲屾病鏈夐偅涔堢畝鍗曪紝璁劇疆鍓嶅繀欏誨皢
鍚勭璧勬簮鏁村悎鍚庝負璧勬簮鍒涘緩涓涓鍥撅紝鍐嶆彁浜ょ粰Shader璁塊棶銆傝繖縐嶆搷浣滃湪鐜璐村浘閲屾槸寰堟湁濂藉鐨勩傚浜嶤ubeMap鐨?寮犵汗鐞?br />灝卞彲浠ラ噰鐢ㄤ竴涓鍥捐緗埌璁懼錛岃岃嚜宸辮璁塊棶姣忓紶璐村浘鍙杞繪澗璁塊棶瑙嗗浘灝卞彲浠ヤ簡錛屼篃灝辨槸璇存妸璧勬簮瑙勬暣鍜岄泦鎴愬寲銆?/font>
5.鏂扮殑鍙紪紼嬪浘褰㈠眰(Stage)-鍑犱綍Shader(Geometry聽Shader)
鍘熸潵鐨刅S鍜孭S鍙槸瀵歸愪釜欏剁偣鎴栬薄绱犺繘琛屽鐞嗭紝鑰屾柊鐨凣S鍙互瀵規瘡涓《鐐規垨璞$礌鐨勪復榪戦《鐐硅緗甋hader銆備篃灝辨槸鍙互瀵規壒閲忓嚑浣曡繘琛屽鐞?br />GS鐨勭敤閫旀湁:
鐐圭簿鐏?br />鍔ㄦ佺矑瀛愮郴緇?br />鐨瘺緋葷粺
鍗風Н闃村獎
鍗昉ass娓叉煋鍒扮悆褰㈣創鍥?br />閫愬杈瑰艦鏉愯川浜ゆ崲
閫愬杈瑰艦鏉愯川璁劇疆
6.璁懼鐨勫垱寤鴻姹傚ViewPort榪涜璁劇疆
D3D9閲屾棤闇瀵筕iewPort榪涜璁劇疆灝卞彲浠ヨ繘琛屾覆鏌擄紝鑰屼笖榛樿鐨凴enderTarget灝辨槸鍚庡緙撳啿
鑰屽湪D3D10閲岋紝榪欎釜榪囩▼鍙樺緱鏇翠負鑷富鍖栥傚彇鍑哄悗澶囩紦鍐茬殑鏍煎紡錛屽皢RenderTarget璁劇疆涓哄睆騫?br />榪欒浜烘劅鍒癉3D10璁捐鏇磋秼鍚戜簬鎴愮啛鐨勫紩鎿庤璁°?/font>
7.嫻佽緭鍑哄眰(Stream聽Output聽State)
榪欎釜灞傜殑鍔熻兘鏄皢VS鍜孏S澶勭悊瀹屾垚鐨勬暟鎹緭鍑虹粰鐢ㄦ埛錛岀敱鐢ㄦ埛榪涜澶勭悊鍚庡啀鍙嶉緇欑綰跨戶緇鐞?br />
8.澶氳竟褰㈡嫇鎵戠粨鏋勪粠緇樺埗浠g爜鍒嗙
鐜板湪鍙互鍗曠嫭璁劇疆鎷撴墤緇撴瀯
g_pd3dDevice->IASetPrimitiveTopology(聽D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST聽);
鍜屼嬌鐢―raw鍑芥暟緇樺埗浜嗭紝寰堢被浼糘penGL
9.涓ユ牸鐨勮澶囧璞″垱寤烘椂闂撮獙璇?br />榪欓噷鐨勮澶囧璞″氨鏄粠璁懼鍒涘緩鍑烘潵鐨勮祫婧愩備負浜嗗噺灝慍PU鍗犵敤錛孌3D10閲嶆柊璁捐浜嗙‖浠惰祫婧愯皟鐢ㄨ皟搴︼紝鎵鏈夌殑璁懼瀵硅薄閮界敤闈㈠悜瀵硅薄鐨勬柟娉曡璁懼
綆$悊銆傝繖縐嶈璁℃柟娉曢伩鍏嶄簡鍦ㄦ覆鏌撴湡鐨勮祫婧愬垱寤烘搷浣溿?br />
10.鍘繪帀BeginScene鍜孍ndScene
榪欎釜瀵逛簬鍥懼艦API紜疄澶氫綑
Dec2005聽sdk閲屾彁渚涚殑鏂囨。璁╀漢寰堝揩鎯沖埌榪欏彧鏄竴涓繃娓$増鏈?br />鍦―XUT鐨凪esh.Create鍑芥暟涓彲浠ョ湅鍒頒竴涓緢鏈夎叮鐨勭幇璞★細
鍒涘緩D3D9瀵硅薄錛屼嬌鐢―3DX9閲岀殑杞藉叆X妯″瀷鏂囦歡鐨勫嚱鏁拌澆鍏鏂囦歡
灝咲3D9鐨勬ā鍨嬫暟鎹漿鎴怐3D10鐨勭被鍨嬨傝繖鏍峰仛鏃犻潪鏄湪鍛婅瘔鎴戜滑涓涓?br />榪欐牱鐨勪俊鎭紝D3D10寰堟湁鍙兘鎻愪緵涓縐嶆柊鐨勬ā鍨嬫牸寮忔潵浣滀負鐮旂┒浣跨敤
銆俈ista鐨勫浘褰㈢郴緇烝valon浠庝竴浜涜棰戜笂鍒嗘瀽錛屼嬌鐢ㄤ簡澶ч噺鐨刋ML錛屾墍浠?br />鏂扮殑妯″瀷鏍煎紡寰堟湁鍙兘浣跨敤XML錛屽茍涓擷鏍煎紡鐨勮В鏋愭帴鍙g‘瀹炰笉鏂逛究銆傝?br />XML鐨勫垎鏋愬櫒鍙互鐢辯涓夋柟鎻愪緵銆備嬌寰楁洿澶氱殑鐮旂┒浜哄憳鑳芥洿鏂逛究鐨勪嬌鐢?br />榪欑鏂版牸寮忋?/font>
欏轟究鎻愪緵涓浜涚緝鍐欏搴旂殑鍚箟,榪欎簺鍦ㄤ竴浜涘嚱鏁板墠緙浼氬嚭鐜?br />IA-Input聽Assembler聽State
SO-Stream聽Output聽State
OM-Output聽Merger聽State
VS-Vertex聽Shader
PS-Pixel聽Shader
GS-Geometry聽Shader
Powered聽by聽Davy.xu
msn:sunicdavy@sina.com


InitApp | 鍒濆鍖栦竴浜涘浘褰㈡帶浠跺拰GUI鐨勬秷鎭鐞嗗嚱鏁?/span> |
OnCreateDevice | 鍒涘緩璁懼鏃剁殑鍥炶皟鍑芥暟錛岀敤浜庡垱寤?/span>D3DPOOL_MANAGED璧勬簮 |
OnResetDevice | 閲嶈璁懼鏃剁殑鍥炶皟鍑芥暟錛岀敤浜庡垱寤?/span>D3DPOOL_DEFAULT璧勬簮 |
OnFrameMove | 鍔ㄧ敾瀹炵幇澶勶紝甯哥敤浜庣煩闃佃漿鎹㈢瓑鎿嶄綔 |
OnFrameRender | 娓叉煋瀹炵幇澶勶紝甯哥敤浜庢覆鏌撳満鏅?/span> |
OnLostDevice | 璁懼涓㈠け鏃剁殑鍥炶皟鍑芥暟錛岄噴鏀劇敱OnResetDevice鍒涘緩鐨勮祫婧?/span> |
OnDestroyDevice | 璁懼鏋愭瀯鏃剁殑鍥炶皟鍑芥暟錛岄噴鏀劇敱OnCreateDevice鍒涘緩鐨勮祫婧?/span> |
IsDeviceAcceptable | 鍒涘緩璁懼鏃剁敤鏉ュ鎵鏈夊彲鐢ㄨ澶囪繘琛岃繃婊ょ殑鍑芥暟 |
ModifyDeviceSettings | 鏇存敼璁懼鏃剁殑鍥炶皟鍑芥暟錛岀敤浜庡疄鐜版洿鏀硅澶囨椂鎵闇鍋氱殑鍏朵粬鎿嶄綔 |
MsgProc | 瀹夋帓鍚勭┖浠跺鐞嗘秷鎭殑欏哄簭 |
OnGUIEvent | 紼嬪簭鎺т歡緇戝畾鐨勬秷鎭鐞嗗洖璋冨嚱鏁?/span> |
浣跨敤dxut妗嗘灦榪涜directx璁捐鏃訛紝鎷瘋礉directx sdk 瀹夎鐩綍\Samples\C++\涓殑Common鏂囦歡鍐呭鍒頒綘鐨勭▼搴忕洰褰曚笅(濡備笅鍥?銆?/p>
main.cpp 婧愭枃浠跺唴瀹瑰涓嬶細
#include聽
<
dxstdafx.h
>
//
--------------------------------------------------------------------------------------
//
聽褰揇irectx3D璁懼琚垱寤哄悗錛岃繖涓洖璋冨嚱鏁伴┈涓婅璋冪敤錛屽洜涓篋3DPOOL_MANAGED璧勬簮鍦ㄨ澶囪閿姣佸悗
//
聽闇瑕侀噸鏂拌杞?榪欓噷鏄渶浣沖垱寤篋3DPOOL_MANAGED璧勬簮鐨勫湴鏂癸紝鍒涘緩鐨勮祫婧愬簲鍦燨nDestroyDevice聽
//
聽鍑芥暟涓攢姣伮犮?br />
//
--------------------------------------------------------------------------------------
HRESULT聽CALLBACK聽OnCreateDevice(聽IDirect3DDevice9
*
聽pd3dDevice,聽
const
聽D3DSURFACE_DESC
*
聽pBackBufferSurfaceDesc,聽
void
*
聽pUserContext聽)
{
聽
return
聽S_OK;
}
//
--------------------------------------------------------------------------------------
//
聽褰揹irect3d璁懼琚浣嶅悗錛岃繖涓嚱鏁扮珛鍗寵璋冪敤錛岃繖閲屾渶濂芥斁緗瓺3DPOOL_DEFAULT聽璧勬簮浠g爜錛屽洜涓鴻繖
//
聽榪欎簺璧勬簮鍦ㄨ澶囦涪澶卞悗闇瑕侀噸鏂拌杞姐傚湪榪欓噷鍒涘緩鐨勮祫婧愬簲璇ュ湪OnLostDevice聽鍑芥暟涓噴鏀?br />
//
--------------------------------------------------------------------------------------
HRESULT聽CALLBACK聽OnResetDevice(聽IDirect3DDevice9
*
聽pd3dDevice,聽
const
聽D3DSURFACE_DESC
*
聽pBackBufferSurfaceDesc,聽
void
*
聽pUserContext聽)
{
聽
return
聽S_OK;
}
//
--------------------------------------------------------------------------------------
//
聽鍦―irect3D璁懼榪涘叆lost鐘舵佸悗鍦↖Direct3DDevice9::Reset聽璋冪敤涔嬪墠璋冪敤姝ゅ嚱鏁幫紝鍦∣nResetDevice聽
//
聽涓垱寤虹殑璧勬簮蹇呴』鍦ㄨ繖閲岄噴鏀撅紝閫氬父鍖呮嫭鎵鏈夌殑D3DPOOL_DEFAULT聽璧勬簮錛?br />
//
--------------------------------------------------------------------------------------
void
聽CALLBACK聽OnLostDevice(聽
void
*
聽pUserContext聽)
{
}
//
--------------------------------------------------------------------------------------聽
//
榪欎釜鍥炶皟鍑芥暟鍦ㄦ瘡甯х殑寮濮嬭璋冪敤錛岃繖涓湪浣犵殑紼嬪簭涓敤鏉ュ鐞嗗満鏅洿鏂版渶濂界殑浣嶇疆錛屼絾涓嶈兘鍖呭惈瀹為檯鐨?br />
//
鍦烘櫙娓叉煋璋冪敤錛屾覆鏌撳伐浣滃簲璇ユ斁鍦∣nFrameRender聽鍥炶皟鍑芥暟涓傚父鐢ㄤ簬鐭╅樀杞崲銆佹憚鍍忔満絳夋搷浣溿?br />
//
--------------------------------------------------------------------------------------
void
聽CALLBACK聽OnFrameMove(聽IDirect3DDevice9
*
聽pd3dDevice,聽
double
聽fTime,聽
float
聽fElapsedTime,聽
void
*
聽pUserContext聽)
{
}
//
--------------------------------------------------------------------------------------
//
姝ゅ洖璋冨嚱鏁板湪姣廎rame鏈鍚庤璋冪敤錛屽湪鍦烘櫙涓婃墽琛屾墍鏈夌殑娓叉煋璋冪敤錛屽綋紿楀彛闇瑕侀噸緇橈紙澶勭悊WM_PAINT娑?br />
//
鎭級鏃舵鍑芥暟涔熶細琚皟鐢紙姝ゆ椂涓嶈皟鐢∣nFrameMove錛夛紝鍦ㄦ鍑芥暟榪斿洖鍚庯紝DXUT灝嗚皟鐢?br />
//
IDirect3DDevice9::Present聽鏉ユ樉紺虹炕杞摼涓笅涓涓紦鍐插尯鍐呭銆?br />
//
--------------------------------------------------------------------------------------
void
聽CALLBACK聽OnFrameRender(聽IDirect3DDevice9
*
聽pd3dDevice,聽
double
聽fTime,聽
float
聽fElapsedTime,聽
void
*
聽pUserContext聽)
{
聽HRESULT聽hr;
聽V(聽pd3dDevice
->
Clear(
0
,聽NULL,聽D3DCLEAR_TARGET聽
|
聽D3DCLEAR_ZBUFFER,聽D3DCOLOR_ARGB(
0
,聽
0
,聽
0
,聽
0
),聽
1.0f
,聽
0
)聽);
聽
if
(SUCCEEDED(pd3dDevice
->
BeginScene()))
聽
{
聽聽
//
鏇存柊鍥懼儚
聽聽pd3dDevice
->
EndScene();
聽}
}
//
--------------------------------------------------------------------------------------聽
//
姝ゅ洖璋冨嚱鏁板湪direct3d璁懼琚攢姣佹椂璋冪敤錛岄氬父鍙戠敓鍦ㄧ▼搴忕粓姝紝鍦∣nCreateDevice聽涓垱寤虹殑璧勬簮錛岃
//
鍦ㄨ繖閲岄噴鏀撅紝閫氬父鍖呭惈鎵鏈夌殑D3DPOOL_MANAGED璧勬簮
//
IDirect3DDevice9::Present聽鏉ユ樉紺虹炕杞摼涓笅涓涓紦鍐插尯鍐呭銆?br />
//
--------------------------------------------------------------------------------------
void
聽CALLBACK聽OnDestroyDevice(聽
void
*
聽pUserContext聽)
{
聽
}
INT聽WINAPI聽WinMain(聽HINSTANCE,聽HINSTANCE,聽LPSTR,聽
int
聽)
{
聽
//
聽璁劇疆鍥炶皟鍑芥暟錛岃繖浜涘嚱鏁板厑璁窪XUT閫氱煡搴旂敤紼嬪簭鏇存崲璁懼錛岀敤鎴瘋緭鍏ュ拰紿楀彛娑堟伅銆?br />
聽
//
聽鍥炶皟鍑芥暟鏄彲閫夌殑錛屽洜姝や綘瑕佸仛鐨勪粎鏄緗綘鎰熷叴瓚g殑浜嬩歡鐨勫洖璋冨嚱鏁般?/span>
聽DXUTSetCallbackDeviceCreated(聽OnCreateDevice聽);
聽DXUTSetCallbackDeviceReset(聽OnResetDevice聽);
聽DXUTSetCallbackDeviceLost(聽OnLostDevice聽);
聽DXUTSetCallbackDeviceDestroyed(聽OnDestroyDevice聽);
聽DXUTSetCallbackFrameRender(聽OnFrameRender聽);
聽DXUTSetCallbackFrameMove(聽OnFrameMove聽);
聽
//
聽鍒濆鍖朌XUT騫跺垱寤烘兂瑕佺殑Win32紿楀彛鍜屽簲鐢ㄧ▼搴忕殑Direct3D璁懼銆傝皟鐢ㄨ繖浜?br />
聽
//
聽鍙夊嚱鏁頒腑鐨勬瘡涓涓紝姝ゅ瀹冧滑鍏佽浣犺緗嚑涓夐」鏉ユ帶鍒舵鏋剁殑琛屼負銆?/span>
聽DXUTInit(聽TRUE,聽TRUE,聽TRUE聽);
聽
//
directx聽緙栫爜鏄痷nicode鐜錛屾墍浠ュ瓧絎︿覆涔嬪墠瑕佸姞聽L聽銆?/span>
聽DXUTCreateWindow(聽L
"
Welcome聽to聽topameng.spaces.live.com
"
聽);
聽DXUTCreateDevice(聽D3DADAPTER_DEFAULT,聽TRUE,聽
640
,聽
480
聽);
聽
//
聽閫氳繃DXUT鏉ュ鐞嗘秷鎭驚鐜茍鍒嗘淳娓叉煋璋冪敤銆傚綋鍦ㄧ┖闂叉椂闂村拰澶勭悊紿楀彛娑堟伅鐨?br />
聽
//
聽鏃墮棿闂撮殧鏃訛紝妗嗘灦灝嗚皟鐢∣nFrameMove鍜孫nFrameRender鍥炶皟鍑芥暟銆?/span>
聽DXUTMainLoop();
聽
return
聽DXUTGetExitCode();
}
聽
![D3D_DEBUG_INFO1[1].gif](http://m.shnenglu.com/images/cppblog_com/mybios/ArticlePics/D3D_DEBUG_INFO1[1].gif)
寮鍚皟璇曟椂鏌ョ湅D3D瀵硅薄鐨勬儏鍐?/strong>
聽
褰?Direct3D 璋冭瘯妯″紡寮鍚箣鍚庯紝浣犲彲浠ュ湪浠諱綍鏃跺欐煡鐪嬪璞$殑璋冪敤鍫嗘爤銆傝繖浼氬鑷翠綘鐨勭▼搴忛潪甯告參錛屼絾鏄彲浠ヤ嬌鐢ㄦ鍔熻兘媯鏌ヨ祫婧愭硠婕忥紙鍐呭瓨娉勬紡鐨勪竴縐嶏級銆傚紑鍚皟鐢ㄥ爢鏍堬紝璁劇疆榪欎釜娉ㄥ唽琛ㄩ敭鍊間負1鍗沖彲錛?/p>
\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Direct3D\\ D3D9Debugging\\EnableCreationStack
寮鍚疍3D璋冭瘯妯″紡錛岀劧鍚庨噸寤轟綘鐨勫伐紼嬶紝緋葷粺灝嗕細緇欎綘璁塊棶榪欎釜闄勫姞鐨勫彉閲忥細
聽 LPCWSTR CreationCallStack;
榪欎釜鍙橀噺瀛樺偍鐫姣忔鍒涘緩瀵硅薄鏃剁殑璋冪敤鍫嗘爤銆傝繖浼氬鑷翠綘鐨勭▼搴忛潪甯告參錛屼絾鏄彲浠ヤ嬌鐢ㄦ鍔熻兘媯鏌ヨ祫婧愭硠婕忋?/p>
聽
聽聽聽聽HWND聽hWnd聽
=
聽FindWindowEx(GetDesktopWindow()聽,聽
0
聽,聽
"
Progman
"
聽,聽
"
Program聽Manager
"
);
聽聽聽聽hWnd聽
=
聽FindWindowEx(hWnd聽,聽
0
聽,聽
"
SHELLDLL_DefView
"
聽,聽
0
);
聽聽聽聽hWnd聽
=
聽FindWindowEx(hWnd聽,聽
0
聽,聽
"
SysListView32
"
聽,聽
"
FolderView
"
);
聽聽聽聽
//
聽鍒濆鍖柭燚3D聽璁懼
聽聽聽聽InitD3D(hWnd);
//聽鏄劇ず鍦ㄥ乏涓婅錛?28脳128瀹?/span>
聽聽聽聽聽聽聽聽RECT聽rect;
聽聽聽聽聽聽聽聽rect.left聽=聽0;
聽聽聽聽聽聽聽聽rect.right聽=聽128;
聽聽聽聽聽聽聽聽rect.top聽=聽0;
聽聽聽聽聽聽聽聽rect.bottom聽=聽128;
聽聽聽聽聽聽聽聽//聽鏄劇ず
聽聽聽聽聽聽聽聽g_pd3dDevice->Present(0聽,聽&rect聽,聽0聽,聽0);
#include聽<d3dx9.h>
#define聽SAFE_RELEASE(o)聽{if(o){o->Release();o=0;}}
LPDIRECT3D9聽g_pD3D聽=聽0;
LPDIRECT3DDEVICE9聽g_pd3dDevice聽=聽0;
//聽鍒涘緩D3D璁懼
HRESULT聽InitD3D(HWND聽hWnd)

{
聽聽聽聽//聽鍒涘緩D3D聽SDK
聽聽聽聽if(NULL聽==聽(g_pD3D聽=聽Direct3DCreate9(D3D_SDK_VERSION)))
聽聽聽聽聽聽聽聽return聽E_FAIL;

聽聽聽聽D3DPRESENT_PARAMETERS聽d3dpp;
聽聽聽聽memset(&d3dpp聽,聽0聽,聽sizeof(d3dpp));
聽聽聽聽d3dpp.Windowed聽=聽true;
聽聽聽聽d3dpp.BackBufferFormat聽=聽D3DFMT_UNKNOWN;
聽聽聽聽d3dpp.SwapEffect聽=聽D3DSWAPEFFECT_DISCARD;
聽聽聽聽RECT聽rect;
聽聽聽聽GetClientRect(hWnd聽,聽&rect);
聽聽聽聽d3dpp.BackBufferWidth聽=聽rect.right聽-聽rect.left;
聽聽聽聽d3dpp.BackBufferHeight聽=聽rect.bottom聽-聽rect.top;
聽聽聽聽if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT
聽聽聽聽聽聽聽聽,聽D3DDEVTYPE_HAL
聽聽聽聽聽聽聽聽,聽hWnd
聽聽聽聽聽聽聽聽,聽D3DCREATE_HARDWARE_VERTEXPROCESSING
聽聽聽聽聽聽聽聽,聽&d3dpp聽,聽&g_pd3dDevice
聽聽聽聽聽聽聽聽)))
聽聽聽聽聽聽聽聽return聽E_FAIL;
聽聽聽聽
聽聽聽聽return聽S_OK;
}
//聽娓叉煋
void聽Render()

{
聽聽聽聽//聽娓呯┖鎴愯摑鑹?/span>
聽聽聽聽g_pd3dDevice->Clear(0聽,聽0聽,聽D3DCLEAR_TARGET聽,聽D3DCOLOR_XRGB(0聽,聽0聽,聽255)聽,聽1.0f聽,聽0);
聽聽聽聽//聽鏄劇ず
聽聽聽聽g_pd3dDevice->Present(0聽,聽0聽,聽0聽,聽0);
}
//聽娓呴櫎鍗犳湁鐨勫唴瀛?/span>
void聽CleanUp()

{
聽聽聽聽SAFE_RELEASE(g_pD3D);
}
//聽娑堟伅澶勭悊
LRESULT聽WINAPI聽MsgProc(HWND聽hWnd聽,聽UINT聽message聽,聽WPARAM聽wParam聽,聽LPARAM聽lParam)

{
聽聽聽聽switch(message)
聽聽聽聽
{
聽聽聽聽case聽WM_DESTROY:
聽聽聽聽聽聽聽聽CleanUp();
聽聽聽聽聽聽聽聽PostQuitMessage(0);
聽聽聽聽聽聽聽聽return聽0;
聽聽聽聽聽聽聽聽break;
聽聽聽聽default:
聽聽聽聽聽聽聽聽break;
聽聽聽聽}
聽聽聽聽return聽DefWindowProc(hWnd,聽message聽,聽wParam聽,聽lParam);
}
//聽Windows鍏ュ彛
int聽WINAPI聽WinMain(IN聽HINSTANCE聽hInstance,聽IN聽HINSTANCE聽hPrevInstance,聽IN聽LPSTR聽lpCmdLine,聽IN聽int聽nShowCmd)

{
聽聽聽聽WNDCLASS聽wndClass;
聽聽聽聽memset(&wndClass聽,聽0聽,聽sizeof(wndClass));
聽聽聽聽wndClass.hInstance聽=聽hInstance;
聽聽聽聽wndClass.lpszClassName聽=聽"Tutorial01";
聽聽聽聽wndClass.style聽=聽0;
聽聽聽聽wndClass.lpfnWndProc聽=聽MsgProc;
聽聽聽聽//聽娉ㄥ唽紿楀彛綾?/span>
聽聽聽聽RegisterClass(&wndClass);
聽聽聽聽//聽鍒涘緩紿楀彛
聽聽聽聽HWND聽hWnd聽=聽CreateWindow("Tutorial01"聽,聽"Tutorial01聽:聽CreateDevice"聽,聽WS_OVERLAPPEDWINDOW聽
聽聽聽聽聽聽聽聽,聽0聽,聽0聽,聽512聽,聽512聽,聽GetDesktopWindow()
聽聽聽聽聽聽聽聽,聽0聽,聽wndClass.hInstance聽,聽0);
聽聽聽聽//聽鏄劇ず紿楀彛
聽聽聽聽ShowWindow(hWnd聽,聽SW_SHOWDEFAULT);
聽聽聽聽UpdateWindow(hWnd);
聽聽聽聽if(SUCCEEDED(InitD3D(hWnd)))
聽聽聽聽
{
聽聽聽聽聽聽聽聽//聽娑堟伅寰幆
聽聽聽聽聽聽聽聽MSG聽msg;
聽聽聽聽聽聽聽聽memset(&msg聽,聽0聽,聽sizeof(msg));
聽聽聽聽聽聽聽聽while(msg.message聽!=聽WM_QUIT)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽if(PeekMessage(&msg聽,聽0聽,聽0聽,聽0聽,聽PM_REMOVE))
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽DispatchMessage(&msg);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽TranslateMessage(&msg);
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Render();
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽CleanUp();
聽聽聽聽UnregisterClass("Tutorial01"聽,聽wndClass.hInstance);
聽聽聽聽return聽0;
}

