2.1 緗戞牸钂欑毊淇℃伅錛?/font>棣栧厛錛屽湪Mesh{}鍗曞厓涓紝鍦ㄥ師鏈夌殑鏅氱綉鏍奸《鐐規暟鎹熀紜涓婏紝鏂板浜哫SkinMeshHeader{}緇撴瀯錛屼互鍙婂涓猄kinWeights{}緇撴瀯銆傜敤浠ユ弿榪板悇涓楠肩殑钂欑毊淇℃伅銆?/p>
鍏朵腑錛孹SkinMeshHeader鏄繪嫭錛屼婦涓瀹炰緥錛屽涓嬶細
XSkinMeshHeader { 2,//涓涓《鐐瑰彲浠ュ彈鍒伴楠煎獎鍝嶇殑鏈澶ч楠兼暟,鍙敤浜庤綆楀叡鍚屼綔鐢ㄦ椂鍑忓皯閬嶅巻嬈℃暟 4,//涓涓笁瑙掗潰鍙互鍙楀埌楠ㄩ褰卞搷鐨勬渶澶ч楠兼暟銆傝繖涓暟瀛楀紜歡欏剁偣娣峰悎璁$畻鎻愬嚭浜嗗熀鏈姹傘?br>35 //褰撳墠Mesh鐨勯楠兼繪暟銆?br>}
鐢變簬姣忎釜楠ㄩ鐨勮挋鐨俊鎭兘闇瑕佺敤SkinWeights緇撴瀯鍘繪弿榪幫紝鎵浠ユ湁澶氬皯鍧楅楠鹼紝鍦∕esh涓氨鏈夊灝戜釜SkinWeights瀵硅薄銆?br>娉ㄦ剰錛屼竴鑸妸SkinWeights瑙嗕綔Mesh鐨勪竴閮ㄥ垎銆傝繖縐峂esh鍙堢ОSkinned Mesh (钂欑毊緗戞牸)
SkinWeights 緇撴瀯濡備笅錛?br>{ STRING transformNodeName; //楠ㄩ鍚?br> DWORD nWeights; //鏉冮噸鏁扮粍鐨勫厓绱犱釜鏁幫紝鍗寵楠ㄩ鐩稿叧鐨勯《鐐逛釜鏁?br> array DWORD vertexIndices[nWeights];//鍙楄楠ㄩ鎺у埗鐨勯《鐐圭儲寮曪紝瀹為檯涓婂畾涔変簡璇ラ楠肩殑钂欑毊 array float weights[nWeights]; //钂欑毊鍚勯《鐐圭殑鍙楁湰楠ㄩ褰卞搷鐨勬潈鍊?br> Matrix4x4 matrixOffset; //楠ㄩ鍋忕Щ鐭╅樀錛岀敤鏉ヤ粠鍒濆Mesh鍧愭爣錛屽弽鍚戣綆楅《鐐瑰湪瀛愰楠煎潗鏍囩郴涓殑鍒濆鍧愭爣銆?br>} 鍦ㄦ湁鐨勪功涓紝鎶婁笂闈㈢殑matrixOffset鍙楠兼潈閲嶇煩闃碉紝鏄笉鎭板綋鐨勩傚簲璇ョО涓洪楠煎亸縐葷煩闃墊瘮杈冨悎閫傘?/p>
[闂] 鍦ㄦ暣涓姩鐢昏繃紼嬩腑錛屽瓙楠ㄩ榪愬姩鐭╅樀鐨勬暟鍊兼槸涓嶆柇鍙樺寲鐨勩備笂闈㈢殑楠ㄩ鍋忕Щ鐭╅樀鍙樺寲鍚楋紵鏈夋病鏈夊繀瑕侀噸鏂拌綆楋紵瀹冨湪浠涔堟椂鍊欎嬌鐢紵 絳旓細鍚勯楠肩殑鍋忕Щ鐭╅樀matrixOffset涓撻棬鐢ㄦ潵浠庡師濮婱esh鏁版嵁璁$畻鍑哄悇欏剁偣鐩稿浜庨楠煎潗鏍囩郴鐨勫師濮嬪潗鏍囥傚湪緇樺埗鍓嶏紝鎶婂畠涓庡綋鍓嶅彉鎹㈢煩闃電浉涔橈紝灝卞彲浠ュ緱鍒拌楠ㄩ鐨勫綋鍓嶇殑鏈緇堝彉鎹㈢煩闃點?鎬諱箣錛岄楠煎亸縐葷煩闃墊槸涓庡師濮婱esh欏剁偣鏁板肩浉鍏寵仈鐨勶紝鍦ㄦ暣涓姩鐢昏繃紼嬩腑鏄笉鍙樼殑錛屼篃涓嶅簲璇ュ彉銆傚湪鍔ㄧ敾榪囩▼涓彉鍖栨槸褰撳墠楠ㄩ鍙樻崲鐭╅樀錛屽彲鐢?X涓殑AnimatonKey涓殑鍚勬椂鍒葷煩闃靛緱鍒般傝繖涓煩闃典箻娉曞湪紺轟緥涓殑瀵瑰簲浠g爜濡備笅錛?br>D3DXMatrixMultiply( &matTemp, &pMeshContainer->pBoneOffsetMatrices[iMatrixIndex], pMeshContainer->ppBoneMatrixPtrs[iMatrixIndex] );
鍗籌紝D3DXMatrixMultiply(杈撳嚭鏈緇堜笘鐣岀煩闃? 璇ラ楠肩殑鍋忕Щ鐭╅樀, 璇ラ楠肩殑鍙樻崲鐭╅樀)
2.2 楠ㄩ灞傛淇℃伅
鍦╔鏂囦歡涓紝Frame鏄熀鏈殑緇勬垚鍗曞厓銆傚張縐版鏋禙rame銆?涓涓?x鍙互鏈夊涓狥rame銆?娉ㄦ剰姝ゅ鐨凢rame涓嶆槸甯э紝涓庡撫娌′粈涔堝叧緋?
妗嗘灦Frame鍏佽宓屽錛岃繖鏍峰氨瀛樺湪鐖跺瓙妗嗘灦浜嗐傝屽茍鍒楃殑妗嗘灦錛岀О涓哄厔寮熸鏋躲傝繖涓ょ鍏崇郴緇勫悎鍦ㄤ竴璧鳳紝鍗沖彲浠ョ旱娣憋紝鍙堝彲浠ュ茍鍒楋紝褰㈡垚涓縐嶅眰嬈$粨鏋勩傝繖縐嶇粨鏋勶紝鍙敤浜屽弶鏍戞弿榪般?/p>
姣忎釜妗嗘灦緇撴瀯鐨勬渶鍓嶉潰錛屾湁涓涓狥rameTransformMatrix鐭╅樀鏁版嵁錛屾弿榪頒簡璇ユ鏋剁浉瀵逛簬鐖舵鏋剁殑鍙樻崲鐭╅樀銆備篃灝辨槸璇達紝璇ユ鏋朵腑鐨勫潗鏍囷紝涓庤鐭╅樀鐩鎬箻錛屽彲杞崲涓虹埗妗嗘灦鍧愭爣緋葷殑鍧愭爣銆?br>榪欑灞傛緇撴瀯錛屼嬌寰梄鏂囦歡鑳芥弿榪拌澶氬鏉傜殑鐗╀綋銆傚鍦板艦鍦烘櫙銆?/p>
鍦ㄩ楠煎姩鐢繪枃浠朵腑錛屾鏋剁粨鏋勫彲鐩存帴鎷挎潵鎻忚堪浜虹墿楠ㄩ鐨勫眰嬈$粨鏋勩傛鏋剁殑鍚嶅瓧閫氬父涓哄搴旂殑楠ㄩ鍚嶃?br>濡?#8220;宸︿笂鑷?>宸﹀墠鑷?>鎵嬫帉->鎵嬫寚”灝卞艦鎴愪竴涓埗瀛愰楠奸摼銆傝屽乏涓婅噦涓庡彸涓婅噦鏄茍琛屽叧緋匯?/p>
鏁版嵁紺轟緥錛?D:\D9XSDK\Samples\Media\tiny.x
Frame ...{ .....
Frame Bip01_R_Calf { //瀛愰楠?br> FrameTransformMatrix { 1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,-0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,119.231522,0.000021,-0.000011,1.000000;; }
Frame Bip01_R_Foot {//--瀛欏瓙楠ㄩ FrameTransformMatrix { 0.988831,0.124156,0.082452,0.000000,-0.122246,0.992109,-0.027835,0.000000,-0.085257,0.017445,0.996206,0.000000,119.231476,-0.000039,0.000023,1.000000;; }
....緙╄繘 } }
[闂] 鏌ョ湅紺轟緥tiny.x鏂囦歡錛屽彂鐜板彧鏈夋牴妗嗘灦涓嬫湁涓涓狹esh錛屽寘鍚簡鎵鏈夐《鐐逛俊鎭傚叾瀹冨悇涓狥rame閮芥病鏈塎esh鏁版嵁銆傛庝箞鐞嗚В錛?br>絳旓細 涓鑸潵璇達紝姣忎釜鍔ㄧ敾鏂囦歡鍙湁涓涓狹esh緗戞牸錛屽寘鍚墿浣撴墍鏈夐《鐐逛俊鎭?br> 鍏跺畠Frame錛屽彧鏄熺敤鏉ユ弿榪板悇楠ㄩ鐨勫眰嬈′俊鎭?娌″繀瑕佸啀瀹氫箟楠ㄩ緗戞牸銆傛瘡鍧楅楠煎搴旂殑钂欑毊欏剁偣淇℃伅錛岀敱鏍筂esh涓殑鐩稿簲楠ㄩ鐨凷kinWeights涓挋鐨《鐐圭儲寮曟弿榪扮殑銆傚湪鍔ㄧ敾榪囩▼涓紝鍚勪釜欏剁偣鐨勬柊鍧愭爣錛岃鍊熷姪SkinWeights涓殑欏剁偣绱㈠紩鏉ヨ繘琛岄噸鏂拌綆椼?/p>
2.3 鍔ㄧ敾淇℃伅錛?/font> 鐢變竴緋誨垪AnimatonKey緇勬垚錛屾暟鎹ず渚嬪涓嬶細
AnimationKey { 4;--鍔ㄧ敾綾誨瀷 4琛ㄧず鐭╅樀 62; --鍔ㄧ敾甯ф暟錛屽嵆涓嬮潰鐭╅樀涓暟 0;16;1.000000,-0.000691,-0.000000,0.000000,0.000691,1.000000,0.000000,0.000000,0.000000,-0.000000,1.000000,0.000000,119.231514,-0.000005,0.000001,1.000000;;, 80;16;0.992696,-0.120646,-0.000000,0.000000,0.120646,0.992696,0.000000,0.000000,-0.000000,-0.000000,1.000000,0.000000,119.231514,0.000002,-0.000002,1.000000;;,
..涓婇潰綰㈡暟瀛楄〃紺烘椂鍒籺ick,鍏版暟瀛楄〃紺烘暟鍊肩殑涓暟銆?br> ...鍏跺畠鍚勬椂鍒葷煩闃?..
{ Bip01_R_Calf }--瀵瑰簲鐨勯楠煎璞″紩鐢?br> }
娉ㄦ剰錛?br>(1)姣忓潡楠ㄩ閮芥湁涓涓狝nimationKey{}. (2)鍦ㄤ笂闈㈡暟鎹粨鏋勪腑錛屼富瑕佷繚瀛樹簡鍚勫吀鍨嬫椂鍒葷殑璇ラ楠肩浉瀵逛簬鐖剁殑鍙樻崲鐭╅樀. (3)鍦?鏃跺埢鐨勭煩闃碉紝涓庤楠ㄩ瀵瑰簲鐨勫墠闈㈢殑Frame鎵瀵瑰簲鐨勭煩闃墊槸鐩稿悓鐨勩傚Frame Bip01_R_Calf{}涓殑鍙樻崲鐭╅樀錛屼笌Bip01_R_Calf鎵瀵瑰簲鐨凙nimationKey 鐨勭0鏃跺埢鐭╅樀鏄竴鏍風殑銆傝繖璇存槑錛屽湪浠ュ悗鍔ㄧ敾榪愯鏃訛紝DX浼氭彁渚涗竴縐嶅姛鑳斤紝鐢ˋnimatonKey涓殑瀵瑰簲鏁版嵁鍒鋒柊鍒濆鐨勫彉鎹㈢煩闃?涔熷彲鑳藉惎鐢ㄥ叧閿撫鎻掑肩畻娉?銆傝繖涓姛鑳藉搴斾簬紺轟緥涓殑m_pAnimController->SetTime(...)璇彞銆?/p>
涓?鎬庢牱浠嶺鏂囦歡鍔犺澆楠ㄩ鍔ㄧ敾淇℃伅錛?/strong>3.1 璐熻矗鍔犺澆鐨勫嚱鏁幫細 鍙兘鏈夊縐嶅姞杞芥柟寮忥紝鍦ㄦ浠DK涓殑紺轟緥涓哄噯錛屽彊榪頒竴縐嶆爣鍑嗗姞杞芥柟寮忥紝闇瑕佺敤鍒癉X鍑芥暟D3DXLoadMeshHierarchyFromX(),鍑芥暟瀛楅潰鎰忔濇槸璇誨彇Mesh灞傛淇℃伅銆?br>HRESULT WINAPI D3DXLoadMeshHierarchyFromX( LPCSTR Filename, //.x鏂囦歡鍚?br> DWORD MeshOptions, //Mesh閫夐」錛屼竴鑸塂3DXMESH_MANAGED LPDIRECT3DDEVICE9 pD3DDevice, //鎸囧悜D3D璁懼Device LPD3DXALLOCATEHIERARCHY pAlloc, //鑷畾涔夋暟鎹鍣?/strong> LPD3DXLOADUSERDATA pUserDataLoader, //涓鑸塏ULL LPD3DXFRAME *ppFrameHierarchy, //榪斿洖鏍笷rame鎸囬拡錛屾寚鍚戜唬琛ㄦ暣涓鏋剁殑Frame灞傛緇撴瀯 LPD3DXANIMATIONCONTROLLER *ppAnimController //榪斿洖鐩稿簲鐨勫姩鐢繪帶鍒跺櫒 );
榪欎釜鍑芥暟鍚庨潰鐨勪袱涓緭鍑哄弬鏁板緢閲嶈錛屼篃寰堝ソ鐞嗚В錛屼絾杈撳叆鍙傛暟涓殑鑷畾涔夋暟鎹鍣ㄦ槸鎬庝箞鍥炰簨鍛紵 鍘熸潵錛岄壌浜庡姩鐢繪暟鎹殑澶嶆潅鎬э紝闇瑕佷綘閰嶅悎瀹屾垚鍔犺澆榪囩▼銆傛瘮濡備綘鏄惁鐢ㄥ埌鑷畾涔夋墿灞曠粨鏋勶紝Mesh絳夋暟鎹繚瀛樺湪鍝噷錛屾庢牱浣跨敤鎴瘋嚜宸卞垱寤哄鍣紝鑷繁鍐沖畾鍗歌澆絳夌瓑銆? DX鎻愪緵浜咺D3DXALLOCATEHIERARCHY鎺ュ彛錛屾彁渚涗簡榪欎釜鑷畾涔夌殑鏈轟細錛屼綘閲嶈澆榪欎釜鎺ュ彛鐨勮櫄鍑芥暟錛屽湪鍔犺澆榪囩▼涓紝瀹冨氨鍍忓洖璋冨嚱鏁伴偅鏍瘋繍浣溿?/p>
浣犻渶瑕佸儚涓嬮潰榪欐牱寤虹珛涓涓嚜瀹氫箟鏁版嵁瀹瑰櫒綾伙細 class CAllocateHierarchy: public ID3DXAllocateHierarchy { public: STDMETHOD(CreateFrame)(THIS_ LPCTSTR Name, LPD3DXFRAME *ppNewFrame); STDMETHOD(CreateMeshContainer)(THIS_ LPCTSTR Name, LPD3DXMESHDATA pMeshData, LPD3DXMATERIAL pMaterials, LPD3DXEFFECTINSTANCE pEffectInstances, DWORD NumMaterials, DWORD *pAdjacency, LPD3DXSKININFO pSkinInfo, LPD3DXMESHCONTAINER *ppNewMeshContainer); STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree); STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerBase); CAllocateHierarchy(CMyD3DApplication *pApp) :m_pApp(pApp) {} public: CMyD3DApplication* m_pApp; };
[闂] 涓婇潰鐨凷TDMETHOD鏄粈涔堟剰鎬濓紵 絳旓細鐩稿綋浜巚irtual HRESULT __stdcall 鐨勫畯銆?lt;璇勮> 鍥犱負榪欑綾昏涓嶥3D鐨凜OM鎺ュ彛鎵撲氦閬擄紝涓嶄粎浠呭湪C++鍐呴儴浣跨敤錛屾墍浠ワ紝鎵鏈夌被鏂規硶蹇呴』鍋氭垚stdcall鐨勶紝鍙澶栧紑鏀劇殑銆?br>#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method #define STDMETHODCALLTYPE __stdcall 榪欐牱褰撳啓涓涓嚱鏁癝TDMETHOD(op1(int i)) 灞曞紑鍚庢垚涓猴細 virtual HRESULT __stdcall op1(int i);
3.2 鑷畾涔夋暟鎹鍣ㄤ互鍙婂叿浣撶殑璇誨彇榪囩▼: 鏍規嵁.X鏂囦歡錛屽湪鍔犺澆榪囩▼涓紝涓昏鏈変袱鏂歸潰鏁版嵁闇瑕佷繚瀛橈紝涓涓槸楠ㄦ灦Frame淇℃伅錛屼竴涓槸緗戞牸钂欑毊Mesh淇℃伅銆傝繖涓や釜淇℃伅淇濆瓨鍦ㄥ涓嬬粨鏋勪腑銆?/p>
妗嗘灦淇℃伅(瀵瑰簲浜庨楠? typedef struct _D3DXFRAME { LPSTR Name; D3DXMATRIX TransformationMatrix; //鏈楠肩殑杞崲鐭╅樀
LPD3DXMESHCONTAINER pMeshContainer; //鏈楠兼墍瀵瑰簲Mesh鏁版嵁
struct _D3DXFRAME *pFrameSibling; //鍏勫紵楠ㄩ struct _D3DXFRAME *pFrameFirstChild; //瀛愰楠?br>} D3DXFRAME, *LPD3DXFRAME;
鑷畾涔夋暟鎹鍣?鍏舵暟鎹潵婧愮敱涓婇潰鎺ュ彛鐨凜reateMeshContainer()鍑芥暟鎻愪緵 typedef struct _D3DXMESHCONTAINER { LPSTR Name; //瀹瑰櫒鍚?br> D3DXMESHDATA MeshData; //Mesh鏁版嵁,鍙垱寤篠kinMesh鍙栦唬榪欎釜Mesh LPD3DXMATERIAL pMaterials; //鏉愯川鏁扮粍 LPD3DXEFFECTINSTANCE pEffects; DWORD NumMaterials;//鏉愯川鏁?br> DWORD* pAdjacency; //閭繪帴涓夎褰㈡暟緇?br> LPD3DXSKININFO pSkinInfo; //钂欑毊淇℃伅,鍏朵腑鍚?x涓殑鍚勪釜skinweight钂欑毊欏剁偣绱㈠紩鍙婂悇楠ㄩ鍋忕Щ鐭╅樀絳夈?br> struct _D3DXMESHCONTAINER *pNextMeshContainer; } D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER;
[璇勮] .鍦ㄥ姩鐢繪枃浠朵腑錛屾鏋墮氬父鐢ㄦ潵鎻忚堪楠ㄩ銆傚彲浠ユ妸Frame瑙嗗仛楠ㄩ錛屾墍浠ヤ笉緇嗗姞鍖哄垎銆?br>.鍦ㄤ笂闈3DXFRAME緇撴瀯涓?pFrameSibling, pFrameFirstChild涓や釜鎸囬拡錛屽父鐢ㄤ簬閫掑綊鍑芥暟涓紝閬嶅巻鏁翠釜楠ㄦ灦銆?br>.鍦―3DXFRAME緇撴瀯涓湁涓涓猵MeshContainer鎸囬拡錛岄毦閬撴鏋朵笌Mesh鏄竴涓瀵瑰簲鐨勫悧錛?br>鏈変竴涓鏋?楠ㄩ)灝辨湁涓涓狹esh鍚楋紵鎬庝箞.X鏂囦歡涓彧鏈変竴涓狹esh?闅鵑亾鍔犺澆鏃舵媶寮瀛樻斁? 絳?浠嶥3DXFrame緇撴瀯涓婄湅錛屾瘡涓狥rame閮芥湁涓涓猵MeshContainer鎸囬拡銆傝繖灝辨湁涓夌瑙i噴錛?br> 絎竴縐嶏紝鍔犺澆鍒板唴瀛樺悗鎵鏈夌殑pMeshContainer閮芥寚鍚戝悓涓涓叏灞Mesh 絎簩縐嶏紝鍔犺澆鍒板唴瀛樺悗錛屽彧鏈変竴涓富妗嗘灦鐨刾MeshContainer涓嶄負絀猴紝鍏跺畠Frame鐨刾MeshContainer鍧囦負NULL錛屽洜涓哄湪.X涓紝瀹冧滑娌℃湁瀹氫箟鑷繁鐨凪esh 絎笁縐嶏紝鍔犺澆鍒板唴瀛樺悗錛孌3D灝哅esh鎷嗗垎錛屽垎寮鍒板悇楠ㄩ鎵瀵瑰簲鐨凢rame錛屾瘡涓狥rame閮芥湁鑷繁鐨凪esh銆?br> 榪欎釜闂鎴戜互鍓嶄篃涓嶆槸寰堟竻妤氾紝閫氳繃鏌ョ湅紺轟緥婧愮爜鍙婅窡韙彂鐜幫紝姝g‘瑙i噴搴旇鏄2縐嶃傚敮涓鐨勪竴涓叏灞Mesh瀛樻斁鍦‵rame "body"涓嬬殑鏃犲悕Frame涓傝屽叾瀹僃rame鐢變簬娌℃湁鑷繁涓撻棬鐨凪esh鑰屾寚鍚慛ULL. 搴旇澶ц嚧濡傛銆傝繖涓棶棰樹箣鎵浠ヨ浜哄洶緇曪紝鏄洜涓轟粠鍚庣畫浠g爜涓婄湅錛屽湪娓叉煋DrawFrame鏃訛紝鏄亶鍘嗘瘡涓涓猣rame鍒嗗埆緇樺埗瀹冧滑瀵瑰簲鐨凪esh. 濡傛灉瀵瑰簲浜庡悓涓涓猰esh錛屽氨緇樺埗澶氶亶銆傚鏋滃搴斿悇鑷猰esh錛岄偅涔堝彉鎹㈢煩闃墊庝箞緇勭粐榪愮畻絳夌瓑銆傛墍浠ワ紝鏍規嵁絎簩縐嶈В閲婏紝鐢變簬鍙湁涓涓猵MeshContainer涓嶄負NULL錛屾墍浠ュ弬涓庣粯鍒跺強钂欑毊鐨勫彧鏈夎繖涓涓狹eshContainer錛屼漢浣撴墍鏈夐《鐐規暟鎹強钂欑毊淇℃伅閮藉湪榪欎釜mesh涓?br>鎵浠ワ紝璇誨彇tiny.x鏂囦歡鍚庯紝浼氫駭鐢熷涓狣3DXFRAME瀵硅薄錛屼絾鍙湁涓涓狣3DXMESHCONTAINER瀵硅薄銆?/p>
鍦ㄧず渚嬩唬鐮佺殑CMyD3DApplication::InitDeviceObjects()涓紝鏈? hr = D3DXLoadMeshHierarchyFromX(strMeshPath, D3DXMESH_MANAGED, m_pd3dDevice, &Alloc, NULL, &m_pFrameRoot, &m_pAnimController); if (FAILED(hr)) return hr; 鍏朵腑鐨凙lloc鏄氨鑷畾涔夌殑鏁版嵁瀹瑰櫒瀵硅薄銆俶_pFrameRoot鏄牴楠ㄩ錛屽閬嶅巻寰堥噸瑕併俶_pAnimController鏄姩鐢繪帶鍒跺櫒錛屽鍒鋒柊鐭╅樀寰堥噸瑕併?/p>
浣犲湪榪愯瀹岃繖鍙ヨ瘽鍚庯紝涓嬩竴涓柇鐐癸紝瑙傚療m_pFrameRoot錛屼細鍙戠幇濡備笅鍐呭錛?/p>
m_pFrameRoot 0x00c59380 {Name=0x00c53630 "Scene_Root" .....} //鏍規鏋?br>pMeshContainer 0x00000000 pFrameSibling 0x00000000 pFrameFirstChild 0x00c59428 {Name=0x00c53ca8 "body" pMeshContainer=0x00000000...}//瀛愭鏋?楠ㄩbody +--- pMeshContainer 0x00000000 +--- pFrameSibling 0x01419f00 {Name=0x00c5ffd8 "Box01" pMeshContainer=0x00000000 ...}//鍏勫紵妗嗘灦 +--- pFrameFirstChild 0x00c594d0 {Name=0x00000000 pMeshContainer=0x00c59828 //瀛愭鏋?--璇ユ鏋跺氨鏄?x涓惈鏈夊敮涓鍏ㄥ眬Mesh鐨勬棤鍚嶆鏋?/p>
鍙,鍦ㄥ唴瀛樹腑鐨凢rame甯冨眬鏄笌.x涓竴涓瀵瑰簲鐨勩傞櫎浜唒FrameFirstChild 0x00c594d0榪欎釜鍦版柟鐨凢rame涓殑pMeshContainer涓嶄負絀猴紝鍏跺畠妗嗘灦鐨勮繖涓猰esh鎸囬拡閮芥槸絀哄箋?br>鍙﹀涓鐐瑰彲浠ョ湅鍑猴紝騫朵笉鏄瘡涓狥rame閮藉灝變竴鍧楅楠鹼紝鏈夌殑鏄埆鐨勭敤閫斻備篃灝辨槸璇碏rame瀵硅薄鐨勪釜鏁板彲鑳藉浜庨楠兼暟銆?/p>
3.3 鍒嗘瀽CAllocateHierarchy綾?/font> 涓嬮潰緇х畫鐮旂┒鑷畾涔夋暟鎹鍣–AllocateHierarchy錛岄【鍚嶆濅箟錛岃綾繪槸鍦ㄥ姞杞借繃紼嬩腑鑷鍒嗛厤灞傛鏁版嵁絀洪棿銆傚畠鏈?涓垚鍛橈紝閮芥槸閲嶈澆D3D鐨勬帴鍙h櫄鍑芥暟銆?br>瀹冪殑鎴愬憳CreateFrame()鏄敤鏉ュ垱寤篋3DXFrame瀵硅薄鐨勶紝鑰孋reateMeshContainer()鏄敤鏉ュ垱寤篗esh鏁版嵁瀵硅薄鐨勩備綘鍙互鍦ㄨ繖涓や釜鍑芥暟涓笅鏂偣錛屽彂鐜癈reateFrame浼氳繍琛屽嬈★紝鑰孋reateMeshContainer鍙繍琛屼竴嬈★紝鍐嶆楠岃瘉浜嗕笂闈㈢殑璇存硶銆?/p>
鍊煎緱娉ㄦ剰鐨勬槸錛岀ず渚嬪涓婇潰鐨凞3DXFRAME錛孌3DXMESHCONTAINER涓や釜緇撴瀯鍋氫簡鎵╁睍錛屽垎鍒唬涔嬩互D3DXFRAME_DERIVED緇撴瀯鍜孌3DXMESHCONTAINER_DERIVED緇撴瀯錛屼互闆嗕腑瀛樺偍鏁版嵁鏂逛究紼嬪簭澶勭悊銆?/p>
CreateFrame()澶勭悊姣旇緝綆鍗曪紝浣犲彧鏄痭ew涓涓狥rame瀵硅薄絀洪棿錛屽~鍏ヤ紶榪涙潵鐨凬ame錛屽叾瀹冨唴瀹圭敱DX璐熻矗緇存姢濉厖銆?/p>
CreateMeshContainer()杈冧負澶嶆潅銆傚畠鐨勪換鍔′竴鏄繚瀛樹紶鍏ョ殑緗戞牸鏁版嵁鏁版嵁錛屼簩鏄牴鎹繖浜涙暟鎹強钂欑毊淇℃伅璋冪敤GenerateSkinnedMesh()鍑芥暟鐢熸垚钂欑毊緗戞牸銆傚彧鏈夎繖涓柊鐨凚lendMesh鎵嶈兘鍦≧ender()鏃舵敮鎸侀《鐐規販鍚堬紝瀹屾垚钂欑毊鐨勬樉紺恒傚湪D3DXMESHCONTAINER_DERIVED緇撴瀯涓紝鐢╬OrigMesh淇濆瓨鏃х殑Mesh鏅氱綉鏍間俊鎭傝孧eshdata.Mesh鍒欐寚鍚戞柊浜х敓鐨凚lendMesh
鍦ㄨ繖涓嚱鏁頒腑錛屽嬈$敤鍒頒簡AddRef() 錛屽COM涓嶇啛鎮夌殑鏂版墜瀹規槗鍥版儜銆侱3D鏄疌OM緇勪歡錛屽畠鍦ㄦ湇鍔¤繘紼嬩腑榪愯錛岃屼笉鍦ㄥ綋鍓嶇殑瀹㈡埛榪涚▼涓傚湪DX緇勪歡榪愯榪囩▼涓紝瑕佸垱寤轟竴緋誨垪鎺ュ彛瀵硅薄錛屽CreateDevice()榪斿洖鎺ュ彛鎸囬拡錛岃繖浜涙帴鍙e強鍏跺崰鐢ㄥ唴瀛樹粈涔堟椂鍊欓噴鏀撅紝瑕侀氳繃“寮曠敤璁℃暟”鐨勬妧鏈潵瑙e喅銆侫ddRef()緇欒繖涓帴鍙f寚閽堢殑璁℃暟鍔?錛岃孯elease()浼氬皢涔嬪噺1銆備竴鏃﹀噺鍒?錛岃〃紺烘病鏈夊鎴蜂嬌鐢ㄤ簡錛岀浉鍏崇殑鎺ュ彛灝遍噴鏀句簡銆?鐢辨鍙煡錛屾瘡嬈¤皟鐢≧lease()鍚庯紝騫朵笉涓瀹氫細閲婃斁鍐呭瓨錛岃屾槸褰撳紩鐢ㄨ鏁板綊0鏃墮噴鏀懼唴瀛樸?br>榪欐牱錛屽鎺ュ彛鎸囬拡鐨勪嬌鐢紝灝卞儚緇存姢鍫嗘爤鐨勫鉤琛′竴鏍鳳紝瑕佷粩緇嗭紝鑰屼笖鎸夌収鏌愮綰﹀畾瑙勫垯浣跨敤銆?/p>
浣嗗鉤鏃禗3D緙栫▼涓紝鎬庝箞涓嶇敤AddRef()鍛紵榪欐槸鐢變簬涓涓帴鍙f寚閽堬紝濡侷D3DDevice錛屾垨VertexBuf鎸囬拡錛岄兘鏄疍3DXCreate鍑烘潵鐨?鍦–reate鏃跺欙紝鍦ㄥ唴閮ㄥ凡緇忎簨鍏圓ddRef()浜嗭紝浣犲氨涓嶉渶瑕佸啀鍋氳繖宸ヤ綔浜嗐傚彧瑕佷綘鍦ㄤ笉鐢ㄦ椂錛岃皟鐢?p鎸囬拡->Relase()灝遍噴鏀句簡銆備竴鑸紪紼嬶紝鐗瑰埆鏄皬鍨嬬ず渚嬬▼搴忥紝閮芥槸鍒濆鍖栨椂寤虹珛涓嬈★紝鍏抽棴鏃墮噴鏀撅紝閮介伒瀹堜簡榪欑綰﹀畾錛屾墍浠ヤ笉瀛樺湪榪欑闂銆?/p>
浣嗗湪CreateMeshContainer()鍑芥暟涓紝浠ュ縐嶆柟寮忎嬌鐢ㄤ簡鎸囬拡錛屽湪灞閮ㄦ寚閽堝彉閲忎腑鏉ュ洖浼犻掞紝鎵浠ラ棶棰樺鏉傚寲浜嗐傚湪COM緙栫▼涓害瀹氾紝浠諱綍鏃跺欏湴鎺ュ彛鎸囬拡璧嬪?澶嶅埗)錛岄兘瑕丄ddRef()錛屽湪鎸囬拡鍙橀噺緇撴潫鐢熷懡鏈熷墠錛屽啀Release(). 浣嗚澶氱▼搴忓憳閮戒笉鏄弗鏍艱繖涔堝仛銆傚洜涓哄湪灞閮ㄥ彉閲忕敤瀹屽氨搴熶簡錛屽厛AddRef()澧炲姞璁℃暟鍐峈elease()鍑忓皯錛屽拰鐩存帴浣跨敤鏈鍚庢槸絳夋晥鐨勩傚嚑涔庢槸澶氭涓涓俱傝繖涓庣紪紼嬩範鎯湁鍏崇郴銆備竴鏃﹀紩鐢ㄨ鏁頒笉瀵癸紝濡傛灉娌℃湁緇熶竴鐨勪範鎯紝涓嶅ソ鎺掓煡銆傚湪CreateMeshContainer()涓紝瀵規帴鍙f寚閽堢殑浣跨敤鏈変笁縐嶆柟寮忥紝渚嬩婦濡備笅錛?/p>
鏂瑰紡涓錛氫笉浣跨敤AddRef()銆傚拰鏅氭寚閽堜竴鏍鳳紝涓存椂鍙橀噺鏄乏鍊鹼紝鎺ュ彛鎸囬拡鏄彸鍊鹼紝鐩存帴璧嬪間嬌鐢ㄣ傚: pMesh = pMeshData->pMesh; 榪欐槸鐢變簬pMesh鏄眬閮ㄥ彉閲忥紝瀹冨彧鏄復鏃跺紩鐢ㄤ竴涓嬶紝娌″繀瑕佷負瀹冨厛AddRef()錛屽悗Release()銆?/p>
鏂瑰紡浜岋細闅愬紡鐨勪嬌鐢ˋddRef()銆?鐢變簬鐢ㄥ埌浜嗕竴浜涘唴閮ㄦ湁AddRef()鍔ㄤ綔鐨勫嚱鏁幫紝灝辮鎸夌収COM綰﹀畾錛屽湪瀛愮▼搴忕粨鏉熷墠Release() pMesh->GetDevice(&pd3dDevice);//姝ゅd3d璁懼寮曠敤璁℃暟宸茬粡鍔? .... SAFE_RELEASE(pd3dDevice);//--姝ゅ灝嗗紩鐢ㄨ鏁板噺1錛屽茍涓嶆槸鐪熺殑閲婃斁d3d璁懼 鍦ㄦ湰渚嬩腑錛宲d3dDevice鍦℅etDevice()涓凡緇廇ddref()榪囦簡錛屾墍浠ワ紝鍦ㄩ鍑篊reateMeshContainer()鍓嶏紝蹇呴』pd3dDevice->Release()
鏂瑰紡涓夛細鏄懼紡鐨勪嬌鐢ˋddRef()銆?濡傛灉涓涓寚閽堝鹼紝涓嶆槸鐢盌3DXCreate鍑烘潵鐨勶紝鑰屾槸閫氳繃璧嬪兼柟寮忓鍒剁粰涓涓叏灞鍙橀噺鎴栭暱鏈熷彉閲忕殑銆?鎵浠ワ紝鍙互閫氳繃AddRef()鐨勬柟寮忔潵寤惰繜璇ュ璞$殑閲婃斁 銆傚洜涓猴紝濡傛灉涓岮ddRef()錛屾瀬鏈夊彲鑳藉湪鍑芥暟榪斿洖璇ュ璞″氨鍙兘閲婃斁浜嗐傚畠灝卞儚涓涓姞娌圭珯錛屼嬌寰椾紶鍏ュ璞$殑瀵垮懡寤墮暱鑷寵嚜宸辨帶鍒惰寖鍥村唴銆傜敤浜咥ddRef()錛屽氨瑕佸湪鐩稿叧鐨凞estroy涓坊鍔燫elease()銆?/p>
鍦ㄦ湰鍑芥暟錛屾湁涓夊榪欐牱鐨勮鍙ワ細 pMeshContainer->MeshData.pMesh = pMesh; pMeshContainer->MeshData.Type = D3DXMESHTYPE_MESH; pMesh->AddRef(); .... pMeshContainer->pSkinInfo = pSkinInfo; pSkinInfo->AddRef();
pMeshContainer->pOrigMesh = pMesh; pMesh->AddRef(); ....
灝嗘潵鍦―estroyMeshContainer()涓紝瑕侀噴鏀捐繖浜涙寚閽堬細 .... SAFE_RELEASE( pMeshContainer->MeshData.pMesh ); SAFE_RELEASE( pMeshContainer->pSkinInfo ); SAFE_RELEASE( pMeshContainer->pOrigMesh );
鐢變簬榪欎簺鎸囬拡鍊肩殑鍒涘緩銆佹洿鏀圭瓑閮芥槸鐢ㄦ埛鑷繁緇忚惀鐨勶紝鎵浠ュ姟蹇呰鍔犲墠鍚庡惢鍚堬紝鍦–reateMeshContainer()涓瑼ddRef()錛屽湪DestroyMeshContainer()涓璕elease().
鍐嶆潵鐪嬫暟鎹殑淇濆瓨閮ㄥ垎銆?br>鍦–reateMeshContainer()鐨勪紶鍏ュ弬鏁頒腑錛屾湁pMeshData,pMaterials,pEffectInstances,NumMaterials,pAdjacency,pSkinInfo 浣犻渶瑕佹妸榪欎簺鏁版嵁淇濆瓨鍒拌嚜宸辯殑D3DXMESHCONTAINER瀵硅薄涓傚茍涓斿叾涓殑鎵鏈夋暟緇勬墍闇鐨勭┖闂撮兘瑕佸湪鍏ㄥ眬鍫嗕腑new鍑烘潵銆傛墍浠ュ湪璇ヤ唬鐮佷腑錛屾湁濡備笅new: pMeshContainer = new D3DXMESHCONTAINER_DERIVED;//鑷畾涔夌殑鎵╁睍鏁版嵁瀹瑰櫒瀵硅薄 memset(pMeshContainer, 0, sizeof(D3DXMESHCONTAINER_DERIVED));//鍒濆鍖杙MeshContainer,娓? ... pMeshContainer->pMaterials = new D3DXMATERIAL[pMeshContainer->NumMaterials];//鍑嗗淇濆瓨鏉愯川 pMeshContainer->ppTextures = new LPDIRECT3DTEXTURE9[pMeshContainer->NumMaterials];//鍑嗗鍒涘緩綰圭悊瀵硅薄銆傚畠澹版槑鍦ㄦ墿灞曢儴鍒嗐?br>pMeshContainer->pAdjacency = new DWORD[NumFaces*3];//鍑嗗淇濆瓨閭繪帴涓夎褰㈡暟緇?NumFaces = pMesh->GetNumFaces();
鐒跺悗錛屽鏁版嵁榪涜memcpy淇濆瓨銆俻EffectInstances鐢變簬鍦ㄧ粯鍒朵腑涓嶉渶瑕侊紝騫舵病榪涜淇濆瓨銆傚浜庢病鏈夎創鍥劇殑璧嬩互榛樿鏉愯川灞炴с?br>鍊煎緱娉ㄦ剰鐨勬槸錛屾墍鏈夎繖浜沶ew錛屽繀欏誨湪DestroyMeshContainer()鏃惰繘琛宒elete.
鎺ヤ笅鏉ョ殑澶勭悊涓紝濡傛灉鍙戠幇Mesh鐨凢VF涓病鏈夋硶鍚戦噺錛岃鐢–loneMeshFVF()閲嶅緩Mesh錛岃綆楅《鐐瑰鉤鍧囨硶鍚戦噺銆備互澶囧厜鐓у鐞嗐?/p>
鏈鍚庯紝鎴戜滑鐪嬬湅钂欑毊淇℃伅pSkinInfo鐨勫鐞嗐傝繖鏄噸澶存垙銆?br>濡傛灉鍙戠幇pSkinInfo!=NULL錛屽氨鍑嗗鐫鎵嬩粠鍚勪釜钂欑毊楠ㄩ淇℃伅鍒涘緩SkinMesh. 棣栧厛錛岀敤鎵╁睍瀹瑰櫒緇撴瀯D3DXMESHCONTAINER_DERIVED涓殑鍚勫睘鎬т繚瀛樺師Mesh鎸囬拡鍊鹼紝pMeshContainer->pOrigMesh = pMesh, 鍥犱負鎺ヤ笅鏉ユ垜浠鍒涘緩SkinMesh鏇夸唬鍘烳esh.鐒跺悗錛屾妸SkinInfo涓殑鍚勯楠肩殑鍋忕Щ鐭╅樀淇濆瓨鍒皃MeshContainer->pBoneOffsetMatrices涓?br> cBones = pSkinInfo->GetNumBones(); pMeshContainer->pBoneOffsetMatrices = new D3DXMATRIX[cBones]; ..... 姣忎釜“楠ㄩ鍋忕Щ鐭╅樀”pBoneOffsetMatrices,鍦ㄥ皢鏉rawMeshContainer()涓槸蹇呴』瑕佺敤鐨勩傚洜涓哄師濮婱esh涓殑欏剁偣鏁版嵁涔樹互“楠ㄩ鍋忕Щ鐭╅樀”錛屽啀涔樹互“鍙樻崲鐭╅樀”錛屾墠鑳芥眰寰楀悇楠ㄩ欏剁偣鍦ㄤ笘鐣屽潗鏍囩郴涓殑鍧愭爣銆?鍗籌細 楠ㄩ涓婂悇鐐瑰湪涓栫晫鍧愭爣緋諱腑鐨勬柊鍧愭爣=鍒濆緗戞牸涓殑鍚勭偣鍧愭爣*楠ㄩ鍋忕Щ鐭╅樀*楠ㄩ褰撳墠鐨勫彉鎹㈢煩闃?br> 鍏朵腑錛?#8220;鍒濆緗戞牸涓殑鍚勭偣鍧愭爣*楠ㄩ鍋忕Щ鐭╅樀” = 楠ㄩ涓婂悇鐐瑰垵濮嬫椂鍒誨湪璇ラ楠煎潗鏍囩郴涓殑灞閮ㄥ潗鏍?/p>
鍋氫簡浠ヤ笂宸ヤ綔鍚庯紝璋冪敤GenerateSkinnedMesh(pMeshContainer)錛屽垱寤篠kinMesh. 鎺ヤ笅鏉ワ紝鎴戜滑鐪嬬湅GenerateSkinnedMesh()鍋氫簡鍝簺宸ヤ綔銆?/p>
3.4 鎬庢牱鐢熸垚钂欑毊緗戞牸SkinMesh? GenerateSkinnedMesh()鍒嗘瀽
鐢變簬瑕侀噸瀹氫箟pMeshContainer->MeshData.pMesh錛屾墍浠ュ厛SAFE_RELEASE( pMeshContainer->MeshData.pMesh ); 閲婃斁鍘焢Mesh
鍦ㄨ繖涓嚱鏁頒腑錛屾槸鏍規嵁褰撳墠緇樺浘鏂瑰紡璁劇疆榪涜鍔犺澆鏁版嵁鐨勩傚洜涓洪《鐐規販鍚堬紝鏈夋棤绱㈠紩鐨勯《鐐規販鍚堬紝鏈夊惈绱㈠紩鐨勯《鐐規販鍚堬紝鎵浣跨敤鐨勫嚱鏁板拰瀵瑰簲鐨凷kinMesh鏁版嵁鍐呭涔熸湁鎵涓嶅悓銆?br>鍦ㄧず渚嬩腑錛岃嚜瀹氫箟浜嗘灇涓緈_SkinningMethod錛屼富瑕佸垎涓篋3DNONINDEXED鍜孌3DINDEXED錛屼互鏈夌函杞歡娓叉煋絳夈傝繍琛岀ず渚嬪悗錛屼綘鍙互閫夋嫨鑿滃崟涓殑Options閫夋嫨涓嶅悓鐨勬覆鏌撴柟寮忋?/p>
鎴戜滑鐫閲嶅垎鏋愪竴涓嬪甫绱㈠紩鐨勮挋鐨綉鏍箋傚湪紼嬪簭涓紝灝辨槸D3DINDEXED鐩稿叧鐨勯儴鍒嗐?br>if (m_SkinningMethod == D3DINDEXED){ ....}
娉ㄦ剰! 紺轟緥榛樿宸ヤ綔鍦―3DNONINDEXED涓?濡傛灉瑕佽窡韙狣3DINDEXED閮ㄥ垎鐨勪唬鐮?蹇呴』閫夋嫨鑿滃崟涓殑Options閫夋嫨indexed!
鏈涓昏鐨勶紝瑕侀氳繃DX鐨凜onvertToIndexedBlendedMesh()鍑芥暟錛岀敓鎴愭敮鎸?#8220;绱㈠紩欏剁偣娣峰悎”鐨凷kinMesh.鏈夊叧绱㈠紩欏剁偣娣峰悎鐨勬妧鏈紝浣犲彲浠ュ湪DXSDK甯姪鏂囦歡涓悳绱?#8220;Indexed Vertex Blending”涓婚錛屽鐫鑻辨枃鍜屾彃鍥懼皢灝辯湅錛岀‘鏈夋敹鑾楓?/p>
瑕佹兂鐢ㄧ‖浠跺欏剁偣榪涜娣峰悎錛岄偅涔堝弬涓庢販鍚堣呬笉鑳藉お澶氥備篃灝辨槸璇村悓鏃跺獎鍝嶄竴涓《鐐圭殑楠ㄩ鏁頒笉鑳藉銆傛垜浠亣瀹氫竴涓《鐐規渶澶氬悓鏃跺彈4涓楠肩殑褰卞搷錛堜篃灝辨槸鍚屾椂鏈澶氭湁4涓楠肩煩闃靛弬涓庡姞鏉冩眰鍜岋級錛岄偅涔堝悓鏃跺獎鍝嶄竴涓笁瑙掑艦闈㈢殑楠ㄩ鏁版渶澶氬氨鏄?*4=12涓?br>鎴戜滑鐢∟umMaxFaceInfl琛ㄧず褰卞搷涓涓笁瑙掗潰鐨勬渶澶氶楠肩煩闃墊暟錛岄偅涔堬紝閫氳繃璋冪敤pSkinInfo->GetMaxFaceInfluences()鑾峰彇榪欎釜鏁板鹼紝涓鑸篃灝?-4銆傚鏋滆繖涓暟鍊煎お澶э紝鎴戜滑寮哄埗浣跨敤NumMaxFaceInfl = min(NumMaxFaceInfl, 12);鏉ユ渶澶氬彇鍊?2銆?/p>
鐢∟umMaxFaceInfl 榪欎釜鏁板煎共浠涔堝憿錛?鎴戜滑鐢ㄦ潵瀹冨垎鏋愬綋鍓嶇殑鏄懼崱鍊掑簳琛屼笉琛屻?/p>
if (m_d3dCaps.MaxVertexBlendMatrixIndex + 1 < NumMaxFaceInfl)//濡傛灉鏄懼崱杈句笉鍒拌瑕佹眰 { //寰堝鎬?005騫村簳涔扮殑GeForce 6600GT鏄懼崱錛岀珶鐒秏_d3dCaps.MaxVertexBlendMatrixIndex=0, 涓嶆敮鎸佺儲寮曢《鐐規販鍚堬紒鏄┍鍔ㄩ棶棰樿繕鏄庝箞浜嗭紵 //浣嗗畠鏀寔闈炵儲寮曟販鍚堛傛垨鑰咃紝涔熻瑕佺敤HLSL鏀寔娣峰悎銆傜湅璧鋒潵錛?D緙栫▼瑕佸鑰冭檻銆?br> .. pMeshContainer->UseSoftwareVP = true;//鐢ㄨ蔣浠舵覆鏌撻《鐐廣傛樉鐒朵笉瀹炵敤銆?br>} else { pMeshContainer->NumPaletteEntries = min( ( m_d3dCaps.MaxVertexBlendMatrixIndex + 1 ) / 2, pMeshContainer->pSkinInfo->GetNumBones() );//--浠涔堟剰鎬濓紵 pMeshContainer->UseSoftwareVP = false;//閲囩敤紜歡欏剁偣娣峰悎銆?br> Flags |= D3DXMESH_MANAGED; }
[璇勮] 鍦ㄤ笂闈㈡湁涓琛屼唬鐮? pMeshContainer->NumPaletteEntries = min( ( m_d3dCaps.MaxVertexBlendMatrixIndex + 1 ) / 2,pMeshContainer->pSkinInfo->GetNumBones() ); 灝界浣滆呭姞浜嗗ぇ孌墊敞閲婏紝榪樻槸璁╀漢涓澶撮浘姘淬傚叾瀹烇紝鎴戜滑鍋氫竴涓疄楠岋紝鍙嶅皵鏇磋兘鐞嗚В瀹冪殑鐢ㄩ斻?br>絎竴姝ワ紝浣犲湪榪欏彞璇濆悗闈笅涓涓柇鐐癸紝鐪嬩竴涓嬪湪浣犳満鍣ㄤ笂榪欎釜鏁板箋傛垜鐨凙TI 9550鏄懼崱鏈哄櫒涓婃槸19銆傛瘮tiny.x涓殑楠ㄩ鏁?5灝戝緢澶氥?br>絎簩姝ワ紝浣犲皢涓婇潰=鍙寵竟鐬庡~涓涓ぇ浜?鐨勬暟瀛楋紝姣斿6銆傜紪璇戝悗鐓ф牱榪愯銆傝屼笖鏁堟灉涓婂嚑涔庣湅涓嶅嚭浠諱綍宸埆銆?br>涓轟粈涔堜細榪欐牱鍛紵 鎴戜滑鍦ㄧ粯鍒朵唬鐮侀儴鍒嗭紝鐪嬬湅榪欎釜鏁板艱搗浠涔堜綔鐢ㄣ?br>鍦―rawMeshContainer()浠g爜涓紝鎴戜滑鏌ユ壘D3DINDEXED鐩稿叧鐨勯儴鍒嗐傚湪mesh鍚勫瓙闆嗙殑DrawSubset()涔嬪墠錛屾湁濡備笅浠g爜錛?br> for (iAttrib = 0; iAttrib < pMeshContainer->NumAttributeGroups; iAttrib++) { // first calculate all the world matrices for (iPaletteEntry = 0; iPaletteEntry < pMeshContainer->NumPaletteEntries; ++iPaletteEntry) { iMatrixIndex = pBoneComb[iAttrib].BoneId[iPaletteEntry]; if (iMatrixIndex != UINT_MAX) { D3DXMatrixMultiply( &matTemp, &pMeshContainer->pBoneOffsetMatrices[iMatrixIndex], pMeshContainer->ppBoneMatrixPtrs[iMatrixIndex] ); m_pd3dDevice->SetTransform( D3DTS_WORLDMATRIX( iPaletteEntry ), &matTemp ); } } ... } 涓嬮潰浠旂粏璇勪及涓涓嬭繖浜涗唬鐮? 鍏堟敞鎰忕湅鍏朵腑濂囨殑D3DTS_WORLDMATRIX()瀹忥紝鎴戜滑浠ュ墠榪樻病榪欐牱鐢ㄨ繃銆傚畠鏄仛浠涔堢敤鐨勫憿錛熼氳繃鏌XSDK甯姪錛屾垜浠湪Geometry Blending涓婚涓壘鍒扮浉鍏寵鏄庯紝騫跺湪"Indexed Vertex Blending"涓婚涓粰鍑轟簡鍐呴儴瀹炵幇鍘熺悊銆傚師鏉ワ紝褰撲綘鐢╩_pd3dDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, TRUE);寮鍚簡绱㈠紩欏剁偣娣峰悎鍚庯紝鍦ㄧ‖浠朵笂灝卞惎鐢ㄤ簡“palette of matrices”錛屽嵆鐭╅樀瀵勫瓨鍣ㄧ粍錛屽畠鏈澶氭敮鎸佸悓鏃?56涓儲寮曘傚氨鍍忚繃鍘葷敤256鑹茶皟鑹叉澘鏉ヨ〃鐜板僵鑹蹭竴鏍楓侱3DTS_WORLDMATRIX()瀹忓氨鏄湁256-511榪?56涓暟琛ㄧず鐭╅樀绱㈠紩鍙楓?/p>
榪欎簺鐭╅樀鍙備笌濡備笅璁$畻錛?/p>
V鏈緇堥《鐐逛綅緗?V*M[绱㈠紩鍊?]*鏉冮噸1 + V*M[绱㈠紩鍊?]*鏉冮噸2 + ....+V*M[绱㈠紩n]*(1-鍏跺畠鏉冮噸鍜?
榪欎釜鍏紡鐨勬潵婧愶紝鐩鎬俊澶у鍦ㄤ紬澶氳祫鏂欎笂瑙佽繃錛屼笉璧樿堪銆?褰撶劧錛屾垜浠篃鍙互鐢ㄧ▼搴忓畬鎴愯繖涓挋鐨綆楄繃紼嬶紝浣嗛愪釜璇婚《鐐瑰嵈寰堥夯鐑︺傜幇鍦ㄦ槸鐢辯‖浠朵唬鍔充簡銆傛垜浠彧璁劇煩闃靛氨琛屼簡銆?br>鎴戜滑鐢╩_pd3dDevice->SetTransform( D3DTS_WORLDMATRIX( iPaletteEntry ), &matTemp );榪欑鏂瑰紡璁懼畾鍚勭儲寮曞搴旂殑鐭╅樀銆?/p>
閭d箞鏉冮噸鍛紵鎴戜滑鎬庝箞璁撅紵鍘熸潵鍦ㄤ笂闈㈡墍璇寸殑DX鎻愪緵鐨凜onvertToIndexedBlendedMesh()鍑芥暟涓紝鐢熸垚SkinMesh鏃訛紝鍚勭綉鏍奸《鐐規牸寮廎VF宸茬粡鏈夊彉鍖栦簡錛屽鍔犱簡鏂版牸寮忥紝D3DFVF_XYZB2錛孌3DFVF_LASTBETA_UBYTE4錛岀敤浠ヨ褰曢《鐐瑰搴旂殑鏉冮噸鍊間互鍙婄煩闃電儲寮曘傚涓?br>struct VERTEX { float x,y,z; float weight; DWORD matrixIndices; float normal[3]; }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZB2 | D3DFVF_LASTBETA_UBYTE4 |D3DFVF_NORMAL);
D3DFVF_LASTBETA_UBYTE4瀵瑰簲浜嶥WORD鏁板鹼紝鐢ㄤ簬鐭╅樀绱㈠紩鏃訛紝姣忎釜瀛楄妭琛ㄧず涓涓儲寮曪紝鏈澶氬彲浠ュ厑璁?涓儲寮曪紝鍚屾椂鏈?涓煩闃靛弬浜庤鐐圭殑娣峰悎銆傚鏋滀竴嬈$粯鍒朵腑娑夊強浜?鍧楅楠肩煩闃碉紝浣犲彲浠ユ妸榪?涓煩闃靛叏閮ㄧ敤SetTransform璁劇疆鍒扮煩闃靛瘎瀛樺櫒涓紝浣嗘瘡涓《鐐瑰湪娓叉煋鏃訛紝鏈澶氫嬌鐢ㄥ叾涓殑4涓傜敱姝ゅ彲鐭ワ紝pMeshContainer->NumPaletteEntries榪欎釜鏁板鹼紝紜畾浜嗕竴瓚烡rawSubset緇樺埗鎵鐢ㄥ埌鐨勭煩闃典釜鏁幫紝涓暟瓚婂錛屽湪涓瓚熺粯鍒朵腑灝卞彲浠ョ撼鍏ョ殑鏇村欏剁偣銆傛墍浠ワ紝褰撴垜浠噺灝憄MeshContainer->NumPaletteEntries榪欎釜鏁板兼椂錛宲MeshContainer->NumAttributeGroups鏁板煎氨浼氬鍔犮備篃灝辨槸璇達紝涓瓚熺粯鍒朵腑鎵鍏佽娑夊強鐨勯楠兼暟瓚婂皯錛岄偅涔堝瓙闆嗙殑鏁伴噺NumAttributeGroups灝變細澧炲姞錛岄渶瑕佸緇樺嚑瓚熴?br>浣犲彲浠ュ湪姝や笅鏂偣瑙傚療錛屽綋NumPaletteEntries=19鏃訛紝NumAttributeGroups=3 褰揘umPaletteEntries=6鏃訛紝NumAttributeGroups=12 褰揘umPaletteEntries=4鏃訛紝NumAttributeGroups=31錛屽嚑涔庡拰鏃犵儲寮曟椂鐨勫垎緇勪竴鏍峰浜嗐?/p>
欏剁偣涓殑鏉冮噸weight瀛樻斁浜嗗畠褰撳墠楠ㄩ鐨勬潈閲嶃傦紙涓涓《鐐瑰搴旂殑澶氫釜楠ㄩ鏉冮噸鎬庝箞瀛樻斁錛熸槸涓嶆槸鍦ㄥ綋鍓嶅瓙闆嗕腑鏈夊涓悓鏍風殑欏剁偣錛屾潈閲嶄笉鍚岋紝瀵瑰簲鐨勭煩闃電儲寮曚笉鍚岋紝鐒跺悗娣峰悎錛?/p>
鐢變笂鎵榪幫紝ConvertToIndexedBlendedMesh()鏄竴涓緢閲嶈鍑芥暟錛岀敱DX鑷姩灝哅esh欏剁偣鍒嗙粍鎴愬涓瓙闆嗭紝浠ヤ究DrawSubset. 浣犲繀欏繪妸瀹冪殑榪斿洖鍙傛暟閮借褰曚笅鏉ワ紝鍦ㄧ粯鍒舵椂浣跨敤銆?/p>
鍥? 鎬庢牱緇樺埗鏄劇ず鍔ㄧ敾錛?/strong>
DrawFrame()鐢ㄦ潵緇樺埗鏁翠釜X妗嗘灦銆傚畠閬嶅巻鍚勪釜妗嗘灦錛屾壘鍒癕esh涓嶄負絀虹殑榪涜緇樺埗銆傦紙鍏跺疄鏁翠釜.x涓氬父鍙湁涓涓笉涓虹┖錛岃涓婃枃鎵榪幫級 DrawMeshContainer()鏄粯鍒跺嚱鏁般?/p>
4.1 鎬庢牱寮鍚《鐐規販鍚堬紵 娉ㄦ剰搴旂敤鏈夊叧鐨刅ertex Blending鎶鏈傚鍦ㄧ儲寮曟柟寮忕殑緇樺埗涓紝 m_pd3dDevice->SetRenderState(D3DRS_VERTEXBLEND, pMeshContainer->NumInfl - 1); 鍏跺疄鏄瀹氫簡D3DVBF_2WEIGHTS鎴朌3DVBF_3WEIGHTS 娉ㄦ剰瑕乵_pd3dDevice->SetRenderState(D3DRS_INDEXEDVERTEXBLENDENABLE, TRUE);
4.2 鐭╅樀鐨勫埛鏂幫細 棣栧厛錛屽湪FrameMove()璋冪敤m_pAnimController->SetTime()璁劇疆褰撳墠鏃墮棿(鎴栧湪DX9.0c涓敤AdvanceTime()璁劇疆鏃墮棿宸?錛屼粠鑰屽埛鏂板悇涓猵Frame->TransformationMatrix錛屽嵆楠ㄩ杞崲鐭╅樀 鍏舵錛岃皟鐢║pdateFrameMatrices()鍋氫箻娉曠瘡縐紝璁$畻鍑哄悇楠ㄩ鍧愭爣緋誨埌鏍逛笘鐣岃漿鎹㈢煩闃點?br>鏈鍚庯紝鍦ㄧ粯鍒跺墠錛屽皢璇ヨ漿鎹㈢煩闃靛乏涔樺亸縐葷煩闃碉紝寰楀埌鏈緇堢殑杞崲鐭╅樀銆?br> D3DXMatrixMultiply( &matTemp, &pMeshContainer->pBoneOffsetMatrices[iMatrixIndex], pMeshContainer->ppBoneMatrixPtrs[iMatrixIndex] );
鐢辨鍙錛屼綘濡傛灉娉ㄩ噴鎺変簡m_pAnimController->SetTime錛岀敾闈㈣偗瀹氬仠浜嗐?/p>
4.3 緇樺埗杈撳嚭 鏄湪DrawMeshContainer()涓紝璋冪敤SkinMesh鐨凞rawSubset榪涜緇樺埗銆備竴浜涚粏鑺傚唴瀹瑰D3DTS_WORLDMATRIX(),鍦ㄤ笂闈㈠凡緇忔湁璇存槑錛屼笉鍐嶇綏鍡︺?/p>
4.4 鍏充簬紺轟緥涓縐嶇粯鍒舵柟寮忓垎鏋?/font> 鍦ㄧず渚嬩腑錛岀敤鍒頒簡澶氱娓叉煋鏂瑰紡錛屽寘鎷紶緇熺殑闈炵儲寮曢《鐐規販鍚堬紝榪樻湁鏂板叴鐨凥LSL鏂瑰紡銆傝屼笖鎴戝彂鐜幫紝ATI RADEON 9550 鏄懼崱MaxVertexBlendMatrixIndex=37錛岃屼環鏍兼洿楂樼殑Gefoce 6600GT MaxVertexBlendMatrixIndex绔熺劧涓?錛屼笉鏀寔index vertex blending錛?br>鎵浠ワ紝榪樻槸鏈夊繀瑕佸垎鏋愪竴涓嬭紺轟緥涓悇縐峷ertex blending鏂瑰紡鐨勫鐞嗭紝浠ヤ究鎺屾彙澶氱緇樺埗鏂瑰紡閫傚簲涓嶅悓鏄懼崱銆?br>緇忔祴璇曪紝紺轟緥涓墍娑夊強鐨勫縐嶆柟寮忥紝鐢辨參鍒板揩錛屼緷嬈℃槸浠ヤ笅鍑犵錛?br> SOFTWARE, D3DNONINDEXED, D3DINDEXED, D3DINDEXEDVS, D3DINDEXEDHLSLVS,
浠庢渶鎱㈢殑SW鍒版渶蹇殑HLSL錛屽ぇ綰︾浉宸?0%錛屾湁鏃朵細澶у埌40%銆?宸埆涓嶆槸鐗瑰埆鎮畩鐨勫師鍥狅紝涓昏鏄《鐐規販鍚堝茍涓嶆槸鐡墮銆?/p>
鍏充簬欏剁偣澶勭悊鏂瑰紡錛屾槸鍦ㄥ垱寤篋3D璁懼鏃舵寚瀹氱殑銆傚叡鏈変笁縐嶆柟寮忥細 D3DCREATE_SOFTWARE_VERTEXPROCESSING 杞歡欏剁偣榪愮畻 (綆璁?sw vp) D3DCREATE_HARDWARE_VERTEXPROCESSING 紜歡欏剁偣榪愮畻銆傚繀欏繪湁榪欓」鎵嶆敮鎸佹湁HAL (綆璁?hw vp) D3DCREATE_MIXED_VERTEXPROCESSING 娣峰悎欏剁偣榪愮畻錛屽嵆紜歡+杞歡 (綆璁?mixed vp)
涓鏃︾敤D3DCREATE_HARDWARE_VERTEXPROCESSING鏂瑰紡鍒涘緩璁懼錛屽氨鍙兘鍦ㄧ‖浠舵柟寮忎笅榪涜欏剁偣澶勭悊銆傚鏋滆皟鐢╩_pd3dDevice->SetSoftwareVertexProcessing(TRUE)鏉ュ垏鎹㈠埌杞歡欏剁偣澶勭悊錛孒RESULT浼氳繑鍥炲け璐ャ?br> 鎵浠ワ紝濡傛灉浣犲瀹㈡埛鐨勬樉鍗℃病鏈夎凍澶熺殑淇℃伅錛屽氨鐢―3DCREATE_MIXED_VERTEXPROCESSING鏂瑰紡鍒涘緩璁懼銆傚畠榛樿宸ヤ綔鏂瑰紡鏄疕AL銆備竴鏃﹀彂鐜拌繘琛屾煇縐嶇粯鍒舵椂紜歡鑳藉姏涓嶅錛屽氨鍙互璋冪敤璋冪敤m_pd3dDevice->SetSoftwareVertexProcessing(TRUE)鍒囨崲鍒拌蔣浠舵ā寮忋傚湪紺轟緥涓氨鏄繖涔堝仛鐨勶紝鍚姩紺轟緥鍚庯紝榪愯鍦╩ixed妯″紡涓嬨?/p>
鍦℅efoce6600GT鏄懼崱涓紝鐢變簬D3DINDEXED鏂瑰紡涓嶆敮鎸侊紝閲囩敤浜嗚蔣浠舵販鍚堟柟寮忥紝鍦ㄨ繖縐嶆柟寮忎笅閫熷害鐢氳嚦姣擲OFTWARE鎱€侶LSL榪樺ソ錛岃繕鏄渶蹇?/p>
瑕佺‘瀹氳澶囩殑紜歡欏剁偣澶勭悊鑳藉姏錛屽彲浠ュ弬鑰僁3DCAPS9緇撴瀯鐨刅ertexProcessingCaps鎴愬憳銆傚彲浠ヨ幏鍙栦笅鍒楀睘鎬?br>MaxActiveLights錛孧axUserClipPlanes錛孧axVertexBlendMatrices錛孧axStreams錛孧axVertexIndex
(1)D3DNONINDEXED鏂瑰紡錛?/p>
棣栧厛鐪婫enerateSkinnedMesh()涓庢牱鍒涘緩钂欑毊緗戞牸鐨勩?br>榪欑鏂瑰紡涓嬶紝鐢–onvertToBlendedMesh()寤虹珛钂欑毊緗戞牸錛岃屼笉鏄疌onvertToIndexBlendedMesh()
涓轟簡緇樺埗钂欑毊錛屽湪榪欎釜鍑芥暟涓Mesh鍚勫瓙闆嗙殑欏剁偣鍐嶆榪涜鐨勫垎緇勩傚垎緇勭殑鏍囧噯鏄悇欏剁偣錛堟垨涓夎闈級鎵娑夊強鐨勯楠肩煩闃典釜鏁頒笉瓚呰繃pMeshContainer->NumInfl涓?榪欎釜鏁板瓧鏄敱鍦–onvertToBlendedMesh()鏃訛紝鐢卞弬鏁皃MaxFaceInfl榪斿洖鐨?銆備竴涓狹esh瀛愰泦鍙兘琚媶寮鎴愬涓垎緇勩?鏈鍚庯紝鍒嗙粍鐨勫睘鎬т繚瀛樺湪pBoneCombinationBuf涓紝濡傚瓙闆咺D,璇ュ瓙闆嗙殑鍚勯楠糏D錛岃搗濮嬩笁瑙掗潰錛屼笁瑙掗潰涓暟絳変緵緇樺埗鏃朵嬌鐢紝鍒嗙粍鐨勪釜鏁頒繚瀛樺湪pMeshContainer->NumAttributeGroups涓?/p>
鎺ヤ笅鏉ユ鏌ユ瘡涓垎緇勬墍娑夊強鐨勯楠兼暟錛屾槸涓嶆槸瓚呰繃紜歡鍏佽鐨勬渶澶ф販鍚堢煩闃墊暟---MaxVertexBlendMatrices銆傚鏋滆秴榪囦簡灝辨妸鎵鏈夊垎緇勬埅涓轟袱澶ч儴鍒嗭紝鍓嶄竴閮ㄥ垎鐢ㄧ‖浠舵販鍚堬紝鍚庝竴閮ㄥ垎閲囩敤杞歡娣峰悎銆傝屼笖錛屼竴鏃﹀彂鐜版湁闇瑕佽蔣浠舵販鍚堬紝瑕侀噰鐢–loneMeshFVF(D3DXMESH_SOFTWAREPROCESSING|...)鐨勬柟寮忛噸鏂扮敓鎴愮綉鏍箋?/p>
鍐嶆潵鐪嬬粯鍒墮儴鍒咲rawMeshContainer()
鐢╬BoneComb鎸囧悜楠ㄩ鍒嗙粍灞炴э紝鎵弿鍚勫垎緇勩傛壘鍑哄叾涓楠兼暟婊¤凍紜歡鎬ц兘鐨勭敤榪涜緇樺埗銆?br>鐒跺悗寮鍚蔣浠墮《鐐規覆鏌搈_pd3dDevice->SetSoftwareVertexProcessing(TRUE)錛屽閭d簺楠ㄩ鏁拌秴鍑虹‖浠舵ц兘鐨勮繘琛岀粯鍒躲?br>SetSoftwareVertexProcessing()闇瑕佸綋鍓峝3d璁懼浠3DCREATE_MIXED_VERTEXPROCESSING鏂瑰紡鍒涘緩銆?/p>
(2)D3DINDEXED錛岃繖縐嶆柟寮忎笂闈㈠垎鏋愯繃浜嗭紝浠庣暐銆傜敤pMeshContainer->UseSoftwareVP琛ㄧず鏄惁閲囩敤杞歡緇樺埗銆?br>鍊煎緱娉ㄦ剰鐨勬槸鍦ㄨ繖縐嶆柟寮忎笅錛屼竴鏃︾‖浠舵ц兘涓嶈凍錛屼細褰誨簳浣跨敤杞歡欏剁偣娓叉煋錛岃屼笉鏄儚涓婇潰涓鏍鋒媶涓轟袱閮ㄥ垎銆?/p>
(3)D3DINDEXEDVS錛孌3DINDEXEDHLSLVS 榪欑鎯呭喌涓嬩嬌鐢ㄤ簡鐫鑹插櫒鍜岄珮綰х潃鑹茶璦銆傝秴鍑烘湰鏂囦富鏃紝璁ㄨ浠庣暐銆?/p>
(4)SOFTWARE--杞歡鏂瑰紡錛?璁╀漢鏈変簺榪鋒儜錛屼笌涓婇潰鐨刴_pd3dDevice->SetSoftwareVertexProcessing(TRUE)鏈変綍鍖哄埆錛?/p>
浠庝唬鐮佺湅錛岃繖縐嶆柟寮忎笅鍙嶈屾瘮杈冪畝鍗曘侴enerateSkinnedMesh()涓紝 鍏堢洿鎺ヤ粠鍘熷Mesh鍏嬮殕涓涓狹esh,鐒跺悗璇誨彇瀹冪殑鏉愯川灞炴ф暟緇勩傚紑杈熶竴涓┖闂磎_pBoneMatrices錛岀敤浠ュ瓨鏀懼悇鍧楅楠肩殑杞崲鐭╅樀銆?/p>
鍦ㄧ粯鍒舵椂錛屼粠pMeshContainer涓殑鍙樻崲鐭╅樀涔樹互鍋忕Щ鐭╅樀錛屾斁鍦╬BoneMatrices涓傛妸榪欎釜鐭╅樀鏁扮粍錛屼互鍘烳esh鐨勯《鐐逛綔涓烘簮欏剁偣錛屼互鏂板厠闅嗙殑MeshData.pMesh鍋氫負鐩爣欏剁偣錛岃皟鐢╬SkinInfo->UpdateSkinnedMesh()錛岀敤杞歡鏂瑰紡璁$畻鍚勯楠奸《鐐圭殑鏂頒綅緗?鐩稿綋浜庤蔣浠惰綆楁柟寮忚挋鐨?銆?/p>
鐒跺悗璋冪敤MeshData.pMesh->DrawSubset()緇樺埗銆?/p>
鍙錛屽湪SOFTWARE鏂瑰紡涓嬶紝鏈緇堥《鐐圭殑娓叉煋榪樻槸HAL鏂瑰紡鐨勶紝鍙笉榪囪挋鐨綆楁槸鐢辮蔣浠跺畬鎴愮殑銆傚畠鍜屼笂闈㈢殑m_pd3dDevice->SetSoftwareVertexProcessing(TRUE)鐩存帴璁劇疆杞歡欏剁偣娓叉煋榪樻槸鏈夊尯鍒殑銆?/p>
]]>IDirect3DDevice9::SetClipPlane http://m.shnenglu.com/Leaf/archive/2009/10/11/98317.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sun, 11 Oct 2009 08:34:00 GMT http://m.shnenglu.com/Leaf/archive/2009/10/11/98317.html http://m.shnenglu.com/Leaf/comments/98317.html http://m.shnenglu.com/Leaf/archive/2009/10/11/98317.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/98317.html http://m.shnenglu.com/Leaf/services/trackbacks/98317.html HRESULT SetClipPlane( DWORD Index , CONST float * pPlane ); 铏界劧DX SDK涓婇潰鏈夛紝浣嗚繕鏄湁寰堝鏈嬪弸涓嶅枩嬈㈢湅閭d簺鎷変竵瀛楁瘝錛屾垜涔熼『渚垮氨璁板綍涓涓嬪惂銆?br> 鍙傛暟錛?br>絎竴涓槸绱㈠紩錛屼笉鐢ㄨ浜嗐?br> 絎簩涓槸瀛樼潃 A B C D鐨勬暟緇勩?br>榪欎釜鏁扮粍鏈鍚庝細鐢ㄦ潵鏋勫緩 Ax+By+Cz+Dw = 0;騫抽潰銆?br> 鐒跺悗欏剁偣浼氭牴鎹嚜宸茬殑浣嶇疆(x,y,z,w)鏉ヨ繘琛屽垽鏂傚鏋淎x+By+Cz+Dw >= 0銆傚垯琛ㄧず鍦ㄥ鉤闈㈠墠鏂癸紝淇濈暀銆傚弽涔嬪垯鍦ㄥ悗鏂癸紝琚鍓帀銆?br> 鍊煎緱娉ㄦ剰鐨勬椂錛屽湪鍥哄畾綆$嚎浣跨敤騫抽潰瑁佸壀鐨勬椂鍊欙紝鏄湪涓栫晫鍧愭爣緋諱腑澶勭悊鐨勩?br> 鑰岀敤SHADER鐨勬椂鍊欙紝鏄湪瑁佸壀絀洪棿涓鐞嗙殑銆傦紙鍗抽《鐐硅緭鍑虹殑鏃跺欑殑鍧愭爣緋伙級 璨屼技榪樻槸澶娊璞°傛瘮濡傞《鐐硅緭鍏ュ潗鏍囨槸pos 姝ゆ椂鐨勫潗鏍囧彉鎹㈤樀鏄疻VP,鍒?Output.pos = mul(pos,WVP); 閭d箞錛屾鏃剁殑瑁佸壀絀洪棿灝辨槸Output.pos瀵瑰簲鐨勫潗鏍囩郴絀洪棿銆?/strong> 鍙﹀錛岄粯璁ゆ儏鍐典笅D3DRS_CLIPPLANEENABLE 鏄病鏈夋墦寮鐨勶紝搴旇鍦⊿etRenderState涓墜宸ユ墦寮銆? 鍊煎緱娉ㄦ剰鐨勬槸錛欴3DXPLANE榪涜鐭╅樀鍙樻崲鐨勬椂鍊欙紝瑕佸皢闇瑕佷箻鐨勯偅涓煩闃佃繘琛屾眰閫嗗拰杞疆錛屽啀鐩鎬箻銆係DK涓唬鐮佸涓?br>
D3DXPLANE planeNew; D3DXPLANE plane( 0 , 1 , 1 , 0 ); D3DXPlaneNormalize( & plane, & plane); D3DXMATRIX matrix; D3DXMatrixScaling( & matrix, 1.0f , 2.0f , 3.0f ); D3DXMatrixInverse( & matrix, NULL, & matrix); D3DXMatrixTranspose( & matrix, & matrix); D3DXPlaneTransform( & planeNew, & plane, & matrix);
涓婇潰鐨凞3DXPLANE plane(0,1,1,0)濡傛灉浣犺寰椾笉鐩磋鐨勮瘽錛孌X鎻愪緵浜嗕互涓嬩竴浜涚敓鎴怭LANE鐨勫嚱鏁?br>
D3DXPLANE * D3DXPlaneFromPoints( D3DXPLANE * pOut, CONST D3DXVECTOR3 * pV1, CONST D3DXVECTOR3 * pV2, CONST D3DXVECTOR3 * pV3 );
涓婇潰鐨凱V1 PV2 PV3鍒欐槸騫抽潰涓婄殑涓変釜鐐廣傝繖涓嚱鏁板彲浠ュ緢瀹規槗鍦版眰寰椾竴涓笁瑙掑艦鎵鍦ㄧ殑騫抽潰銆?br>
D3DXPLANE * D3DXPlaneFromPointNormal( D3DXPLANE * pOut, CONST D3DXVECTOR3 * pPoint, CONST D3DXVECTOR3 * pNormal );
pPoint涓哄鉤闈笂鐨勪竴涓偣銆?pNormal鏄鉤闈㈢殑娉曠嚎鏂瑰悜銆?br>姣斿錛屼綘鎯沖垱寤轟竴涓按騫沖鉤闈紝騫朵笖鏈濅笂銆?鍒欏彲浠ュ皢pPoint浼犲叆0錛?錛? 鑰宲Normal浼犲叆0,1,0鍗沖彲銆?br>
]]> 鍏充簬鍥捐薄鐨勬媺浼擱棶棰?/title> http://m.shnenglu.com/Leaf/archive/2009/10/10/98276.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 10 Oct 2009 13:25:00 GMT http://m.shnenglu.com/Leaf/archive/2009/10/10/98276.html http://m.shnenglu.com/Leaf/comments/98276.html http://m.shnenglu.com/Leaf/archive/2009/10/10/98276.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/98276.html http://m.shnenglu.com/Leaf/services/trackbacks/98276.html <濡傛灉紿楀彛鐨勮鍥懼尯澶у皬鍜孲wapChain鐨勫ぇ灝忎笉涓錛岄偅涔圖irectX灝嗛氳繃Stretch Blit鏉ヨ嚜鍔ㄥ鐞嗗浘鍍忕殑浼哥緝鍙樺寲銆傚敖綆¤繖鍙兘騫朵笉浠や漢鏈熷緟錛屽洜涓鴻繖鍦ㄨ鍥懼尯鍙樺ぇ鐨勬椂鍊欏皢瀵艱嚧鍥懼儚鐨勬ā緋娿?gt; 浣犺鐨勮繖涓棶棰?瑕佹庝箞鎵嶈兘瑙e喅錛? 鏈変綅鍗氬弸榪欐牱闂繃錛屽洜涓烘渶榪戝皯鏈変笂鍗氬錛屼簬鏄病鏈夊洖絳斿強鏃訛紝璇瘋璋咃紝鎴戣繖閲屽彧鑳借璇存垜浠幇鍦ㄧ殑瑙e喅鍔炴硶銆?br> 褰撳悗鍙扮紦鍐插尯鐨勫垎杈ㄧ巼鍜岃鍥懼尯涓嶇粺涓鐨勬椂鍊欙紝浼氬鑷存媺浼哥幇璞★紝浣跨敾闈㈠彉寰楁ā緋娿?br> 棣栧厛璇翠釜棰樺璇濓細 姝e洜涓哄彉寰楁ā緋婏紝鍥犳鏈変漢鏁呮剰灝嗗悗鍙扮紦鍐插尯鍋氬緱姣旇鍖虹◢澶т竴鐐癸紝榪欐牱鏉ユ姉閿嬌錛岃嚦浜庢晥鏋滃浣曪紝娌℃湁鐪熸瑙佽繃錛屾湁鍏磋叮鐨勫彲浠ヨ瘯璇曘?br> 涓嬮潰璇磋瑙e喅鍔炴硶銆?br>鎴戜滑鐨勮В鍐沖姙娉曚篃寰堢畝鍗曪紝灝卞垎涓夋 1錛岀獥鍙f敼鍙樼殑鏃跺欙紝鍛婅瘔璁懼紿楀彛澶у皬鏀瑰彉銆?br>2錛屾寜鏀瑰彉鍚庣殑紿楀彛閲嶅緩緙撳啿鍖恒?br>3銆傚己鍒惰澶囦涪澶憋紝騫墮噸鏂板姞杞介渶瑕佺殑璧勬簮銆?br> 鐢變簬鍦ㄥ仛榪欎釜涔嬪墠錛岃澶囦涪澶卞凡緇忓仛濂戒簡錛屼簬鏄氨鍋蜂簡涓噿錛岀獥鍙f敼鍙樼殑鏃跺欏氨浼犲叆紿楀彛澶у皬錛屽茍reset 榪欐牱璁懼灝卞己鍒跺浜庝涪澶辯姸鎬併?br> 涓嶇煡閬撴湁娌℃湁璇存竻妤氾紝鍙嶆涓昏鐨勫氨鏄閲嶅緩緙撳啿鍖猴紝騫跺鐞嗚澶囦涪澶遍棶棰樸傘傘?
]]> 濡備綍閬垮厤VS2005涓嬬殑d3d9types.h(1385) warning C4819 http://m.shnenglu.com/Leaf/archive/2009/08/24/94310.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Mon, 24 Aug 2009 12:51:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/24/94310.html http://m.shnenglu.com/Leaf/comments/94310.html http://m.shnenglu.com/Leaf/archive/2009/08/24/94310.html#Feedback 1 http://m.shnenglu.com/Leaf/comments/commentRss/94310.html http://m.shnenglu.com/Leaf/services/trackbacks/94310.html 鐢╒S2005+DirectX9 SDK錛堟墜澶存祴璇曡繃鐨勬槸2004騫?0鏈堢殑DirectX SDK鍜?006騫?鏈堢殑DirectX SDK錛夌紪璇戞父鎴忎細鍑虹幇浠ヤ笅warning錛?/p>
--------------------------------------------------------------------------------
d:\microsoft directx 9.0 sdk (october 2004)\include\d3d9types.h(1385) : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
-------------------------------------------------------------------------------- 瑕佷慨姝h繖涓棶棰橈紝涓嶅繀瑕佸瓨涓篣TF8鐨勬枃浠訛紝鑰屾槸鎼滅儲_D3DDEVINFO_VCACHE錛岀劧鍚庝細鐪嬪埌錛?/p>
typedef struct _D3DDEVINFO_VCACHE ...{ DWORD Pattern; /**//* bit pattern, return value must be FOUR_CC(鎱? 鎱? 鎱? 鎱? */ DWORD OptMethod; /**//* optimization method 0 means longest strips, 1 means vertex cache based */ DWORD CacheSize; /**//* cache size to optimize for (only required if type is 1) */ DWORD MagicNumber; /**//* used to determine when to restart strips (only required if type is 1)*/ } D3DDEVINFO_VCACHE, *LPD3DDEVINFO_VCACHE; 閭e洓涓貢鐮佺殑鍘繪帀灝卞彲浠ヤ簡
鍙傝冧簡http://gamep.mmoh.jp/e39255.html
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/SONIC3D/archive/2007/11/01/1861794.aspx
]]> 杞?娣卞叆鐞嗚ВD3D9 http://m.shnenglu.com/Leaf/archive/2009/08/13/93109.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Wed, 12 Aug 2009 16:29:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/13/93109.html http://m.shnenglu.com/Leaf/comments/93109.html http://m.shnenglu.com/Leaf/archive/2009/08/13/93109.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/93109.html http://m.shnenglu.com/Leaf/services/trackbacks/93109.html 鏂囩珷鏉ユ簮錛?a >http://www.cnblogs.com/effulgent/archive/2009/02/10/1387438.html 娣卞叆鐞嗚ВD3D9瀵瑰浘褰㈢▼搴忓憳鏉ヨ鎰忎箟閲嶅ぇ錛屾垜鎶婁互鍓嶇殑涓浜涘涔犵瑪璁伴兘姹囨昏搗鏉ワ紝甯屾湜瀵規湅鍙嬩滑鏈変簺鎵甯姪錛屽洜涓烘槸闆舵暎絎旇錛屾濊礬寰堟潅錛岃繕璇峰寘娑點?/p>
鍏跺疄鍙浣犺兘瀹岀編鐞嗚ВD3DLOCK銆丏3DUSAGE銆丏3DPOOL銆丩OST DEVICE銆丵UERY銆丳resent錛堬級銆丅eginScene錛堬級銆丒ndScene錛堬級絳夋蹇碉紝灝辯畻鏄悊瑙3D9浜嗭紝 涓嶇煡閬撳ぇ瀹舵湁娌℃湁鍚屾劅銆傛湁濡備笅鍑犱釜闂錛屽鏋滀綘鑳藉渾婊″洖絳斿氨綆楄繃鍏籌細錛夈?br>1銆?nbsp; D3DPOOL_DEFAULT 銆?span lang=EN-US>D3DPOOL_MANAGED 銆?span lang=EN-US>D3DPOOL_SYSTEMMEM鍜?span lang=EN-US>D3DPOOL_SCRATCH鍒板簳鏈変綍鏈川鍖哄埆錛?br>2銆?nbsp; D3DUSAGE鐨勫叿浣撴庝箞浣跨敤錛?br>3銆?nbsp; 浠涔堟槸Adapter錛熶粈涔堟槸D3D Device 錛?span lang=EN-US>HAL Device 鍜?span lang=EN-US>Ref Device 鏈変綍鍖哄埆錛?span lang=EN-US>Device 鐨勭被鍨嬪張鍜?span lang=EN-US>Vertex Processing 綾誨瀷鏈変粈涔堝叧緋伙紵4銆?nbsp; APP錛?span lang=EN-US>CPU 錛夈?span lang=EN-US>RUNTIME 銆?span lang=EN-US>DRIVER 銆?span lang=EN-US>GPU 鏄浣曞崗鍚屽伐浣滅殑錛?span lang=EN-US>D3D API 鏄悓姝ュ嚱鏁拌繕鏄紓姝ュ嚱鏁幫紵5銆?nbsp; Lost Device鍒板簳鍙戠敓浜嗕粈涔堬紵涓轟粈涔堝湪璁懼涓㈠け鍚?span lang=EN-US>D3DPOOL_DEFAULT綾誨瀷璧勬簮闇瑕侀噸鏂板垱寤猴紵
鍦?span lang=EN-US>D3D涓湁涓夊ぇ瀵硅薄錛屼粬浠槸D3D OBJECT 銆?span lang=EN-US>D3D ADAPTER鍜?span lang=EN-US>D3D DEVICE銆?span lang=EN-US>D3D OBJECT寰堢畝鍗曪紝灝辨槸涓涓嬌鐢?span lang=EN-US>D3D鍔熻兘鐨?span lang=EN-US>COM瀵硅薄錛屽叾鎻愪緵浜嗗垱寤?span lang=EN-US>DEVICE鍜屾灇涓?span lang=EN-US>ADAPTER鐨勫姛鑳姐?span lang=EN-US>ADAPTER鏄璁$畻鏈哄浘褰㈢‖浠跺拰杞歡鎬ц兘鐨勪竴涓娊璞★紝鍏跺寘鍚簡DEVICE 銆?span lang=EN-US>DEVICE鍒欐槸D3D 鐨勬牳蹇冿紝瀹冨寘瑁呬簡鏁翠釜鍥懼艦嫻佹按綆$嚎錛屽寘鎷彉鎹€佸厜鐓у拰鍏夋爡鍖栵紙鐫鑹詫級錛屾牴鎹?span lang=EN-US>D3D鐗堟湰涓嶅悓錛屾祦姘寸嚎涔熸湁鍖哄埆錛屾瘮濡傛渶鏂扮殑D3D10 灝卞寘鍚簡鏂扮殑GS 鍑犱綍澶勭悊銆傚浘褰㈢綰跨殑鎵鏈夊姛鑳界敱DRIVER 鎻愪緵錛岃?span lang=EN-US>DIRVER鍒嗕袱綾伙紝涓縐嶆槸GPU 紜歡DRIVER 錛屽彟涓縐嶆槸杞歡DRIVER 錛岃繖灝辨槸涓轟粈涔堝湪D3D 涓富瑕佹湁涓ょ被DEVICE 錛?REF鍜?span lang=EN-US>HAL 錛屼嬌鐢?span lang=EN-US>REF DEVICE鏃訛紝鍥懼艦綆$嚎鐨勫厜鏍呭寲鍔熻兘鐢辮蔣浠?span lang=EN-US>DRIVER鍦?span lang=EN-US>CPU涓婃ā鎷熺殑錛?span lang=EN-US>REF DEVICE浠庡悕瀛楀氨鍙互鐪嬪嚭榪欎釜緇欑‖浠跺巶鍟嗗仛鍔熻兘鍙傝冪敤鐨勶紝鎵浠ユ寜甯哥悊瀹冨簲璇ユ槸鍏ㄨ蔣浠跺疄鐜幫紝鍏峰鍏ㄩ儴DX 鏍囧噯鍔熻兘銆傝屼嬌鐢?span lang=EN-US>HAL DEVICE鏃訛紝RUNTIME 鍒欏皢浣跨敤HAL 紜歡灞傛帶鍒?span lang=EN-US>GPU鏉ュ畬鎴愬彉鎹€佸厜鐓у拰鍏夋爡鍖栵紝鑰屼笖鍙湁HAL DEVICE 涓悓鏃跺疄鐜頒簡紜歡欏剁偣澶勭悊鍜岃蔣浠墮《鐐瑰鐞嗭紙REF DEVICE 涓鑸笉鑳戒嬌鐢ㄧ‖浠墮《鐐瑰鐞嗭紝闄ら潪鑷繁鍦ㄩ┍鍔ㄤ笂鍋氭墜鑴氾紝姣斿PERFHUD 錛夈傚彟澶栬繕鏈変釜涓涓笉甯哥敤鐨?span lang=EN-US>SOFTWARE DEVICE錛岀敤鎴峰彲浠ヤ嬌鐢?span lang=EN-US>DDI緙栧啓鑷繁鐨勮蔣浠跺浘褰㈤┍鍔紝鐒跺悗娉ㄥ唽榪涚郴緇燂紝涔嬪悗渚垮彲鍦ㄧ▼搴忎腑浣跨敤銆?/span>
媯鏌ョ郴緇熻蔣浠剁‖浠舵ц兘銆?br>鍦ㄧ▼搴忕殑寮濮嬫垜浠氨瑕佸垽鏂洰鏍囨満鐨勬ц兘錛屽叾涓昏嫻佺▼鏄細 紜畾瑕佺敤鐨勭紦鍐叉牸寮?br>GetAdapterCount() GetAdapterDisplayMode
GetAdapterIdentifier // 寰楀埌閫傞厤鍣ㄦ弿榪?br>CheckDeviceType //鍒ゆ柇鎸囧畾閫傞厤鍣ㄤ笂鐨勮澶囨槸鍚︽敮鎸佺‖浠跺姞閫?br>GetDeviceCaps //鎸囧畾璁懼鐨勬ц兘錛屼富瑕佸垽鏂槸鍚︽敮鎸佺‖浠墮《鐐瑰鐞?span lang=EN-US>(T&L)GetAdapterModeCount // 寰楀埌閫傞厤鍣ㄤ笂鎸囧畾緙撳啿鏍煎紡鎵鏈夊彲鐢ㄧ殑鏄劇ず妯″紡EnumAdapterModes //鏋氫婦鎵鏈夋樉紺烘ā寮?br>CheckDeviceFormat CheckDeviceMultiSampleType 璇︾粏浣跨敤璇峰弬鑰僁X鏂囨。銆?span lang=EN-US>
WINDOWS鍥懼艦緋葷粺鐨勪富瑕佸垎涓哄洓灞傦細鍥懼艦搴旂敤紼嬪簭銆?span lang=EN-US>D3D RUNTIME銆?span lang=EN-US>SOFTWARE DRIVER鍜?span lang=EN-US>GPU銆傛鍥涘眰鏄寜鍔熻兘鏉ュ垎鐨勶紝瀹為檯涓婁粬浠箣闂寸晫闄愬茍涓嶅姝ゆ槑紜紝姣斿RUNTIME涓叾瀹炰篃鍖呭惈鏈?span lang=EN-US>USER MODE鐨?span lang=EN-US>SOFTWARE DRIVER錛岃緇嗙粨鏋勮繖閲屼笉鍐嶅璇淬傝屽湪RUNTIME閲屾湁涓涓緢閲嶈鐨勭粨鏋勶紝鍙仛command buffer錛屽綋搴旂敤紼嬪簭璋冪敤涓涓?span lang=EN-US>D3D API鏃訛紝RUNTIME 灝嗚皟鐢ㄨ漿鎹㈡垚璁懼鏃犲叧鐨勫懡浠わ紝鐒跺悗灝嗗懡浠ょ紦鍐插埌榪欎釜COMMAND BUFFER 涓紝榪欎釜BUFFER 鐨勫ぇ灝忔槸鏍規嵁浠誨姟璐熻澆鍔ㄦ佹敼鍙樼殑錛屽綋榪欎釜BUFFER 婊″憳涔嬪悗錛?span lang=EN-US>RUNTIME 浼氳鎵鏈夊懡浠?span lang=EN-US>FLUSH 鍒?span lang=EN-US>KERNEL 妯″紡涓嬬殑椹卞姩涓紝鑰岄┍鍔ㄤ腑涔熸槸鏈変竴涓?span lang=EN-US>BUFFER 鐨勶紝鐢ㄦ潵瀛樺偍宸茶杞崲鎴愮殑紜歡鐩稿叧鐨勫懡浠わ紝D3D 涓鑸彧鍏佽鍏剁紦鍐叉渶澶?span lang=EN-US>3 涓撫鐨勫浘褰㈡寚浠わ紝鑰屼笖RUNTIME 鍜?span lang=EN-US>DRIVER閮戒細琚?span lang=EN-US>BUFFER涓殑鍛戒護鍋氶傚綋浼樺寲錛屾瘮濡傛垜浠湪紼嬪簭涓繛緇緗悓涓涓?span lang=EN-US>RENDER STATE錛屾垜浠氨浼氬湪璋冭瘯淇℃伅涓湅鍒板涓嬩俊鎭?#8220;Ignoring redundant SetRenderState - X ”錛岃繖渚挎槸RUNTIME 鑷姩涓㈠純鏃犵敤鐨勭姸鎬佽緗懡浠ゃ傚湪D3D9 涓彲浠ヤ嬌鐢?span lang=EN-US>QUERY鏈哄埗鏉ヤ笌GPU 榪涜寮傛宸ヤ綔錛屾墍璋?span lang=EN-US>QUERY灝辨槸鏌ヨ鍛戒護錛岀敤鏉ユ煡璇?span lang=EN-US>RUNTIME銆?span lang=EN-US>DRIVER鎴栬?span lang=EN-US>GPU鐨勭姸鎬侊紝D3D9 涓殑QUERY 瀵硅薄鏈変笁縐嶇姸鎬侊紝SIGNALED 銆?span lang=EN-US>BUILDING鍜?span lang=EN-US>ISSUED錛屽綋浠栦滑澶勪簬絀洪棽鐘舵佸悗浼氬皢鏌ヨ鐘舵佺疆浜?span lang=EN-US>SIGNALED STATE錛屾煡璇㈠垎寮濮嬪拰緇撴潫錛屾煡璇㈠紑濮嬭〃紺哄璞″紑濮嬭褰曞簲鐢ㄧ▼搴忔墍闇鏁版嵁錛屽綋搴旂敤紼嬪簭鎸囧畾鏌ヨ緇撴潫鍚庯紝濡傛灉琚煡璇㈢殑瀵硅薄澶勪簬絀洪棽鐘舵侊紝鍒欒鏌ヨ瀵硅薄浼氬皢鏌ヨ瀵硅薄緗簬SIGNALED 鐘舵併?span lang=EN-US>GetData鍒欐槸鐢ㄦ潵鍙栧緱鏌ヨ緇撴灉錛屽鏋滆繑鍥炵殑鏄?span lang=EN-US>D3D_OK鍒欑粨鏋滃彲鐢紝濡傛灉浣跨敤D3DGETDATA_FLUSH 鏍囧織錛岃〃紺哄皢COMMAND BUFFER 涓殑鎵鏈夊懡浠ら兘鍙戦佸埌DRIVER 銆傜幇鍦ㄦ垜浠煡閬?span lang=EN-US>D3D API緇濆ぇ閮ㄥ垎閮芥槸鍚屾鍑芥暟錛屽簲鐢ㄧ▼搴忚皟鐢ㄥ悗錛?span lang=EN-US>RUNTIME鍙槸綆鍗曠殑灝嗗叾鍔犲叆鍒?span lang=EN-US>COMMAND BUFFER錛屽彲鑳芥湁浜轟細鐤戞儜鎴戜滑濡備綍嫻嬪畾甯х巼錛熷張濡備綍鍒嗘瀽GPU 鏃墮棿鍛紵瀵逛簬絎竴涓棶棰樻垜浠鐪嬪綋涓甯у畬姣曪紝涔熷氨鏄?span lang=EN-US>PRESENT()鍑芥暟璋冪敤鏄惁琚樆濉烇紝絳旀鏄彲鑳借闃誨涔熷彲鑳戒笉琚樆濉烇紝瑕佺湅RUNTIME 鍏佽緙撳啿涓瓨鍦ㄧ殑鎸囦護鏁伴噺錛屽鏋滆秴榪囬搴︼紝鍒?span lang=EN-US>PRESENT鍑芥暟浼氳闃誨涓嬫潵錛屽浣?span lang=EN-US>PRESENT瀹屽叏涓嶈闃誨錛屽綋GPU 鎵ц綣侀噸鐨勭粯鍒朵換鍔℃椂錛?span lang=EN-US>CPU宸ヤ綔榪涘害浼氬ぇ澶ц秴榪?span lang=EN-US>GPU錛屽鑷存父鎴忛昏緫蹇簬鍥懼艦鏄劇ず錛岃繖鏄劇劧鏄笉琛岀殑銆傛祴瀹?span lang=EN-US>GPU宸ヤ綔鏃墮棿鏄歡寰堥夯鐑︾殑浜嬶紝棣栧厛鎴戜滑瑕佽В鍐沖悓姝ラ棶棰橈紝瑕佹祴閲?span lang=EN-US>GPU鏃墮棿錛岄鍏堟垜浠繀欏昏CPU 涓?span lang=EN-US>GPU寮傛宸ヤ綔錛屽湪D3D9 涓彲浠ヤ嬌鐢?span lang=EN-US>QUERY鏈哄埗鍋氬埌榪欑偣錛岃鎴戜滑鐪嬬湅Accurately Profiling Driect3D API Calls 涓殑渚嬪瓙: IDirect3DQuery9* pQueryEvent;
//1. 鍒涘緩浜嬩歡綾誨瀷鐨勬煡璇簨浠?br>m_pD3DDevice->CreateQuery( D3DQUERYTYPE_EVENT, &pQueryEvent);//2. 鍦?span lang=EN-US>COMMAND BUFFER 涓姞鍏ヤ竴涓煡璇㈢粨鏉熺殑鏍囪錛屾鏌ヨ榛樿寮濮嬩簬CreateDevice pQueryEvent->Issue(D3DISSUE_END);//3. 灝?span lang=EN-US>COMMAND BUFFER 涓殑鎵鏈夊懡浠ゆ竻絀哄埌DRIVER 涓幓錛屽茍寰幆鏌ヨ浜嬩歡瀵硅薄杞崲鍒?span lang=EN-US>SIGNALED 鐘舵侊紝褰?span lang=EN-US>GPU 瀹屾垚CB 涓墍鏈夊懡浠ゅ悗浼氬皢鏌ヨ浜嬩歡鐘舵佽繘琛岃漿鎹€?br>while(S_FALSE == pQueryEvent->GetData( NULL, 0, D3DGETDATA_FLUSH) ) ; LARGE_INTEGER start, stop; QueryPerformanceCounter(&start); SetTexture(); DrawPrimitive(); pQueryEvent->Issue(D3DISSUE_END); while(S_FALSE == pQueryEvent->GetData( NULL, 0, D3DGETDATA_FLUSH) ) ; QueryPerformanceCounter(&stop);
1.絎竴涓狦etData璋冪敤浣跨敤浜咲3DGETDATA_FLUSH鏍囧織錛岃〃紺鴻灝咰OMMAND BUFFER涓殑緇樺埗鍛戒護閮芥竻絀哄埌DRIVER涓幓錛屽綋GPU澶勭悊瀹屾墍鏈夊懡浠ゅ悗浼氬皢榪欎釜鏌ヨ瀵硅薄鐘舵佺疆SIGNALED銆?br>2.灝嗚澶囨棤鍏崇殑SETTEXTURE鍛戒護鍔犲叆鍒癛UNTIME鐨凜OMMAND BUFFER涓?br>3.灝嗚澶囨棤鍏崇殑DrawPrimitive鍛戒護鍔犲叆鍒癛UNTIME鐨凜OMMAND BUFFER涓?br>4.灝嗚澶囨棤鍏崇殑ISSUE鍛戒護鍔犲叆鍒癛UNTIME鐨凜OMMAND BUFFER涓?br>5.GetData浼氬皢BUFFER涓殑鎵鏈夊懡浠ゆ竻絀哄埌DRIVER涓幓錛屾敞鎰忚繖鏄疓ETDATA涓嶄細絳夊緟GPU瀹屾垚鎵鏈夊懡浠ょ殑鎵ц鎵嶈繑鍥炪傝繖閲屼細鏈変竴涓粠鐢ㄦ埛妯″紡鍒版牳蹇冩ā寮忕殑鍒囨崲銆?br>6.絳夊緟DRIVER灝嗘墍鏈夊懡浠ら兘杞崲涓虹‖浠剁浉鍏蟲寚浠わ紝騫跺~鍏呭埌DRIVER BUFFER涓悗錛岃皟鐢ㄤ粠鏍稿績妯″紡榪斿洖鍒扮敤鎴鋒ā寮忋?br>7.GetData寰幆鏌ヨ 鏌ヨ瀵硅薄 鐘舵併傚綋GPU瀹屾垚鎵鏈塂RIVER BUFFER涓殑鎸囦護鍚庝細鏀瑰彉鏌ヨ瀵硅薄鐨勭姸鎬併?/span>
濡備笅鎯呭喌鍙兘娓呯┖RUNTIME COMMAND BUFFER錛屽茍寮曡搗涓涓ā寮忓垏鎹細 1.Lock method錛堟煇浜涙潯浠朵笅鍜屾煇浜汱OCK鏍囧織錛?/p>
2.鍒涘緩璁懼銆侀《鐐圭紦鍐層佺儲寮曠紦鍐插拰綰圭悊 3.瀹屽叏閲婃斁璁懼銆侀《鐐圭紦鍐層佺儲寮曠紦鍐插拰綰圭悊璧勬簮 4.璋冪敤ValidateDevice 5.璋冪敤Present 6.COMMAND BUFFER宸叉弧 7.鐢―3DGETDATA_FLUSH璋冪敤GetData鍑芥暟
瀵逛簬D3DQUERYTYPE_EVENT鐨勮В閲婃垜涓嶈兘瀹屽叏鐞嗚В錛?span>Query for any and all asynchronous events that have been issued from API calls 錛夋槑鐧界殑鏈嬪弸涓瀹氬憡璇夋垜錛屽彧鐭ラ亾褰?span lang=EN-US>GPU 澶勭悊瀹?span lang=EN-US>D3DQUERYTYPE_EVENT 綾誨瀷鏌ヨ鍦?span lang=EN-US>CB 涓姞鍏ョ殑D3DISSUE_END 鏍囪鍚庯紝浼氬皢鏌ヨ瀵硅薄鐘舵佺疆SIGNALED 鐘舵侊紝鎵浠?span lang=EN-US>CPU 絳夊緟鏌ヨ涓瀹氭槸寮傛鐨勩備負浜嗘晥鐜囨墍浠ュ敖閲忓皯鍦?span lang=EN-US>PRESENT 涔嬪墠浣跨敤BEGINSCENE ENDSCENE 瀵癸紝涓轟粈涔堜細褰卞搷鏁堢巼錛熷師鍥犲彧鑳界寽嫻嬶紝鍙兘EndScene 浼氬紩鍙?span lang=EN-US>Command buffer flush 榪欐牱浼氭湁涓涓墽琛岀殑妯″紡鍒囨崲錛屼篃鍙兘浼氬紩鍙慏3D RUNTIME瀵筂ANAGED璧勬簮鐨勪竴浜涙搷浣溿傝屼笖ENDSCENE 涓嶆槸涓涓悓姝ユ柟娉曪紝瀹冧笉浼氱瓑寰?span lang=EN-US>DRIVER鎶婃墍鏈夊懡浠ゆ墽琛屽畬鎵嶈繑鍥炪?nbsp;
D3D RUTIME鐨勫唴瀛樼被鍨嬶紝鍒嗕負3縐嶏紝VIDEO MEMORY錛?span lang=EN-US>VM錛夈?span lang=EN-US>AGP MEMORY 錛?span lang=EN-US>AM 錛夊拰SYSTEM MEMORY 錛?span lang=EN-US>SM 錛夛紝鎵鏈?span lang=EN-US>D3D 璧勬簮閮藉垱寤哄湪榪?span lang=EN-US>3 縐嶅唴瀛樹箣涓紝鍦ㄥ垱寤鴻祫婧愭椂錛屾垜浠彲浠ユ寚瀹氬涓嬪瓨鍌ㄦ爣蹇楋紝D3DPOOL_DEFAULT 銆?span lang=EN-US>D3DPOOL_MANAGED銆?span lang=EN-US>D3DPOOL_SYSTEMMEM鍜?span lang=EN-US>D3DPOOL_SCRATCH銆?span lang=EN-US>VM灝辨槸浣嶄簬鏄懼崱涓婄殑鏄懼瓨錛?span lang=EN-US>CPU鍙兘閫氳繃AGP 鎴?span lang=EN-US>PCI-E鎬葷嚎璁塊棶鍒幫紝璇誨啓閫熷害閮芥槸闈炲父鎱㈢殑錛?span lang=EN-US>CPU榪炵畫鍐?span lang=EN-US>VM紼嶅井蹇簬璇伙紝鍥犱負CPU 鍐?span lang=EN-US>VM鏃朵細鍦?span lang=EN-US>CACHE涓垎閰?span lang=EN-US>32鎴?/span>64 涓瓧鑺傦紙鍙栧喅浜?span lang=EN-US>CACHE LINE闀垮害錛夌殑鍐欑紦鍐詫紝褰撶紦鍐叉弧鍚庝細涓嬈℃у啓鍏?span lang=EN-US>VM錛?span lang=EN-US>SM灝辨槸緋葷粺鍐呭瓨錛?span lang=EN-US>CPU璇誨啓閮介潪甯稿揩錛屽洜涓?span lang=EN-US>SM鏄CACHE 鍒?span lang=EN-US>2綰х紦鍐茬殑錛屼絾GPU 鍗翠笉鑳界洿鎺ヨ闂埌緋葷粺緙撳啿錛屾墍浠ュ垱寤哄湪SM 涓殑璧勬簮錛?span lang=EN-US>GPU鏄笉鑳界洿鎺ヤ嬌鐢ㄧ殑錛?span lang=EN-US>AM鏄渶楹葷儲鐨勪竴涓被鍨嬶紝AM 瀹為檯涔熷瓨鍦ㄤ簬緋葷粺鍐呭瓨涓紝浣嗚繖閮ㄥ垎MEM 涓嶄細琚?span lang=EN-US>CPU CACHE錛屾剰鍛崇潃CPU 璇誨啓AM 閮戒細鍐欐潵涓?span lang=EN-US>CACHE MISSING鐒跺悗鎵嶉氳繃鍐呭瓨鎬葷嚎璁塊棶AM 錛屾墍浠?span lang=EN-US>CPU璇誨啓AM 鐩告瘮SM 浼氭瘮杈冩參錛屼絾榪炵畫鐨勫啓浼氱◢寰揩浜庤錛屽師鍥犲氨鏄?span lang=EN-US>CPU鍐?span lang=EN-US>AM浣跨敤浜?#8220;write combining ”錛岃屼笖GPU 鍙互鐩存帴閫氳繃AGP 鎴?span lang=EN-US>PCI-E鎬葷嚎璁塊棶AM 銆?nbsp;
濡傛灉鎴戜滑浣跨敤D3DPOOL_DEFAULT鏉ュ垱寤鴻祫婧愶紝鍒欒〃紺鴻D3D RUNTIME鏍規嵁鎴戜滑鎸囧畾鐨勮祫婧愪嬌鐢ㄦ柟娉曟潵鑷姩浣跨敤瀛樺偍綾誨瀷錛屼竴鑸槸VM鎴?span lang=EN-US>AM錛岀郴緇熶笉浼氬湪鍏朵粬鍦版柟榪涜棰濆澶囦喚錛屽綋璁懼涓㈠け鍚庯紝榪欎簺璧勬簮鍐呭涔熶細琚涪澶辨帀銆?span>浣嗙郴緇熷茍涓嶄細鍦ㄥ垱寤虹殑鏃跺欎嬌鐢―3DPOOL_SYSTEMMEM鎴朌3DPOOL_MANAGED鏉ユ浛鎹㈠畠錛屾敞鎰忎粬浠槸瀹屽叏涓嶅悓鐨凱OOL綾誨瀷錛屽垱寤哄埌D3DPOOL_DEFAULT涓殑綰圭悊鏄笉鑳借CPU LOCK鐨勶紝闄ら潪鏄姩鎬佺汗鐞嗐備絾鍒涘緩鍦―3DPOOL_DEFAULT涓殑VB IB RENDERTARGET BACK BUFFERS鍙互琚獿OCK銆傚綋浣犵敤D3DPOOL_DEFAULT鍒涘緩璧勬簮鏃訛紝濡傛灉鏄懼瓨宸茬粡浣跨敤瀹屾瘯錛屽垯鎵樼璧勬簮浼氳鎹㈠嚭鏄懼瓨鏉ラ噴鏀捐凍澶熺殑絀洪棿銆?nbsp;D3DPOOL_SYSTEMMEM鍜?span lang=EN-US>D3DPOOL_SCRATCH 閮芥槸浣嶄簬SM 涓殑錛屽叾宸埆鏄嬌鐢?span lang=EN-US>D3DPOOL_SYSTEMMEM 鏃訛紝璧勬簮鏍煎紡鍙楅檺浜?span lang=EN-US>Device 鎬ц兘錛屽洜涓鴻祫婧愬緢鍙兘浼氳鏇存柊鍒?span lang=EN-US>AM 鎴?span lang=EN-US>VM 涓幓渚涘浘褰㈢郴緇熶嬌鐢紝浣?span lang=EN-US>SCRATCH 鍙彈RUNTIME 闄愬埗錛屾墍浠ヨ繖縐嶈祫婧愭棤娉曡鍥懼艦緋葷粺浣跨敤銆?span> D3DRUNTIME浼氫紭鍖朌3DUSAGE_DYNAMIC 璧勬簮錛屼竴鑸皢鍏舵斁緗簬AM涓紝浣嗕笉鏁㈠畬鍏ㄤ繚璇併傚彟澶栦負浠涔堥潤鎬佺汗鐞嗕笉鑳借LOCK錛屽姩鎬佺汗鐞嗗嵈鍙互錛岄兘鍏崇郴鍒癉3D RUNTIME鐨勮璁★紝鍦ㄥ悗闈3DLOCK璇存槑涓細鍙欒堪銆?/span>
D3DPOOL_MANAGED 琛ㄧず璁?span lang=EN-US>D3D RUNTIME鏉ョ鐞嗚祫婧愶紝琚垱寤虹殑璧勬簮浼氭湁2 浠芥嫹璐濓紝涓浠藉湪SM 涓紝涓浠藉湪VM/AM 涓紝鍒涘緩鐨勬椂鍊欒鏀劇疆L 鍦?span lang=EN-US>SM錛屽湪GPU 闇瑕佷嬌鐢ㄨ祫婧愭椂D3D RUNTIME 鑷姩灝嗘暟鎹嫹璐濆埌VM 涓幓錛屽綋璧勬簮琚?span lang=EN-US>GPU淇敼鍚庯紝RUNTIME 鍦ㄥ繀瑕佹椂鑷姩灝嗗叾鏇存柊鍒?span lang=EN-US>SM涓潵錛岃屽湪SM 涓慨鏀瑰悗涔熶細琚?span lang=EN-US>UPDATE鍒?span lang=EN-US>VM鍘諱腑銆傛墍浠ヨCPU 鎴栬?span lang=EN-US>GPU棰戝彂淇敼鐨勬暟鎹紝涓瀹氫笉瑕佷嬌鐢ㄦ墭綆$被鍨嬶紝榪欐牱浼氫駭鐢熼潪甯告槀璐電殑鍚屾璐熸媴銆傚綋LOST DEVICE 鍙戠敓鍚庯紝RESET 鏃?span lang=EN-US>RUNTIME浼氳嚜鍔ㄥ埄鐢?span lang=EN-US>SM涓殑COPY 鏉ユ仮澶?span lang=EN-US>VM涓殑鏁版嵁錛屽洜涓哄浠藉湪SM 涓殑鏁版嵁騫朵笉鏄叏閮ㄩ兘浼氭彁浜ゅ埌VM 涓紝鎵浠ュ疄闄呭浠芥暟鎹彲浠ヨ繙澶氫簬VM 瀹歸噺錛岄殢鐫璧勬簮鐨勪笉鏂澶氾紝澶囦喚鏁版嵁寰堝彲鑳借浜ゆ崲鍒扮‖鐩樹笂錛岃繖鏄?span lang=EN-US>RESET鐨勮繃紼嬪彲鑳藉彉寰楀紓甯哥紦鎱紝RUNTIME 緇欐瘡涓?span lang=EN-US>MANAGED璧勬簮閮戒繚鐣欎簡涓涓椂闂存埑錛屽綋RUNTIME 闇瑕佹妸澶囦喚鏁版嵁鎷瘋礉鍒?span lang=EN-US>VM涓椂錛?span lang=EN-US>RUNTIME浼氬湪VM 涓垎閰嶆樉瀛樼┖闂達紝濡傛灉鍒嗛厤澶辮觸錛岃〃紺?span lang=EN-US>VM宸茬粡娌℃湁鍙敤絀洪棿錛岃繖鏍?span lang=EN-US>RUNTIME浼氫嬌鐢?span lang=EN-US>LRU綆楁硶鏍規嵁鏃墮棿鎴抽噴鏀劇浉鍏寵祫婧愶紝SetPriority 閫氳繃鏃墮棿鎴蟲潵璁劇疆璧勬簮鐨勪紭鍏堢駭錛屾渶榪戝父鐢ㄧ殑璧勬簮灝嗘嫢鏈夐珮鐨勪紭鍏堢駭錛岃繖鏍?span lang=EN-US>RUNTIME閫氳繃浼樺厛綰у氨鑳藉悎鐞嗙殑閲婃斁璧勬簮錛屽彂鐢熼噴鏀懼悗椹笂鍙堣浣跨敤榪欑鎯呭喌鐨勫嚑鐜囦細姣旇緝灝忥紝搴旂敤紼嬪簭榪樺彲浠ヨ皟鐢?span lang=EN-US>EvictManagedResources寮哄埗娓呯┖VM 涓殑鎵鏈?span lang=EN-US>MANAGED璧勬簮錛岃繖鏍峰鏋滀笅涓甯ф湁鐢ㄥ埌MANAGED 璧勬簮錛?span lang=EN-US>RUNTIME闇瑕侀噸鏂拌澆鍏ワ紝榪欐牱瀵規ц兘鏈夊緢澶у獎鍝嶏紝騫蟲椂涓鑸笉瑕佷嬌鐢紝浣嗗湪鍏沖崱杞崲鐨勬椂鍊欙紝榪欎釜鍑芥暟鏄潪甯告湁鐢ㄧ殑錛屽彲浠ユ秷闄?span lang=EN-US>VM涓殑鍐呭瓨紕庣墖銆?span lang=EN-US>LRU綆楁硶鍦ㄦ煇浜涙儏鍐典笅鏈夋ц兘緙洪櫡錛屾瘮濡傜粯鍒朵竴甯ф墍闇璧勬簮閲忔棤娉曡VM 瑁呬笅鐨勬椂鍊欙紙MANAGED 錛夛紝浣跨敤LRU 綆楁硶浼氬甫鏉ヤ弗閲嶇殑鎬ц兘娉㈠姩錛屽涓嬩緥瀛愶細
BeginScene(); Draw(Box0); Draw(Box1); Draw(Box2); Draw(Box3); Draw(Circle0); Draw(Circle1); EndScene(); Present();
鍋囪VM 鍙兘瑁呬笅鍏朵腑5涓嚑浣曚綋鐨勬暟鎹紝閭d箞鏍規嵁LRU 綆楁硶錛屽湪緇樺埗Box3 涔嬪墠蹇呴』娓呯┖閮ㄥ垎鏁版嵁錛岄偅娓呯┖鐨勫繀鐒舵槸Circle0 ……錛屽緢鏄劇劧娓呯┖Box2 鏄渶鍚堢悊鐨勶紝鎵浠ヨ繖鏄?span lang=EN-US>RUNTIME浣跨敤MRU 綆楁硶澶勭悊鍚庣畫Draw Call 鑳藉緢濂界殑瑙e喅鎬ц兘娉㈠姩闂錛屼絾璧勬簮鏄惁琚嬌鐢ㄦ槸鎸?span lang=EN-US>FRAME涓哄崟浣嶆潵媯嫻嬬殑錛屽茍涓嶆槸姣忎釜DRAW CALL 閮借璁板綍錛屾瘡涓?span lang=EN-US>FRAME鐨勬爣蹇楀氨鏄?span lang=EN-US>BEGINSCENE/ENDSCENE瀵癸紝鎵浠ュ湪榪欑鎯呭喌涓嬪悎鐞嗕嬌鐢?span lang=EN-US>BEGINSCENE/ENDSCENE瀵瑰彲浠ュ緢濂界殑鎻愰珮VM 涓嶅鎯呭喌涓嬬殑鎬ц兘銆傛牴鎹?span lang=EN-US>DX鏂囨。鐨勬彁紺烘垜浠繕鍙互浣跨敤QUERY 鏈哄埗鏉ヨ幏寰楁洿澶氬叧浜?span lang=EN-US>RUNTIME MANAGED RESOURCE淇℃伅錛屼絾濂藉儚鍙湪RUNTIME DEBUG 妯″紡涓嬫湁鐢紝鐞嗚ВRUNTIME 濡備綍MANAGE RESOURCE 寰堥噸瑕侊紝浣嗙紪鍐欑▼搴忕殑鏃跺欎笉瑕佸皢榪欎簺緇嗚妭鏆撮湶鍑烘潵錛屽洜涓鴻繖浜涗笢瑗塊兘鏄粡甯鎬細鍙樼殑銆傛渶鍚庤繕瑕佹彁閱掔殑鏄紝涓嶅厜RUNTEIME 浼?span lang=EN-US>MANAGE RESOURCE錛?span lang=EN-US>DRIVER涔熷緢鍙兘涔熷疄鐜頒簡榪欎簺鍔熻兘錛屾垜浠彲浠ラ氳繃D3DCAPS2_CANMANAGERESOURCE 鏍囧織鍙栧緱DRIVER 鏄惁瀹炵幇璧勬簮綆$悊鍔熻兘鐨勪俊鎭紝鑰屼笖涔熷彲浠ュ湪CreateDevice 鐨勬椂鍊欐寚瀹?span lang=EN-US>D3DCREATE_DISABLE_DRIVER_MANAGEMENT鏉ュ叧闂?span lang=EN-US>DRIVER璧勬簮綆$悊鍔熻兘銆?nbsp;
D3DLOCK 鎺㈢儲D3D RUNTIME 宸ヤ綔
濡傛灉LOCK DEFAULT 璧勬簮浼氬彂鐢熶粈涔堟儏鍐靛憿錛?span lang=EN-US>DEFAULT璧勬簮鍙兘鍦?span lang=EN-US>VM鎴?span lang=EN-US>AM涓紝濡傛灉鍦?span lang=EN-US>VM涓紝蹇呴』鍦ㄧ郴緇熷唴瀹逛腑寮杈熶竴涓復鏃剁紦鍐茶繑鍥炵粰鏁版嵁錛屽綋搴旂敤紼嬪簭灝嗘暟鎹~鍏呭埌涓存椂緙撳啿鍚庯紝UNLOCK 鐨勬椂鍊欙紝RUNTIME 浼氬皢涓存椂緙撳啿鐨勬暟鎹紶鍥炲埌VM 涓幓錛屽鏋滆祫婧?span lang=EN-US>D3DUSAGE灞炴т笉鏄?span lang=EN-US>WRITEONLY鐨勶紝鍒欑郴緇熻繕闇瑕佸厛浠?span lang=EN-US>VM閲屾嫹璐濅竴浠藉師濮嬫暟鎹埌涓存椂緙撳啿鍖猴紝榪欏氨鏄負浠涔堜笉鎸囧畾WRITEONLY 浼氶檷浣庣▼搴忔ц兘鐨勫師鍥犮?span lang=EN-US>CPU鍐?span lang=EN-US>AM涔熸湁闇瑕佹敞鎰忕殑鍦版柟錛屽洜涓?span lang=EN-US>CPU鍐?span lang=EN-US>AM涓鑸槸WRITE COMBINING 錛屼篃灝辨槸璇村皢鍐欑紦鍐插埌涓涓?span lang=EN-US>CACHE LINE涓婏紝褰?span lang=EN-US>CACHE LINE婊′簡涔嬪悗鎵?span lang=EN-US>FLUSH鍒?span lang=EN-US>AM涓幓錛岀涓涓娉ㄦ剰鐨勫氨鏄啓鏁版嵁蹇呴』鏄?span lang=EN-US>WEAK ORDER鐨勶紙鍥懼艦鏁版嵁涓鑸兘婊¤凍榪欎釜瑕佹眰錛夛紝鎹D3DRUNTIME 鍜?span lang=EN-US>NV DIRVER鏈夌偣灝?span lang=EN-US>BUG錛屽氨鏄湪CPU 娌℃湁FLUSH 鍒?span lang=EN-US>AM鏃訛紝GPU 灝卞紑濮嬬粯鍒剁浉鍏寵祫婧愪駭鐢熺殑閿欒錛岃繖鏃惰浣跨敤SFENCE 絳夋寚浠?span lang=EN-US>FLUSH CACHE LINE銆傜浜岃灝介噺涓嬈″啓婊′竴涓?span lang=EN-US>CACHE LINE錛屽惁鍒欎細鏈夐澶栧歡榪燂紝鍥犱負CPU 姣忔蹇呴』FLUSH 鏁翠釜CACHE LINE 鍒扮洰鏍囷紝浣嗗鏋滄垜浠彧鍐欎簡LINE 涓儴鍒嗗瓧鑺傦紝CPU 蹇呴』鍏堜粠AM 涓鍙栨暣涓?span lang=EN-US>LINE闀挎暟鎹?span lang=EN-US>COMBINE鍚庨噸鏂?span lang=EN-US>FLUSH銆傜涓夊敖鍙兘欏哄簭鍐欙紝闅忔満鍐欎細璁?span lang=EN-US>WRITE COMBINING鍙嶈屽彉鎴愮瘡璧橈紝濡傛灉鏄殢鏈哄啓璧勬簮錛屼笉瑕佷嬌鐢?span lang=EN-US>D3DUSAGE_DYNAMIC鍒涘緩錛岃浣跨敤D3DPOOL_MANAGED 錛岃繖鏍峰啓浼氬畬鍏ㄥ湪SM 涓畬鎴愩?/p>
鏅氱汗鐞嗭紙D3DPOOL_DEFAULT 錛夋槸涓嶈兘琚攣瀹氱殑錛屽洜涓哄叾浣嶄簬VM 涓紝鍙兘閫氳繃UPDATESURFACE 鍜?span lang=EN-US>UPDATETEXTURE鏉ヨ闂紝涓轟粈涔?span lang=EN-US>D3D涓嶈鎴戜滑閿佸畾闈欐佺汗鐞嗭紝鍗磋鎴戜滑閿佸畾闈欐?span lang=EN-US>VB IB鍛紵鎴戠寽嫻嬪彲鑳芥湁2 涓柟闈㈢殑鍘熷洜錛岀涓灝辨槸綰圭悊鐭╅樀涓鑸崄鍒嗗簽澶э紝涓旂汗鐞嗗湪GPU 鍐呴儴宸蹭簩緇存柟寮忓瓨鍌紱絎簩鏄汗鐞嗗湪GPU 鍐呴儴鏄互NATIVE FORMAT 鏂瑰紡瀛樺偍鐨勶紝騫朵笉鏄槑鏂?span lang=EN-US>RGBA鏍煎紡銆傚姩鎬佺汗鐞嗗洜涓鴻〃鏄庤繖涓汗鐞嗛渶瑕佺粡甯鎬慨鏀癸紝鎵浠?span lang=EN-US>D3D浼氱壒鍒瓨鍌ㄥ寰咃紝楂橀鐜囦慨鏀圭殑鍔ㄦ佺汗鐞嗕笉閫傚悎鐢ㄥ姩鎬佸睘鎬у垱寤猴紝鍦ㄦ鍒嗕袱縐嶆儏鍐佃鏄庯紝涓縐嶆槸GPU 鍐欏叆鐨?span lang=EN-US>RENDERTARGET錛屼竴縐嶆槸CPU 鍐欏叆鐨?span lang=EN-US>TEXTURE VIDEO錛屾垜浠煡閬撳姩鎬佽祫婧愪竴鑸槸鏀劇疆鍦?span lang=EN-US>AM涓殑錛?span lang=EN-US>GPU璁塊棶AM 闇瑕佺粡榪?span lang=EN-US>AGP/PCI-E鎬葷嚎錛岄熷害杈?span lang=EN-US>VM鎱㈣澶氾紝鑰?span lang=EN-US>CPU璁塊棶AM 鍙堣緝SM 鎱㈠緢澶氾紝濡傛灉璧勬簮涓哄姩鎬佸睘鎬э紝鎰忓懗鐫GPU 鍜?span lang=EN-US>CPU璁塊棶璧勬簮浼氭寔緇殑寤惰繜錛屾墍浠ユ綾昏祫婧愭渶濂戒互D3DPOOL_DEFAULT 鍜?span lang=EN-US>D3DPOOL_SYSTEMMEM鍚勫垱寤轟竴浠斤紝鑷繁鎵嬪姩榪涜鍙屽悜鏇存柊鏇村ソ銆傚崈涓囧埆 RENDERTARGET 浠?span lang=EN-US>D3DPOOL_MANAGED 灞炴у垱寤猴紝榪欐牱鏁堢巼鏋佷綆錛屽師鍥犺嚜宸卞垎鏋愩傝屽浜庢敼鍔ㄤ笉澶綣佺殑璧勬簮鍒欐帹鑽愪嬌鐢?span lang=EN-US>DEFAULT鍒涘緩錛岃嚜宸辨墜鍔ㄦ洿鏂幫紝鍥犱負涓嬈℃洿鏂扮殑鏁堢巼鎹熷け榪滄瘮GPU 鎸佺畫璁塊棶AM 甯︽潵鐨勬崯澶辮灝忋?nbsp;
涓嶅悎鐞嗙殑LOCK 浼氫弗閲嶅獎鍝嶇▼搴忔ц兘錛屽洜涓轟竴鑸?span lang=EN-US>LOCK闇瑕佺瓑寰?span lang=EN-US>COMMAND BUFFER鍓嶉潰鐨勭粯鍒舵寚浠ゅ叏閮ㄦ墽琛屽畬姣曟墠鑳借繑鍥烇紝鍚﹀垯寰堝彲鑳戒慨鏀規鍦ㄤ嬌鐢ㄧ殑璧勬簮錛屼粠LOCK 榪斿洖鍒頒慨鏀瑰畬姣?span lang=EN-US>UNLOCK榪欐鏃墮棿GPU 鍏ㄩ儴澶勪簬絀洪棽鐘舵侊紝娌℃湁鍚堢悊浣跨敤GPU 鍜?span lang=EN-US>CPU鐨勫茍琛屾э紝DX8.0 寮曡繘浜嗕竴涓柊鐨?span lang=EN-US>LOCK鏍囧織D3DLOCK_DISCARD錛岃〃紺轟笉浼氳鍙栬祫婧愶紝鍙細鍏ㄥ啓璧勬簮錛岃繖鏍烽┍鍔ㄥ拰RUNTIME閰嶅悎鏉ヤ簡涓瀿澶╄繃嫻鳳紝绔嬪嵆榪斿洖緇欏簲鐢ㄧ▼搴忓彟澶栧潡VM鍦板潃鎸囬拡錛岃屽師鎸囬拡鍦ㄦ湰嬈NLOCK涔嬪悗琚涪寮冧笉鍐嶄嬌鐢紝榪欐牱CPU LOCK鏃犻渶絳夊緟GPU浣跨敤璧勬簮瀹屾瘯錛岃兘緇х畫鎿嶄綔鍥懼艦璧勬簮錛堥《鐐圭紦鍐插拰绱㈠紩緙撳啿錛夛紝榪欐妧鏈彨VB IB鎹㈠悕錛坮enaming錛夈?/span>
寰堝鍥版儜鏉ユ簮浜庡簳灞傝祫鏂欑殑涓嶈凍錛岀浉淇¤鏄疢S寮鏀綝3D婧愮爜錛屽紑鏀鵑┍鍔ㄦ帴鍙h鑼冿紝NV / ATI鏄劇ず寮鏀鵑┍鍔ㄥ拰紜歡鏋舵瀯淇℃伅錛岃繖浜涗笢瑗垮氨寰堝鏄撳紕鏄庣櫧浜嗐?/p>
欏轟究鍋氫釜涔︾殑騫垮憡 銆婁漢宸ユ櫤鑳斤細涓縐嶇幇浠f柟娉曘嬩腑鏂囩増 鍗撹秺緗戝凡緇忔湁璐э紝AI宸ㄤ綔錛屼笉榪囬槄璇婚渶瑕佺浉褰撶殑鍩虹錛屽鎬濈淮闈炲父鏈夊惎榪紝鎯充拱鐨勬湅鍙嬩笉瑕侀敊榪囥傚悗闈㈡垜浼氬皢瀛︿範閲嶇偣浠庡浘褰㈣漿鍒癆I涓婃潵錛屽AI鏈夊叴瓚g殑鏈嬪弸涓璧蜂氦嫻併?/p>
]]> Direct3D9 涓殑Gamma鐭 http://m.shnenglu.com/Leaf/archive/2009/08/13/93107.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Wed, 12 Aug 2009 16:17:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/13/93107.html http://m.shnenglu.com/Leaf/comments/93107.html http://m.shnenglu.com/Leaf/archive/2009/08/13/93107.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/93107.html http://m.shnenglu.com/Leaf/services/trackbacks/93107.html Gamma鏍℃ 鍦―3D9涓?br> 鍙互鎸囨槑涓寮犵汗鐞嗘槸涓嶆槸Gamma 2.2錛坰RGB) 杈冩.椹卞姩紼嬪簭灝嗕細鍦⊿etTexture鐨勬椂鍊欏皢鍏惰漿鎹㈠埌綰挎х殑Gamma浠ヨ繘琛岃瀺鍚堟搷浣溿傛垨鑰呴噰鏍峰櫒灝嗕細鍦ㄦ煡璇㈢殑鏃跺欏皢鍏跺彉涓虹嚎鎬ф暟鎹?br> 鍙互鎸囨槑鍍忕礌綆$嚎鍦ㄨ緭鍑哄埌娓叉煋鐩爣鐨勬椂鍊欐槸鍚﹀皢Gamma鏍℃鍙樻崲鍥瀞RGB絀洪棿銆?br> 鎵鏈夊叾瀹冮鑹?clear color, material color, vertex color, etc錛夐兘琚亣瀹氫負綰挎х┖闂翠腑銆傚簲鐢ㄧ▼搴忓彲浠ョ敤鍍忕礌鐫鑹插櫒鎸囦護瀵瑰啓鍏ュ埌甯х紦瀛樹腑鐨勯鑹茶繘琛孏amma鏍℃銆傜嚎鎬у寲鎿嶄綔鍙RGB閫氶亾鏈夋晥錛屽拷鐣LPHA閫氶亾銆?br> 涓嶆槸鎵鏈夌殑琛ㄩ潰鏍煎紡閮藉彲浠ョ嚎鎬у寲銆傚彧鏈夐氳繃 IDirect3D9::CheckDeviceFormat 媯嫻嬶紙鍙傛暟涓篋3DUSAGE_QUERY_SRGBREAD 錛夌殑鏍煎紡鎵嶅彲浠ヨ綰挎у寲銆傞櫎姝や箣澶栵紝閲囨牱鐘舵丏3DSAMP_SRGBTEXTURE 涔熶細琚拷鐣ャ傚彧鏈夋棤絎﹀彿綰圭悊鏍煎紡鏀寔榪欑鍙樻崲銆傛棤絎﹀彿綰圭悊鏍煎紡鏄寚浠呭寘鍚湁R G B 鍜?L鎴愬垎鐨勭汗鐞嗘牸寮忋傚鏋滃寘鍚獳LPHA閫氶亾錛岄偅瀹冨皢琚拷鐣ャ傚鏋滄販鍚堢殑鏍煎紡鏀寔sRGB綰挎у寲錛岄偅涔堝彧鏈夋棤絎﹀彿閫氶亾鏈夋晥銆傜悊鎯蟲儏鍐墊槸紜歡鍦ㄧ汗鐞嗚繃婊ゅ墠瀹炵幇綰挎у寲銆備絾鍦―3D9涓紝紜歡鍙湁鍦ㄧ汗鐞嗚繃婊ゅ悗鎵嶅厑璁哥嚎鎬у寲銆?br> 涓嶆槸鎵鏈夌殑琛ㄩ潰閮藉彲浠ヨ鍐欒繘sRGB絀洪棿錛屽彧鏈夐氳繃鐢―3DUSAGE_QUERY_SRGBWRITE榪涜IDirect3D9::CheckDeviceFormat 嫻嬭瘯鐨勮〃闈㈡牸寮忔墠鑳借繘琛岀嚎鎬у寲銆傚彟澶栵紝娓叉煋鐘舵佷腑鐨凞3DRS_SRGBWRITEENABLE鏍囧織灝嗕細琚拷鐣ャ傛瘡涓氶亾8浣嶇殑鏃犵鍙稲GB鏍煎紡鏄瘮杈冮傚悎鐨勬牸寮忋?br>鐞嗘兂鍦幫紝紜歡灝嗕細鍦ㄧ嚎鎬х┖闂翠笂榪涜甯х紦瀛樿瀺鍚堟搷浣溿備絾瀹為檯涓婄‖浠跺彧鑳藉湪鍍忕礌綆$嚎澶勭悊鍚庯紝甯х紦瀛樿瀺鍚堝墠榪涜銆傝繖鎰忓懗鐫鍦╯RGB涓繘琛屽撫緙撳瓨铻嶅悎鎿嶄綔浼氬鑷撮敊璇殑緇撴灉銆傚綋娓呴櫎娓叉煋鐩爣鏃躲侱3DRS_SRGBWRITEENABLE 鏍囧織 is Honored.瀵逛簬紜歡鏀寔澶氭覆鏌撶洰鏍囨垨澶氬厓绱犵汗鐞嗙殑鎯呭喌錛屽彧鏈夌涓涓覆鏌撶洰鏍囧拰絎竴涓厓绱犱細琚啓鍏ョ紦瀛樸?br> API鍙樺寲
API Changes
// New sampler state (DWORD) 鏂扮殑閲囨牱鍣ㄧ姸鎬?
// If this is nonzero, the texture is linearized on lookup.
濡傛灉瀹冮潪0錛岀汗鐞嗗湪鏌ヨ鏄嚎鎬у寲銆?
D3DSAMP_SRGBTEXTURE // Default FALSE 榛樿涓哄亣
// New render state (DWORD)
鏂扮殑娓叉煋鐘舵?
D3DRS_SRGBWRITEENABLE // Default FALSE 榛樿涓哄亣
// New usage flags
鏂扮殑浣跨敤鏍囧織
D3DUSAGE_QUERY_SRGBWRITE
D3DUSAGE_QUERY_SRGBREAD
紿楀彛涓嬬殑浜ゆ崲閾?/pre>
涓轟簡榪涜姝g‘鐨勮瀺鍚堟搷浣滐紝搴旂敤紼嬪簭淇濆瓨浠栦滑鐨勪氦鎹㈤摼鍦ㄧ嚎鎬х┖闂翠腑鐨勫悗鍙扮紦鍐插尯鏄潪甯稿繀瑕佺殑銆傚洜涓烘闈㈤氬父鎯呭喌涓嬫槸涓嶅湪綰挎х┖闂寸殑銆傛墍浠ラ渶瑕佸湪鍚庡彴緙撳啿鍖哄唴瀹規樉紺哄墠榪涜Gamma鏍℃銆?/pre>
搴旂敤紼嬪簭鍙互閫氳繃鏂板棰濆鐨勭紦鍐插尯鏉ヨ嚜鎴戞牎姝o紝騫舵妸浠栬嚜宸叉紜殑緇撴灉浠庣嚎鎬х┖闂村鍒跺埌鍚庡彴緙撳啿鍖恒傚綋椹卞姩灝咷amma鏍℃浣滀負閮ㄥ垎鏄劇ず鐨勬椂鍊欙紝鏄彲浠ラ伩鍏嶄嬌鐢ㄩ澶栫殑緙撳啿鍖虹殑銆?
]]> IDirect3DDevice9::Reset 澶辮觸鐨勫師鍥?/title> http://m.shnenglu.com/Leaf/archive/2009/08/11/92897.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Tue, 11 Aug 2009 06:22:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/11/92897.html http://m.shnenglu.com/Leaf/comments/92897.html http://m.shnenglu.com/Leaf/archive/2009/08/11/92897.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/92897.html http://m.shnenglu.com/Leaf/services/trackbacks/92897.html 鎽樿嚜: http://www.gamedev.net/community/forums/topic.asp?topic_id=146731
1) One of the parameters you pass is probably not possible on the hardware, e.g. a depth buffer format which won't work with the back buffer format. 浣犱紶鍏ョ殑D3DPRESENT_PARAMETERS鍜屼綘鐨勭‖浠朵笉絎︼紝鍙兘鏄繁搴︽牸寮忎笌浣犵殑鍚庡彴緙撳啿鏍煎紡涓嶅尮閰嶃傞氬父鎯呭喌涓嬫垜浠槸灝嗗厛鍓嶇殑D3DPRESENT_PARAMETERS淇濆瓨錛孯ESET鐨勬椂鍊欎紶鍏ワ紝鑻ユ槸榪欑鎯呭喌錛屽垯涓嶅繀鎷呭績榪欎釜闂
2) The debug D3D runtime will tell you exactly "why": 鎶奃irectX Control Pannel涓殑Direct3D寮涓鴻皟璇曟ā寮忥紝榪愯榪囧悗錛岀紪璇戝櫒鐨勪俊鎭彁紺烘閲屼細杈撳嚭鍘熷洜錛屽鍗婃槸鍥犱負浣嶄簬D3DPOOL_DEFAULT涓殑鍐呭鏈噴鏀懼畬鑰屽鑷寸殑
a. When you install the DirectX SDK you get the option to install the debug or retail runtime, if you're developing software, always choose debug.
瀹夎SDK鐨勬椂鍊欙紝浣犲彲浠ラ夊垯鏄皟寮忚繕鏄繍琛屾ā寮忥紝濡傛灉浣犳槸杞歡寮鍙戯紝閫氬父閫夋嫨涓鴻皟寮?/div>
b. Go to the control panel and open the DirectX applet. 鍒癝DK涓妸DirectX Control Pannel灝忕▼搴忔墦寮
c. Go to the Direct3D tab and put the "debug output level" slider to maximum.
鎶奃irectX Control Pannel涓殑Direct3D寮涓鴻皟璇曟ā寮?/div>
d. Run your application in the debugger (if using MSVC, press F5) and repeat whatever process causes it to fail. 鍦ㄨ皟璇曠姸鎬佷笅榪愯浣犵殑紼嬪簭錛岄噸澶嶅鐞嗗鑷翠綘鍑洪敊鐨勫湴鏂?br>
e. Once it fails, close the app if necessary and return to MSVC, now look in the "output" pane (usually at the bottom). D3D will tell you about everything noteworthy, from information about its DLL being attached to your application, to warnings about things which may harm performance to the full reason why it gave an error.
濡傛灉鍙戠幇澶辮觸浜嗭紝灝卞叧鎺夎皟璇曪紝鍦ㄨ緭鍑轟俊鎭潰鏉夸腑D3D灝嗕細鍛婅瘔浣犳槸浠涔堝師鍥犲鑷翠綘澶辮觸鐨勩?/div>
f. If your application creates its D3D device in PURE mode, creating it in non-PURE mode should enable more checking and reporting.
濡傛灉浣犵殑紼嬪簭鍒涘緩鐨勬椂鍊欑殑D3D璁懼鏄疨URE妯″紡錛岄偅鍦ㄥ垱寤虹殑鏃跺欐敼涓洪潪PURE妯″紡錛岃繖鏍蜂綘鍦ㄤ笂闈㈢殑鎺у埗闈㈡澘涓緱鍒扮殑淇℃伅浼氭洿澶氥?/div>
]]>
緲昏瘧 D3DPOOL http://m.shnenglu.com/Leaf/archive/2009/08/11/92850.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Mon, 10 Aug 2009 16:34:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/11/92850.html http://m.shnenglu.com/Leaf/comments/92850.html http://m.shnenglu.com/Leaf/archive/2009/08/11/92850.html#Feedback 4 http://m.shnenglu.com/Leaf/comments/commentRss/92850.html http://m.shnenglu.com/Leaf/services/trackbacks/92850.html 杈圭湅杈瑰啓涓嬫潵鐨勶紝鑲畾緲昏瘧寰椾笉濂斤紝鏈夎鐪嬬殑灝嗗氨涓涓?/h1>
D3DPOOL
Defines the memory class that holds the buffers for a resource. 榪欏彞涓嶇敤緲昏瘧
typedef enum D3DPOOL
{
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff,
} D3DPOOL, *LPD3DPOOL;
Constants 甯擱噺
D3DPOOL_DEFAULT
Resources are placed in the memory pool most appropriate for the set of usages requested for the given resource. This is usually video memory, including both local video memory and AGP memory. The D3DPOOL_DEFAULT pool is separate from D3DPOOL_MANAGED and D3DPOOL_SYTEMMEM, and it specifies that the resource is placed in the preferred memory for device access. Note that D3DPOOL_DEFAULT never indicates that either D3DPOOL_MANAGED or D3DPOOL_SYSTEMMEM should be chosen as the memory pool type for this resource. Textures placed in the D3DPOOL_DEFAULT pool cannot be locked unless they are dynamic textures or they are private, FOURCC, driver formats. To access unlockable textures, you must use functions such as IDirect3DDevice9::UpdateSurface , IDirect3DDevice9::UpdateTexture , IDirect3DDevice9::GetFrontBufferData , and IDirect3DDevice9::GetRenderTargetData . D3DPOOL_MANAGED is probably a better choice than D3DPOOL_DEFAULT for most applications. Note that some textures created in driver-proprietary pixel formats, unknown to the Direct3D runtime, can be locked. Also note that - unlike textures - swap chain back buffers, render targets, vertex buffers, and index buffers can be locked. When a device is lost, resources created using D3DPOOL_DEFAULT must be released before calling IDirect3DDevice9::Reset . For more information, see Lost Devices .
When creating resources with D3DPOOL_DEFAULT , if video card memory is already committed, managed resources will be evicted to free enough memory to satisfy the request. 璧勬簮琚斁鍏ュ唴瀛樻睜涓鍗婃槸涓轟簡緇欒璇鋒眰鐨勮祫婧愯吘鍑轟嬌鐢ㄧ殑絀洪棿銆?閫氬父鏄樉瀛橈紝鍖呮嫭鏄懼崱閬撳唴瀛樹腑鐨凙GP閮ㄥ垎銆?font style="BACKGROUND-COLOR: #0a246a" color=#ffffff>D3DPOOL_DEFAULT 鏄粠MANGED鍜孲YSTEMMEM涓垎紱誨嚭鏉ョ殑銆傚畠鎸囨槑浜嗚鏀懼叆姝や腑鐨勮祫婧愭槸鐢ㄦ潵琚澶囪闂傛敞鎰忥紝D3DPOOL_DEFAULT 娌℃湁鎰忓懗鐫MANAGED鎴朣YSTEMMEM灝嗕細琚夋嫨鐢ㄦ潵瀛樺偍璧勬簮錛岃繖鏄竴涓嫭绔嬬殑閮ㄥ垎銆傛斁鍏?font style="BACKGROUND-COLOR: #0a246a" color=#ffffff>D3DPOOL_DEFAULT 涓殑綰圭悊涓嶅彲浠ヨLOCK闄ら潪鏄姩鎬佺汗鐞嗘垨鏄鏈夌汗鐞嗐侳OURCC錛岄┍鍔ㄦ牸寮忥紝涓轟簡璁塊棶鏈攣瀹氱殑綰圭悊錛屾垜浠繀欏葷敤IDirect3DDevice9::UpdateSurface , IDirect3DDevice9::UpdateTexture , IDirect3DDevice9::GetFrontBufferData , and IDirect3DDevice9::GetRenderTargetData .鍑芥暟銆傛樉鐒訛紝瀵逛簬璁稿搴旂敤紼嬪簭鏉ヨ錛孧ANAGED鏄洿濂界殑閫夋嫨銆?br>娉ㄦ剰錛岃澶氱汗鐞嗘槸浠ョ鏈夌殑鏍煎紡鍒涘緩鐨勩傝繍琛屾椂D3D騫朵笉鐭ラ亾銆傛槸鍙互琚姞閿佺殑銆傚悓鏃跺簲璇ユ敞鎰忥紝涓嶅儚綰圭悊錛屼氦鎹㈤摼鍚庡彴緙撳啿鍖猴紝娓叉煋鐩爣錛岄《鐐圭紦鍐詫紝绱㈠紩緙撳啿鏄彲浠ヨ鍔犻攣鐨勩傚綋璁懼涓㈠け鐨勬椂鍊欙紝浣跨敤D3DPOOL_DEFAULT 鍒涘緩鐨勮祫婧愬繀欏昏鍦ㄨ皟鐢≧eset涔嬪墠閲婃斁銆傚彲浠ュ弬鐪婦3D鐨凩ostDevice. 褰撲嬌鐢?font style="BACKGROUND-COLOR: #0a246a" color=#ffffff>D3DPOOL_DEFAULT 鍒涘緩璧勬簮錛屽茍涓旀樉鍗$殑鍐呭瓨鏈夐檺鐨勬椂鍊欙紝MANAGED涓殑璧勬簮灝嗕細琚竻闄や互閲婃斁瓚沖鐨勫唴瀛樻潵婊¤凍闇姹傘?br>
D3DPOOL_MANAGED
Resources are copied automatically to device-accessible memory as needed. Managed resources are backed by system memory and do not need to be recreated when a device is lost. See Managing Resources for more information. Managed resources can be locked. Only the system-memory copy is directly modified. Direct3D copies your changes to driver-accessible memory as needed.
鍦∕ANAGED涓殑褰撴湁闇瑕佺殑鏃跺欙紝浼氳鑷姩澶嶅埗鍒拌澶囩殑鍙闂唴瀛樸侻ANAGED璧勬簮鍦ㄧ郴緇熷唴瀛樹腑鏄湁澶囦喚鐨勶紝浜庢槸褰撹澶囦涪澶辯殑鏃跺欙紝涓嶉渶瑕侀噸鏂板垱寤恒傚弬瑙?a href="mk:@MSITStore:D:\Program%20Files\Microsoft%20DirectX%20SDK%20(October%202006)\Documentation\DirectX9\directx9_c.chm::/managing_resources.htm">Managing Resources 銆侻ANAGED璧勬簮鍙互琚姞閿侊紝鍙湁緋葷粺鍐呭瓨涓殑澶囦喚鏄洿鎺ヨ淇敼鐨勩傚綋鏈夊繀瑕佺殑鏃跺欙紝D3D澶嶅埗浣犳墍淇敼鐨勫唴瀹瑰埌緋葷粺鍙闂尯
D3DPOOL_SYSTEMMEM
Resources are placed in memory that is not typically accessible by the Direct3D device. This memory allocation consumes system RAM but does not reduce pageable RAM. These resources do not need to be recreated when a device is lost. Resources in this pool can be locked and can be used as the source for a IDirect3DDevice9::UpdateSurface or IDirect3DDevice9::UpdateTexture operation to a memory resource created with D3DPOOL_DEFAULT .
琚斁緗湪SYSTMMEM涓殑璧勬簮鏄吀鍨嬪湴涓嶅彲琚?D鐩存帴璁塊棶鐨勩傝繖縐嶅唴瀛樺垎閰嶆秷鑰楃郴緇熺殑RAM浣嗘槸涓嶅噺灝慠AM鐨勫彲鐢ㄩ〉銆傚湪璁懼涓㈠け鐨勬椂鍊欙紝榪欎簺璧勬簮涓嶉渶瑕佸啀嬈″垱寤恒傚湪榪欎釜鍐呭瓨姹犱腑鐨勮祫婧愬彲浠ヨ鍔犻攣錛屽彲浠ヨ鐢ㄦ潵璁?strong>IDirect3DDevice9::UpdateSurface or IDirect3DDevice9::UpdateTexture 鍘繪搷浣滀互D3DPOOL_DEFAULT . 鏂瑰紡鍒涘緩鐨勮祫婧?
D3DPOOL_SCRATCH
Resources are placed in system RAM and do not need to be recreated when a device is lost. These resources are not bound by device size or format restrictions. Because of this, these resources cannot be accessed by the Direct3D device nor set as textures or render targets. However, these resources can always be created, locked, and copied.
榪欑璧勬簮琚斁鍦ㄧ郴緇熺殑RAM涓紝璁懼涓㈠け鏃跺欎笉鐢ㄩ噸鏂板垱寤恒傝繖縐嶈祫婧愪笉鍙楄澶囧ぇ灝忓拰鏍煎紡鐨勯檺鍒躲備負姝わ紝榪欑璧勬簮涓嶈兘琚獶3D璁塊棶錛屼篃涓嶈兘璁劇疆涓虹汗鐞嗘垨娓叉煋鐩爣銆備絾鏄紝榪欑璧勬簮鎬繪槸鍙互琚垱寤猴紝鍔犻攣鍜屽鍒躲?
D3DPOOL_FORCE_DWORD
Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.
寮哄埗緙栬瘧鍣ㄤ嬌鐢?2浣嶆潵緙栬瘧榪欎釜鏋氫婦閲忋傝嫢娌℃湁榪欎釜鍊鹼紝涓浜涚紪璇戝櫒灝嗗厑璁歌繖涓灇涓句互闈?2浣嶇殑鏂瑰紡緙栬瘧銆傝繖涓兼湭琚嬌鐢ㄣ?/dd>
Remarks 璇勮
All pool types are valid with all resources. This includes: vertex buffers, index buffers, textures, and surfaces. 鎵鏈夌殑鍐呭瓨姹犵被鍨嬪鎵鏈夌殑璧勬簮鏈夋晥銆傚寘鎷細欏剁偣緙撳啿錛岀儲寮曠紦鍐詫紝綰圭悊錛岃〃闈€?br> 鍓╀笅鐨勪竴浜涘唴瀹瑰氨鏄悇縐嶇被鍨嬬殑璧勬簮瀵瑰悇縐嶆覆鏌撶洰鏍囩殑鏁堟с傚弬瑙丼DK浠ヤ笅涓篎ancyBit瀵笵3DUSAGE鐨勭炕璇戯紝鐢變簬鍜孌3DPOOL鍏寵仈杈冨己錛屾晠璐村湪姝ら噷錛屽崄鍒嗘劅璋ancyBit 浠栫殑涓婚〉鏄細http://hi.baidu.com/148332727 甯屾湜澶у澶氬浜ゆ祦錛屽叡鍚岃繘姝?br>
]]> [杞琞鍏充簬Direct3D澶氱獥鍙g紪紼嬬殑涓綃囩炕璇?/title> http://m.shnenglu.com/Leaf/archive/2009/08/10/92824.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Mon, 10 Aug 2009 09:32:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/10/92824.html http://m.shnenglu.com/Leaf/comments/92824.html http://m.shnenglu.com/Leaf/archive/2009/08/10/92824.html#Feedback 4 http://m.shnenglu.com/Leaf/comments/commentRss/92824.html http://m.shnenglu.com/Leaf/services/trackbacks/92824.html In DirectX 8, support for rendering to multiple windows is provided through the creation of additional swap chains. However, there are currently no examples of this in the SDK, and the documentation is a bit vague. This article is provided to fill the gaps, and will explain the steps you need to take to write an application that will render multiple views in separate windows.
鍦―X8涓紝瀵瑰紿楀彛鐨勬敮鎸佹槸閫氳繃鍒涘緩鏇村鐨凷wap Chains鏉ユ彁渚涚殑銆係DK涓病鏈夌浉鍏崇殑渚嬪瓙鑰屼笖鏂囨。涔熷彧鏄硾娉涜岃皥銆傝繖綃囨枃绔犲氨鏄負浜嗚В鍐寵繖涓棶棰橈紝瀹冨皢鍚戞偍灞曠ず搴斿綋濡備綍涓姝ユ鍦板疄鐜板湪澶氫釜鍒嗙紿楀彛涓覆鏌撳涓鍥俱?/p>
Step 1 - Setting Up The Parent Frame
絎竴姝ワ細璁劇疆鐖舵鏋剁獥鍙?/p>
In an application with multiple views, we start with a top level frame that will contain child windows in its client area to display various views. Once the parent frame parent frame has been created, we create our Direct3D device interface, specifying windowed mode and setting the top level window handle as the focus window:
鍦ㄥ瑙嗗浘鐨勫簲鐢ㄧ▼搴忎腑錛屾垜浠渶瑕佷粠鏈楂樺眰嬈$殑妗嗘灦鈥斺旇繖涓鏋跺皢鍖呭惈鎵鏈夊湪浠栫敤鎴峰尯涔嬪唴鐨勫瓙瑙嗗浘紿楀彛鈥斺斿紑濮嬫垜浠殑鏃呯▼銆傚綋鐖舵鏋跺垱寤虹殑鏃跺欙紝鎴戜滑闇瑕佸垱寤篋irect3D Device鎺ュ彛錛屼負鍏舵寚瀹氫嬌鐢ㄧ獥鍙fā寮忥紝鑰屼笖璁劇疆榪欐渶楂樺眰嬈$殑紿楀彛鍙ユ焺浣滀負“鐒︾偣紿楀彛”鐨勫彞鏌勶細
g_pD3D=Direct3DCreate8(D3D_SDK_VERSION);
if (!g_pD3D) return -1;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;
// Use the current display mode. 浣跨敤褰撳墠鐨勬樉紺烘ā寮?/p>
D3DDISPLAYMODE mode;
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &mode))) {
SAFE_RELEASE(g_pD3D);
return -1;
}
d3dpp.BackBufferFormat = mode.Format;
d3dpp.BackBufferWidth = mode.Width;
d3dpp.BackBufferHeight = mode.Height;
d3dpp.EnableAutoDepthStencil=TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
// m_hWnd is handle to top level window m_hWnd鏄渶楂樺眰紿楀彛鐨勫彞鏌?/p>
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice) ) ) {
SAFE_RELEASE(g_pD3D);
return -1;
}
Note that for simplicity the above code does not test depth format, instead choosing a fixed format. Your application should determine a compatible depth format for the format of the rendering target.
娉ㄦ剰涓婇潰浠g爜澶勪簬綆鍗曡冭檻騫舵病鏈夊幓嫻嬭瘯娣卞害緙撳瓨鐨勬牸寮忥紙錛焏epth format錛夛紝鑰屽彧鏄夋嫨浜嗕竴涓‘瀹氱殑鏍煎紡錛圖3DFMT_D16錛夈傛偍鐨勭▼搴忓簲璇ヤ負闇瑕佹覆鏌撶殑Render Target閫夋嫨涓涓彲鎺ュ彈鐨勬繁搴︾紦瀛樻牸寮忋?/p>
The device has a frame buffer, which the child views will be rendered into, as well as a depth buffer which will be shared among the views. The frame buffer and depth buffer are sized to the full screen resolution, to allow for the fact that the window may later be resized. Otherwise, window size changes would require resetting the device and re-creating the swap chains.
Device閮介渶瑕佹湁甯х紦瀛橈紝榪欐牱瀛愯鍥炬墠鑳借繘琛屾覆鏌擄紝鍚屾椂錛屾繁搴︾紦鍐蹭篃搴斿綋琚笉鍚岀殑瑙嗗浘榪涜鍏變韓銆傚撫緙撳瓨鍜屾繁搴︾紦瀛橀兘琚緗負鍏ㄥ睆騫曞ぇ灝忥紝浠ヨ冭檻鍒板彲鑳界獥鍙d細琚敼鍙樺ぇ灝忕殑鎯呭喌銆傚鏋滀笉鐨勮瘽錛岀獥鍙f敼鍙樺ぇ灝忕殑鏃跺欙紝灝遍渶瑕丷eset Device鍜岄噸鏂板垱寤篠wap Chain銆?/p>
Step 2 - Setting Up View Windows
絎簩姝ワ細璁劇疆瀛愯鍥劇獥鍙?/p>
Now we are ready to create our view windows, and associate them with swap chains that can be rendered to the device. Once the windows have been created, the following code generates a swap chain for the child window:
鐜板湪鎴戜滑鍙互鍑嗗鍒涘緩鎴戜滑鐨勫瓙紿楀彛涔熷氨鏄鍥劇獥鍙o紝騫舵妸瀹冧滑涓庝氦鎹㈤摼鍏寵仈浠ヤ嬌寰椾粬浠彲浠ヨ娓叉煋鍒癉evice涓娿傚綋紿楀彛鍒涘緩鍚庯紝涓嬮潰鐨勪唬鐮佸皢涓哄瓙紿楀彛鍒涘緩涓涓氦鎹㈤摼錛?/p>
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;
// Use the current display mode. 浣跨敤褰撳墠鐨勬樉紺烘ā寮?/p>
D3DDISPLAYMODE mode;
g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &mode);
d3dpp.BackBufferFormat = mode.Format;
// m_hWnd contains child window handle m_hWnd鍌ㄥ瓨瀛愮獥鍙g殑鍙ユ焺
d3dpp.hDeviceWindow=m_hWnd;
// m_pSwapChain is IDirect3DSwapChain * m_pSwapChain鏄竴涓狪Direct3DSwapChain*瀵硅薄
g_pd3dDevice->CreateAdditionalSwapChain(&d3dpp, &m_pSwapChain);
After executing this code, the m_pSwapChain variable will contain a pointer to an IDirect3DSwapChain interface, which contains a frame buffer corresponding to the client area of the child window. This process is performed for each view window, so that that there is a swap chain for each view window.
緇忚繃榪欎簺浠g爜涔嬪悗錛宮_pSwapChain鍙橀噺灝卞偍瀛樹簡IDirect3DSwapChain鎺ュ彛鐨勬寚閽堬紝榪欎釜鎺ュ彛灝嗗偍瀛樺瓙紿楀彛瑙嗗浘鍖烘墍瀵瑰簲鐨勫撫緙撳啿銆?/p>
Step 3 - Rendering a View
絎笁姝ワ細娓叉煋瑙嗗浘
Prior to rendering each view, we must direct the device to render to the appropriate frame buffer, using the SetRenderTarget() method. We pass the back buffer from the window's swap chain, while using the depth buffer that was originally created with the device:
鍦ㄦ覆鏌撴瘡涓鍥劇獥鍙d箣鍓嶏紝鎴戜滑蹇呴』浣垮緱Device鏉ユ覆鏌撳搴旂殑甯х紦鍐詫紝榪欐垜浠氨闇瑕佺敤鍒癝etRenderTarget鏂規硶銆傛垜浠悜鍏朵腑浼犲叆瀛愮獥鍙wapChain浜ゆ崲閾劇殑鍚庡緙撳啿BackBuffer錛屼互鍙婁嬌鐢ㄦ渶寮濮嬭窡鐫Device涓璧峰垱寤虹殑娣卞害緙撳啿銆?/p>
LPDIRECT3DSURFACE8 pBack=NULL,pStencil=NULL;
m_pSwapChain->GetBackBuffer(0,D3DBACKBUFFER_TYPE_MONO,&pBack);
g_pd3dDevice->GetDepthStencilSurface(&pStencil);
g_pd3dDevice->SetRenderTarget(pBack,pStencil);
pBack->Release();
pStencil->Release();
Note that we release the stencil and backbuffer pointers after we use them, because the GetBackBuffer() and GetDepthStencilSurface() functions call AddRef() on these interfaces to increment their reference counters. Failing to release them would lead to a memory leak.
娉ㄦ剰鎴戜滑蹇呴』Release鎺塖tencil鍜孊ackBuffer鐨勬寚閽堬紝鍥犱負GetBackBuffer鍜孏etDepthStencilSurface榪欎袱涓嚱鏁伴兘浼氳皟鐢–OM鐨凙ddRef鏂規硶錛屾潵澧炲姞鐩稿簲COM鎺ュ彛鐨勫紩鐢ㄨ鏁幫紝鍥犳濡傛灉涓嶅垹闄ゅ畠浠紝灝嗕細瀵艱嚧鍐呭瓨娉勯湶銆?/p>
We are now ready to render the view. Rendering is performed within a scene in the normal manner, except that we call Present() on the swap chain interface rather than the device interface:
鎴戜滑鐜板湪宸茬粡鍋氬ソ鍑嗗娓叉煋瑙嗗浘紿楀彛浜嗐傛覆鏌撶殑鏂規硶鐪嬭搗鏉ュ拰鎴戜滑騫沖父鐢ㄧ殑鏂規硶宸笉澶氾紝鍙槸鏈変竴鐐癸細鎴戜滑鐜板湪闇瑕佽皟鐢⊿wap Chain鐨勬帴鍙o紝鑰屼笉鏄疍evice鐨勬帴鍙c?/p>
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0x00000000,1.0,0);
if (SUCCEEDED(g_pd3dDevice->BeginScene())) {
// rendering code goes here 娓叉煋浠g爜鍐欏湪榪欓噷
g_pd3dDevice->EndScene();
}
m_pSwapChain->Present(NULL,NULL,NULL,NULL);
Step 4 - Handling Resize of Child Views
絎洓姝ワ紝瀛愮獥鍙g殑Resize闂
DirectX will automatically deal with changes in the child view by using a stretch blit to present the swap chain if the dimensions have client area is not the same size as the swap chain's frame buffer. However, this may not be desirable, as it will cause aliasing if the client area is increased in size.
濡傛灉紿楀彛鐨勮鍥懼尯澶у皬鍜孲wapChain鐨勫ぇ灝忎笉涓錛岄偅涔圖irectX灝嗛氳繃Stretch Blit鏉ヨ嚜鍔ㄥ鐞嗗浘鍍忕殑浼哥緝鍙樺寲銆傚敖綆¤繖鍙兘騫朵笉浠や漢鏈熷緟錛屽洜涓鴻繖鍦ㄨ鍥懼尯鍙樺ぇ鐨勬椂鍊欏皢瀵艱嚧鍥懼儚鐨勬ā緋娿?/p>
]]> 杞細綰圭悊鐭╅樀 http://m.shnenglu.com/Leaf/archive/2009/08/07/92552.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Fri, 07 Aug 2009 09:05:00 GMT http://m.shnenglu.com/Leaf/archive/2009/08/07/92552.html http://m.shnenglu.com/Leaf/comments/92552.html http://m.shnenglu.com/Leaf/archive/2009/08/07/92552.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/92552.html http://m.shnenglu.com/Leaf/services/trackbacks/92552.html [杞琞綰圭悊鐭╅樀
綰圭悊鍧愭爣鍙樻崲
Direct3D鎻愪緵浜嗗鐢熸垚鐨勭汗鐞嗗潗鏍囪繘琛屽潗鏍囧彉鎹㈢殑鍔熻兘錛屼笌欏剁偣鍧愭爣鍙樻崲鐩哥被浼鹼紝鍙互鎸囧畾涓涓?x4鐨勭汗鐞嗗潗鏍囧彉鎹㈢煩闃碉紝鎶婂畠涓庣敓鎴愮殑綰圭悊鍧愭爣鐩鎬箻錛岀劧鍚庡皢鍙樻崲涔嬪悗鐨勭汗鐞嗗潗鏍囪緭鍑鴻嚦Direct3D娓叉煋嫻佹按綰褲備嬌鐢ㄧ汗鐞嗗潗鏍囧彉鎹㈠彲浠ュ綰圭悊鍧愭爣榪涜璇稿騫崇Щ銆佹棆杞拰緙╂斁絳変笁緇村彉鎹€傜汗鐞嗗潗鏍囧彉鎹㈠浜庣敓鎴愪竴浜涚壒孌婃晥鏋滄槸闈炲父鏈夌敤鐨勶紝瀹冧笉鐢ㄧ洿鎺ヤ慨鏀歸《鐐圭殑綰圭悊鍧愭爣銆備緥濡傚彲浠ラ氳繃涓涓畝鍗曠殑騫崇Щ鐭╅樀瀵圭汗鐞嗗潗鏍囪繘琛屽彉鎹紝浠庤屼嬌鐗╀綋琛ㄩ潰涓婄殑綰圭悊涓嶆柇鍙樻崲浣嶇疆錛屼駭鐢熷姩鐢繪晥鏋溿傜汗鐞嗗潗鏍囪嚜鍔ㄧ敓鎴愬湪涓夌淮鍥懼艦紼嬪簭涓渶騫挎硾鐨勫簲鐢ㄦ槸鐜鏄犲皠銆?/p>
鍙氳繃鍑芥暟IDirect3DDevice9::SetTransform()鏉ヨ緗?x4鐨勭汗鐞嗗潗鏍囧彉鎹㈢煩闃碉紝瀹冧互D3DTS_TEXTURE0~ D3DTS_TEXTURE7浣滀負絎竴涓弬鏁幫紝琛ㄧず璁劇疆綰圭悊灞?~7鐨勭汗鐞嗙煩闃點備笅鍒椾唬鐮佸綰圭悊灞?璁劇疆浜嗕竴涓皢綰圭悊鍧愭爣u銆乿緙╁皬鍒板師鏉ヤ竴鍗婄殑綰圭悊鐭╅樀錛?/p>
D3DXMATRIX mat; D3DXMatrixIdentity(&mat); mat._11 = 0.5f; mat._22 = 0.5f; pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat);
涓嬮潰鐨勪唬鐮佸皢鍘熸潵鐨勭汗鐞嗗潗鏍囧鉤縐伙紙1.0, 1.0, 0錛変釜鍗曚綅銆?/p>
D3DXMATRIX mat; D3DXMatrixIdentity(&mat); mat._41 = 1.0f; mat._42 = 1.0f; mat._43 = 0.0f; pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat);
紺轟緥紼嬪簭閫氳繃涓嬪垪浠g爜瀵硅嚜鍔ㄧ敓鎴愮殑綰圭悊鍧愭爣榪涜鍙樻崲錛?/p>
// texture coordinate transform D3DXMATRIX mat_texture, mat_scale, mat_trans; D3DXMatrixIdentity(&mat_texture); D3DXMatrixScaling(&mat_scale, 0.5f, -0.5f, 1.0f); D3DXMatrixTranslation(&mat_trans, 0.5f, 0.5f, 1.0f); mat_texture = mat_texture * mat_scale * mat_trans; pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat_texture);
瑕佺湅鏁堟灉鍜屽畬鏁翠唬鐮?br>鍘諱笅闈㈣繖涓富欏?br>
http://www.cnblogs.com/billwillman/articles/1232081.html 娉細綰圭悊鐭╅樀寰堝ソ寰堝己澶с傚彲浠ュ仛綆鍗曠殑姘達紝澶╃┖鐩掕儗鏅瓑鏁堟灉銆?br>鏇翠負涓ラ噸鐨勬槸錛岃繕鑳藉仛鍑烘祦鍏夋晥鏋滐紝灝卞儚銆婅渶闂ㄣ嬩笂鐨勮。鏈嶆晥鏋溿傘?br>
]]> [杞琞D3D涓殑娓叉煋鍒扮汗鐞?/title> http://m.shnenglu.com/Leaf/archive/2009/07/24/91094.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Fri, 24 Jul 2009 15:38:00 GMT http://m.shnenglu.com/Leaf/archive/2009/07/24/91094.html http://m.shnenglu.com/Leaf/comments/91094.html http://m.shnenglu.com/Leaf/archive/2009/07/24/91094.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/91094.html http://m.shnenglu.com/Leaf/services/trackbacks/91094.html D3D涓殑娓叉煋鍒扮汗鐞?/font>
http://www.cnblogs.com/flying_bat/
娓叉煋鍒扮汗鐞嗘槸D3D涓殑涓欏歸珮綰ф妧鏈備竴鏂歸潰錛屽畠寰堢畝鍗曪紝鍙︿竴鏂歸潰瀹冨緢寮哄ぇ騫惰兘浜х敓寰堝鐗規畩鏁堟灉銆?姣斿璇村彂鍏夋晥鏋滐紝鐜鏄犲皠錛岄槾褰辨槧灝勶紝閮藉彲浠ラ氳繃瀹冩潵瀹炵幇銆傛覆鏌撳埌綰圭悊鍙槸娓叉煋鍒拌〃闈㈢殑涓涓歡浼搞傛垜浠彧闇鍐嶅姞浜涗笢瑗垮氨鍙互浜嗐傞鍏堬紝鎴戜滑瑕佸垱閫犱竴涓汗鐞嗭紝騫朵笖鍋氬ソ涓浜涢槻鑼冩帾鏂姐傜浜屾鎴戜滑灝卞彲浠ユ妸閫傚綋鐨勫満鏅覆鏌撳埌鎴戜滑鍒涘緩鐨勭汗鐞嗕笂浜嗐傜劧鍚庯紝鎴戜滑鎶婅繖涓汗鐞嗙敤鍦ㄦ渶鍚庣殑娓叉煋涓娿?br>銆銆?main.cpp 銆銆棣栧厛鎴戜滑寰楀0鏄庢墍闇瑕佺殑瀵硅薄銆傚綋鐒舵垜浠渶瑕佷竴寮犵敤鏉ユ覆鏌撶殑綰圭悊銆傛澶栵紝鎴戜滑榪橀渶瑕佷袱涓猄urface瀵硅薄銆備竴涓槸鐢ㄦ潵瀛樺偍鍚庡彴緙撳啿鍖猴紝涓涓敤鏉ュ綋綰圭悊鐨勬覆鏌撳璞°傚悗闈㈡垜鍐嶈緇嗕粙緇嶅畠浠傚彟澶栨垜浠繕闇瑕佷袱涓煩闃碉紝涓涓槸鐢ㄦ潵褰撶汗鐞嗙殑鎶曞獎鐭╅樀錛屽彟涓涓槸瀛樺偍鍘熸潵鐨勭煩闃點?br>銆銆LPDIRECT3DTEXTURE9 pRenderTexture = NULL; 銆銆LPDIRECT3DSURFACE9 pRenderSurface = NULL,pBackBuffer = NULL; 銆銆D3DXMATRIX matProjection,matOldProjection; 銆銆鐜板湪鎴戜滑鏉ュ垱寤虹汗鐞嗐傚墠涓や釜鍙傛暟鏄汗鐞嗙殑瀹藉害鍜岄珮搴︼紝絎笁涓弬鏁版槸綰圭悊鐨勫綰ф笎榪涚汗鐞嗗簭鍒楀弬鏁幫紝鍦ㄨ繖閲屾槸璁句負1錛岀鍥涗釜鍙傛暟闈炲父閲嶈鑰屼笖蹇呴』璁句負D3DUSAGE_RENDERTARGET錛岃〃鏄庢垜浠墍鍒涘緩鐨勭汗鐞嗘槸鐢ㄦ潵娓叉煋鐨勩傚墿涓嬬殑鍙傛暟灝辨槸鎸囩汗鐞嗘牸寮忥紝欏剁偣緙撳啿鍖虹殑鍐呭瓨浣嶇疆錛屽拰涓涓寚鍚戠汗鐞嗙殑鎸囬拡銆傚綋綰圭悊鏄敤鏉ュ綋娓叉煋瀵硅薄鏃訛紝欏剁偣緙撳啿鍖虹殑鍐呭瓨浣嶇疆蹇呴』璁句負D3D_DEFAILT銆?br>銆銆g_App.GetDevice()->CreateTexture(256,256,1,D3DUSAGE_RENDERTARGET,D3DFMT_R5G6B5,D3DPOOL_DEFAULT,&pRenderTexture,NULL); 銆銆涓轟簡璁塊棶綰圭悊鍐呭瓨瀵硅薄錛屾垜浠渶瑕佷竴涓猄urface瀵硅薄錛屽洜涓篋3D涓殑綰圭悊鏄敤榪欐牱鐨勪竴涓猄urface鏉ュ瓨鍌ㄧ汗鐞嗘暟鎹殑銆備負浜嗗緱鍒扮汗鐞嗚〃闈㈢殑Surface,鎴戜滑闇瑕佽皟鐢ㄦ柟娉旼etSurfaceLevel() 銆傜涓涓弬鏁版垜浠涓?錛岀浜屼釜鍙傛暟涓轟竴涓寚鍚憇urface瀵硅薄鐨勬寚閽堛?br>銆銆pRenderTexture->GetSurfaceLevel(0,&pRenderSurface); 銆銆涓嬩竴姝ュ氨鏄垱寤轟竴涓傚悎綰圭悊緇存暟鐨勬姇褰辯煩闃碉紝鍥犱負綰圭悊鐨勬í綰墊瘮鍜屽悗鍙扮紦鍐插尯鐨勪笉涓鏍楓?br>銆銆D3DXMatrixPerspectiveFovLH(&matProjection,D3DX_PI / 4.0f,1,1,100); 銆銆鍦ㄦ垜浠殑寰幆娓叉煋涔嬪墠錛屾垜浠繀欏諱繚瀛樺悗鍙扮紦鍐插尯鍜屽畠鐨勬姇褰辯煩闃點?br>銆銆g_App.GetDevice()->GetTransform(D3DTS_PROJECTION,&matOldProjection); 銆銆g_App.GetDevice()->GetRenderTarget(0,&pBackBuffer); 銆銆娓叉煋寰幆鍑芥暟鍙互鍒嗕負涓や釜閮ㄥ垎銆傜涓閮ㄥ垎鏄覆鏌撳埌綰圭悊鐨勮繃紼嬨傚洜姝わ紝娓叉煋瀵硅薄蹇呴』璁句負綰圭悊琛ㄩ潰銆傜劧鍚庢垜浠氨鍙互鎶婁笢瑗挎覆鏌撳埌榪欎釜瀵硅薄涓婁簡銆傛覆鏌撳埌鍙︿竴涓〃闈笂鍜屾甯稿湴娓叉煋鍒板悗鍙扮紦鍐插尯宸笉澶氥傚彧鏈変竴鐐逛笉鍚岋紝閭e氨鏄厛涓嶈皟鐢≒rensent錛堬級鍑芥暟錛屽洜涓虹汗鐞嗕笂鐨勫唴瀹瑰茍涓嶉渶瑕佹樉紺哄湪灞忓箷涓娿傝薄騫蟲椂涓鏍鳳紝鎴戜滑鍏堣閲嶇疆琛ㄩ潰棰滆壊緙撳啿鍖猴紝騫朵笖璋冪敤BeginSence()鍜孍ndSence()鏂規硶銆備負浜嗚兘澶熼傚綋鐨勬覆鏌擄紝鎴戜滑蹇呴』璁劇疆鍜岀汗鐞嗚〃闈㈢浉絎︾殑鎶曞獎鐭╅樀銆傚惁鍒欐渶鍚庣殑鍥捐薄鍙兘琚壄鏇?br>銆銆//render-to-texture 銆銆g_App.GetDevice()->SetRenderTarget(0,pRenderSurface); //set new render target 銆銆g_App.GetDevice()->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(100,100,100),1.0f,0); //clear texture 銆銆g_App.GetDevice()->BeginScene(); 銆銆g_App.GetDevice()->SetTexture(0,pPyramideTexture); 銆銆D3DXMatrixRotationY(&matRotationY,fRotation); 銆銆D3DXMatrixTranslation(&matTranslation,0.0f,0.0f,5.0f); 銆銆g_App.GetDevice()->SetTransform(D3DTS_WORLD,&(matRotationY * matTranslation)); 銆銆g_App.GetDevice()->SetTransform(D3DTS_PROJECTION,&matProjection); //set projection matrix 銆銆g_App.GetDevice()->SetStreamSource(0,pTriangleVB,0,sizeof(D3DVERTEX)); 銆銆g_App.GetDevice()->DrawPrimitive(D3DPT_TRIANGLELIST,0,4); 銆銆g_App.GetDevice()->EndScene(); 銆銆娓叉煋寰幆鐨勭浜岄儴鍒嗗氨鏄覆鏌撴渶鍚庡満鏅殑榪囩▼錛堜篃灝辨槸鏄劇ず鍒板睆騫曚笂鐨勮繃紼嬶級銆傛覆鏌撳璞¢噸鏂拌涓哄悗鍙扮紦鍐插尯錛屾姇褰辯煩闃甸噸鏂拌涓哄師鏉ョ殑鎶曞獎鐭╅樀銆傜敱浜庣汗鐞嗗凡緇忓噯澶囧ソ浜嗭紝鎵浠ュ畠鍜岀汗鐞嗗眰0鐩稿叧鑱斻?br>銆銆//render scene with texture 銆銆g_App.GetDevice()->SetRenderTarget(0,pBackBuffer); //set back buffer 銆銆g_App.GetDevice()->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0); 銆銆g_App.GetDevice()->BeginScene(); 銆銆g_App.GetDevice()->SetTexture(0,pRenderTexture); //set rendered texture 銆銆g_App.GetDevice()->SetTransform(D3DTS_WORLD,&matTranslation); 銆銆g_App.GetDevice()->SetTransform(D3DTS_PROJECTION,&matOldProjection); //restore projection matrix 銆銆g_App.GetDevice()->SetStreamSource(0,pQuadVB,0,sizeof(D3DVERTEX)); 銆銆g_App.GetDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2); 銆銆g_App.GetDevice()->EndScene(); 銆銆g_App.GetDevice()->Present(NULL,NULL,NULL,NULL); 銆銆鏈鍚庢垜浠氳繃璋冪敤Release()鏂規硶閲婃斁Surface瀵硅薄銆?br>銆銆pRenderSurface->Release(); 銆銆pRenderSurface = NULL; 銆銆pBackBuffer->Release(); 銆銆pBackBuffer = NULL; 銆銆娓叉煋鍒扮汗鐞嗚兘璁╀綘鍋氬緢澶氫簨鎯咃紝浣嗘槸浣犲繀欏繪敞鎰忎竴浜涢檺鍒躲傞鍏堟繁搴︾紦鍐插尯蹇呴』鎬繪槸澶т簬鎴栫瓑浜庢覆鏌撳璞$殑澶у皬銆傛澶栵紝娓叉煋瀵硅薄鍜屾繁搴︾紦鍐插尯鐨勬牸寮忓繀欏諱竴鑷淬?/p>
]]> 鍏充簬鏉愯川緙栬緫鍣ㄧ殑緇撴瀯 http://m.shnenglu.com/Leaf/archive/2009/06/05/86846.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Fri, 05 Jun 2009 05:32:00 GMT http://m.shnenglu.com/Leaf/archive/2009/06/05/86846.html http://m.shnenglu.com/Leaf/comments/86846.html http://m.shnenglu.com/Leaf/archive/2009/06/05/86846.html#Feedback 2 http://m.shnenglu.com/Leaf/comments/commentRss/86846.html http://m.shnenglu.com/Leaf/services/trackbacks/86846.html 涓鐩翠笉鐭ラ亾緙栬緫鍣ㄧ殑緇撴瀯鏄浣曠殑銆傛湁娌℃湁鍝綅澶уぇ鑰愬績璁茶В涓涓嬨傛垨鑰呯粰涓涓粨鏋勫浘涔熻 璋㈣阿鍟︼紒 璇曠潃鐢―XUT鍐欎簡涓涓嬶紝鍒濇鍐沖畾浠ヤ笅鍔熻兘錛岀敱浜庝笉鐔熸倝DXUT錛屾崳榧撲簡鍗婂ぉ鎵嶅紕鍑烘潵 1銆佽鍙栦竴涓ā鍨嬫枃浠?br>2銆佸垎鏋愭ā鍨嬫枃浠訛紝鍙栧緱鍏秙ubset涓暟錛屽彇寰楁瘡涓猻ubset鐨勬潗璐?br>3銆佹牴鎹変腑鐨剆ubset璋冩暣鍏舵潗璐?br>4銆佷繚瀛樼紪杈戝ソ鐨勬潗璐ㄥ埌浜岃繘鍒舵枃浠朵腑錛屽悗緙鍚嶆殏瀹氫負 *.mtrl 鏁堟灉鍥懼涓?br>鑷充簬璋冭妭鏉愯川鐨勯偅閲岋紝榪樻湁涓縐嶆柟妗堟槸璋冪敤shoosecolor闈㈡澘錛岄偅鏍鋒瘮杈冪洿瑙傦紝浣嗘搷浣滃鏉傘備笉鐭ラ亾鏄痵lider濂借繕鏄潰鏉垮ソ 鏆傛椂鐢╯lider 鏈夎皝鑳藉憡璇夋垜錛屼笅鎷夊垪琛ㄩ偅閲岋紝鎬庝箞鑳借浠栧悜涓婅窇鍚楋紵 鍚戜笅璺戜細閬綇涓浜涳紝涓嶅緱涓嶈皟鏁村ぇ灝忋?/p>
]]> 緇堜簬浣跨幇浜嗗熀浜嶨PU璁$畻鐨勭矑瀛愭晥鏋? http://m.shnenglu.com/Leaf/archive/2009/05/20/83430.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Tue, 19 May 2009 16:46:00 GMT http://m.shnenglu.com/Leaf/archive/2009/05/20/83430.html http://m.shnenglu.com/Leaf/comments/83430.html http://m.shnenglu.com/Leaf/archive/2009/05/20/83430.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/83430.html http://m.shnenglu.com/Leaf/services/trackbacks/83430.html 榪樻槸鐪嬬湅C++鍚э紝涓轟簡鍙寔緇彂灞晘~~
]]> XFile鐨勯楠煎姩鐢?/title> http://m.shnenglu.com/Leaf/archive/2009/05/17/83232.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sun, 17 May 2009 15:52:00 GMT http://m.shnenglu.com/Leaf/archive/2009/05/17/83232.html http://m.shnenglu.com/Leaf/comments/83232.html http://m.shnenglu.com/Leaf/archive/2009/05/17/83232.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/83232.html http://m.shnenglu.com/Leaf/services/trackbacks/83232.html 璇籗DK涓偅SkinMesh鐨勬簮浠g爜鐪熻垂灝斤紝鍒扮洰鍓嶈繕瀵逛竴浜涚粏鑺備笉鏄庝簡錛屼絾鏄葷畻鏄細綆鍗曞湴搴旂敤閭d釜CSinMesh綾諱簡錛屽茍鐢熻Tiny鍔ㄤ簡璧鋒潵 Tiny寰堝嚭鍚嶅摝錛屾槸DX SDK鐨勪唬璦浜恒傚搱鍝堬紝鐪嬬湅浠栫殑鐓х墖鍚~ 鍝堝搱錛屾劅瑙夎繕涓嶉敊錛屽鍔犱簡浜虹墿鎺у埗鍚庯紝鏇村畨閫竳~
]]> ZBuffer涓嶹Buffer http://m.shnenglu.com/Leaf/archive/2009/04/24/80969.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Fri, 24 Apr 2009 09:49:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/24/80969.html http://m.shnenglu.com/Leaf/comments/80969.html http://m.shnenglu.com/Leaf/archive/2009/04/24/80969.html#Feedback 1 http://m.shnenglu.com/Leaf/comments/commentRss/80969.html http://m.shnenglu.com/Leaf/services/trackbacks/80969.html Depth-Buffer錛堟繁搴︾紦瀛橈級鏈変袱縐嶏細Z-Buffer 鍜?W-Buffer錛岃繖閲岃璁鴻繖涓ょ娣卞害緙撳瓨鐨勫尯鍒紝浠ュ強濡備綍鍦ㄤ袱鑰呬箣闂磋漿鎹€?br>銆銆w 鐨勫惈涔?br>銆銆3D絀洪棿鐐圭殑鍧愭爣鏄紙x錛寉錛寊錛夛紝涓轟簡浣跨煩闃典箻娉曞叿鏈夊鉤縐誨彉鎹㈢殑鍔熸晥錛屾垜浠敤4D絀洪棿涓殑鐐癸紙x錛寉錛寊錛寃錛夋潵琛ㄧず3D絀洪棿涓殑鐐癸紙x'錛寉'錛寊'錛夛紝榪欎袱涓笉鍚岀┖闂寸偣涔嬮棿鐨勫叧緋繪槸錛?br>銆銆 銆銆x' = x / w 銆銆y' = y / w 銆銆z' = z / w 銆銆 銆銆鍍忚繖鏍風敤鍥涚淮絀洪棿鐐硅〃紺轟笁緇寸┖闂寸偣錛屾垨鑰呰鐢?n + 1 緇寸┖闂寸偣琛ㄧず n 緇寸┖闂寸偣鐨勬柟娉曞彨鍋?“榻愭鍧愭爣琛ㄧず娉?#8221;銆?br>銆銆 銆銆瀹為檯浣跨敤涓紝鍦ㄦā鍨?>涓栫晫杞崲銆佷笘鐣?>瑙嗗浘杞崲榪囩▼涓紝w 閫氬父淇濇寔涓嶅彉錛屾繪槸絳変簬涓錛岃繖鏍鳳紝榻愭鍧愭爣鐨勫墠涓変釜鍒嗛噺灝辨槸瀵瑰簲3D絀洪棿鐐圭殑涓変釜鍧愭爣鍒嗛噺銆備絾鏄紝緇忚繃鎶曞獎鍙樻崲鍚庯紝w 灝嗗緱鍒頒竴涓瘮渚嬪鹼紝姣斿錛屼竴鑸殑閫忚鎶曞獎鍙樻崲鐭╅樀鏄細 銆銆 銆銆| W銆 0銆 0銆 0 | 銆銆| 0銆 H銆 0銆 0 | 銆銆| 0銆 0銆 Q銆 1 | 銆銆| 0銆 0銆-QZn 0 | 銆銆 銆銆鍏朵腑銆 Zn銆=銆榪戣鍓潰 z 鍧愭爣 銆銆Zf銆=銆榪滆鍓潰 z 鍧愭爣 銆銆W銆=銆2 * Zn / 瑙嗗彛瀹藉害 銆銆H銆=銆2 * Zn / 瑙嗗彛楂樺害 銆銆Q銆=銆Zf / (Zf - Zn) 銆銆 銆銆灝嗙偣錛坸錛寉錛寊錛?錛変箻浠ユ鐭╅樀錛寃 渚夸笉鍐嶆槸涓錛岃屽搴旂殑3D絀洪棿鐐瑰潗鏍囷紙x / w錛寉 / w錛寊 / w錛夊皢鍑虹幇涓涓緝鏀炬晥鏋溿傚悓鏃訛紝鍥犱負 w 鐨勫奸氬父涓?z 鍧愭爣鎴愭姣旓紙姣斿緇忚繃涓婇潰榪欎釜鐭╅樀鐨勫彉鎹紝w 鐨勫煎叾瀹炲氨鏄?z 鍧愭爣鐨勫鹼級錛屾墍浠ョ粡榪囨姇褰卞彉鎹紝鐗╀綋浼氫駭鐢熻繎澶ц繙灝忕殑鏁堟灉銆?br>銆銆 銆銆Z-Buffer 涓?W-Buffer 鐨勫尯鍒?br>銆銆綆鍗曠殑璇達紝z-buffer 涓?w-buffer 鐨勫尯鍒氨鏄墠鑰呬繚瀛樼殑鏄偣鐨?z 鍧愭爣錛岃屽悗鑰呬繚瀛樼殑鏄偣鐨?w 鍧愭爣銆?br>銆銆 銆銆鍏蜂綋鐨勮錛屼袱鑰呭洜涓轟繚瀛樼殑鍊兼湁涓嶅悓鐨勫惈涔夛紝鎵浠ヨ〃鐜板嚭鏉ョ殑瀹為檯鏁堟灉涔熶細鏈夊樊鍒?br>銆銆 銆銆z-buffer 淇濆瓨鐨勬槸緇忚繃鎶曞獎鍙樻崲鍚庣殑 z 鍧愭爣錛屽墠闈㈣榪囷紝鎶曞獎鍚庣墿浣撲細浜х敓榪戝ぇ榪滃皬鐨勬晥鏋滐紝鎵浠ヨ窛紱葷溂鐫涙瘮杈冭繎鐨勫湴鏂癸紝z 鍧愭爣鐨勫垎杈ㄧ巼姣旇緝澶э紝鑰岃繙澶勭殑鍒嗚鯨鐜囧垯姣旇緝灝忥紝鎹㈠彞璇濊錛屾姇褰卞悗鐨?z 鍧愭爣鍦ㄥ叾鍊煎煙涓婏紝瀵逛簬紱誨紑鐪肩潧鐨勭墿鐞嗚窛紱誨彉鍖栨潵璇達紝涓嶆槸綰挎у彉鍖栫殑錛堝嵆闈炲潎鍖鍒嗗竷錛夛紝榪欐牱鐨勪竴涓ソ澶勬槸榪戝鐨勭墿浣撳緱鍒頒簡杈冮珮鐨勬繁搴﹀垎杈ㄧ巼錛屼絾鏄繙澶勭墿浣撶殑娣卞害鍒ゆ柇鍙兘浼氬嚭閿欍?br>銆銆 銆銆w-buffer 淇濆瓨鐨勬槸緇忚繃鎶曞獎鍙樻崲鍚庣殑 w 鍧愭爣錛岃?w 鍧愭爣閫氬父璺熶笘鐣屽潗鏍囩郴涓殑 z 鍧愭爣鎴愭姣旓紝鎵浠ュ彉鎹㈠埌鎶曞獎絀洪棿涓箣鍚庯紝鍏跺間緷鐒舵槸綰挎у垎甯冪殑錛岃繖鏍鋒棤璁鴻繙澶勮繕鏄繎澶勭殑鐗╀綋錛岄兘鏈夌浉鍚岀殑娣卞害鍒嗚鯨鐜囷紝榪欐槸瀹冪殑浼樼偣錛屽綋鐒訛紝緙虹偣灝辨槸涓嶈兘鐢ㄨ緝楂樼殑娣卞害鍒嗚鯨鐜囨潵琛ㄧ幇榪戝鐨勭墿浣撱?br>銆銆 銆銆浠庣‖浠跺疄鐜拌搴︽潵璇達紝鍑犱箮鎵鏈夌殑紜歡3D鍔犻熷崱閮芥敮鎸?z-buffer錛岃?w-buffer 鐨勬敮鎸佹病鏈?z-buffer 閭d箞騫挎硾銆傚彟澶栵紝鏃╂湡鐨?Direct3D 鐗堟湰鐪嬭搗鏉ヤ篃涓嶆敮鎸?w-buffer銆?br>銆銆 銆銆Z-Buffer 涓?W-Buffer 涔嬮棿鐨勮漿鎹?br>銆銆鏍規嵁涓婇潰鐨勭煩闃靛彉鎹紝鍙互寰堝鏄撶殑瀵煎嚭灝?w-buffer 杞崲鎴?z-buffer 鐨勫叕寮忥細 銆銆 銆銆zDepth = Q * ( wDepth - Zn ) / wDepth 銆銆= Zf / ( Zf - Zn ) * ( wDepth - Zn ) / wDepth 銆銆 銆銆榪欎釜杞崲鍏紡鏈変粈涔堢敤澶勶紵涓句釜渚嬪瓙錛?DS MAX 浣跨敤鐨勬槸 w-buffer錛屽鏋滀粠 3DS MAX 涓鍑烘繁搴︿俊鎭埌 Direct3D 涓紝浣滀負棰勬覆鏌撶殑鑳屾櫙浣跨敤錛屽氨鏈夊彲鑳界敤鍒頒笂闈㈣繖涓漿鎹€傚綋鐒訛紝濡傛灉鍦?D3D 涓嬌鐢?w-buffer錛岄棶棰樺氨涓嶅ぇ浜嗭紝浣嗘槸濡傛灉浣跨敤 z-buffer錛屼笉緇忚繃榪欐牱鐨勮漿鎹紝娓叉煋緇撴灉灝變細鍑洪敊銆?/p>
]]> 閫氳繃楂樺害鍥劇敓鎴愬湴褰㈡椂鍊欏嚭鐜扮殑澶辮鐢婚潰 http://m.shnenglu.com/Leaf/archive/2009/04/24/80968.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Fri, 24 Apr 2009 09:43:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/24/80968.html http://m.shnenglu.com/Leaf/comments/80968.html http://m.shnenglu.com/Leaf/archive/2009/04/24/80968.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80968.html http://m.shnenglu.com/Leaf/services/trackbacks/80968.html 榪樻湁涓涓甫鏈夐噾灞炴劅鐨?#8220;鑹烘湳鍝?#8221; 鐪熺殑濂界濂噡~ 涓嶈繃鍛紝鎴戦偅鍦板艦鐢熸垚榪樻槸娌″疄鐜幫紝寰堝洤~~
]]> 絎竴嬈″疄鐜版按闈㈡覆鏌擄紙綰圭悊鍔ㄧ敾鏂規硶錛?/title> http://m.shnenglu.com/Leaf/archive/2009/04/22/80705.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Wed, 22 Apr 2009 04:26:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/22/80705.html http://m.shnenglu.com/Leaf/comments/80705.html http://m.shnenglu.com/Leaf/archive/2009/04/22/80705.html#Feedback 1 http://m.shnenglu.com/Leaf/comments/commentRss/80705.html http://m.shnenglu.com/Leaf/services/trackbacks/80705.html 鍙槸榪樻病鏈夊疄鐜板掑獎錛屼笅嬈″啀鍋氥?br> 铏界劧澶ц櫨寰堝錛屼絾鍍忔垜榪欐牱鑷繁鎹i紦鐨勪篃鍚屾牱瀛樺湪錛岄偅鎴戝氨璇磋鎬庝箞瀹炵幇鐨勫惂錛屼篃欏轟究鐞嗘竻鑷繁鐨勬濊礬
鎴戣璇存垜鐨勫疄鐜版柟娉曞惂
std::vector<IDirect3DTexture9 *> vecTexture(0); //榪欎釜灝辨槸鐢ㄦ潵瀛樺偍鎴戜滑鐨勫嚑鍗佸紶綰圭悊銆?/div>
鍏堟妸浠栦滑鍏ㄩ儴鍔犺澆榪涘幓銆?/div>
鐒跺悗鎴戜滑鍏堢敾涓涓煩褰紙鐣ワ級
鐒跺悗鎴戜滑鏍規嵁涓嬮潰榪欎釜鏉ュ姩鎬佸垏鎹㈢汗鐞?/div>
Direct3DTexture9* Texture = NULL;
float timeElapsed = 0;
DWORD dwFrameSpeed = 0;
timeElapsed += timeDelta*FrameSpeed;//timeDelta鏄袱嬈℃覆鏌撶殑闂撮殧鏃墮棿
if(timeElapsed>vecTexture.size()) timeElapsed = 0; Texture = vecTexture[(int)timeElapsed];
鎺ヤ笅鏉ユ垜浠氨鍙互璁劇疆綰圭悊錛岀劧鍚庢覆鏌撻偅涓煩褰㈠氨鍙互浜嗐?/div>
濡傛灉瑕佷嬌姘村憟閫忔槑鏁堟灉錛屽彧瑕佸拰鍦板艦榪涜ALPHA娣峰悎灝辮浜嗭紝娣峰悎鍙傛暟鑷繁澶氳皟涓や笅銆?/div>
]]>
涓篋EMO鍔犲叆闆懼寲鏁堟灉 http://m.shnenglu.com/Leaf/archive/2009/04/20/80522.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Mon, 20 Apr 2009 03:58:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/20/80522.html http://m.shnenglu.com/Leaf/comments/80522.html http://m.shnenglu.com/Leaf/archive/2009/04/20/80522.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80522.html http://m.shnenglu.com/Leaf/services/trackbacks/80522.html 闆懼寲鏁堟灉 棣栧厛鏉ョ湅鐪嬫垜浠彲浠ヨ緗摢浜涘弬鏁?br>1銆丏3DFOGSTART銆丏3DFOGEND琛ㄧず闆劇殑璧峰鍜岀粨鏉熻窛紱?br>2銆丏3DFOGDENSITY 闆劇殑嫻撳害 3銆丏3DFOGCOLOR 闆劇殑棰滆壊 4銆丏3DFOGTABLEMODE銆丏3DFOGVERTEXMODE 闆劇殑妯″紡錛岀涓涓負鍍忕礌闆懼寲錛岀浜屼釜涓洪《鐐歸浘鍖?/p>
棣栧厛鐪嬬湅闆懼寲鐨勬柟紼?/p>
Color = f * Color(scene) + (1-f) * color(fog)
Color(scene):鑳屾櫙鑹?br>Color(fog): 闆捐壊 f:闆懼寲鍙傛暟錛岄殢瑙傚療鐐圭殑璺濈鐨勫澶ц屽噺灝忥紝浠庤屽彲鐭ユ渶鍚庡緱鍒扮殑棰滆壊錛屽綋瑙傚療鐐硅秺榪滄椂錛岄浘鑹插崰鐨勬瘮渚嬭秺澶с?/p>
闆炬湁鍥涚鏂瑰紡 D3DFOG_NONE 紱佺敤闆懼寲鏁堟灉 D3DFOG_EXP 闆懼寲鏁堟灉闅忔寚鏁板鍔?f = 1/(e^density) D3DFOG_EXP2 鍚屼笂錛屼笉榪囧叕寮忓彉涓?f = 1/(e^(density^2)) D3DFOG_LINEAR 綰挎ч浘 f = (end-d)/(end-start) d 涓哄綋鍓嶈綆楃偣涓庤瀵熺偣璺濈
鐜板湪鎴戜滑鏉ョ湅濡備綍瀹炵幇闆懼寲 棣栧厛寮鍚浘鍖栨晥鏋?br>Device->SetRenderState(D3DRS_FOGENABLE,true); 鐒跺悗鎴戜滑瑕佽緗浘鍖栫殑妯″紡鍜屽叕寮?br>Device->SetRenderState(DEDRS_FOGTABLEMODE,D3DFOG_LINEAR); 榪欓噷鎴戝皢鍏惰緗垚浜嗗儚绱犻浘鍜岀嚎鎬э紝鍚屾牱鍙互灝嗗叾鎹㈡垚涓婇潰浠嬬粛鐨勫叾瀹冩ā寮忓拰鍏紡 鎺ヤ笅鏉ユ垜浠氨瑕佽緗浘鍖栧弬鏁頒簡 Device->SetRenderState(D3DRS_FOGCOLOR,oxffffffff);//璁劇疆鎴愮櫧鑹?/p>
璁劇疆start end float start= 50,end = 400; Device->SetRenderState(D3DRS_FOGSTART,*(DWORD*)&start); Device->SetRenderState(D3DRS_FOGEND,*(DWORD*)&end); 璁劇疆嫻撳害 float density = 0.001f;//0.0 -- 1.0 Device->SetRenderState(D3DRS_FOGDENSITY,*(DWORD*)&density);
榪欐牱,鎴戜滑鐨勮緗氨瀹屼簡,鍙灝嗛浘鍖栬緗斁鍏ユ垜浠覆鏌撳満鏅腑,灝卞彲浠ョ湅鍒伴浘鍖栨晥鏋滀簡. 浣嗗簲璇ユ敞鎰忎互涓嬪嚑鐐?br>-----------------------------------------line A B C \ | / \ / \ | / \ / \ d / \ / \ | / \ / P ------------------------------------------ 闆懼寲鏁堟灉鏄互鍒氬垰涓婇潰璁茬殑 d 浣滀負璁$畻鏍囧噯,鎵浠?鎴戜滑浠嶱鐐圭湅鍒癆 ,B ,C涓夌偣鐨勯浘鍖栨晥鏋滄槸涓鏍風殑,鑰屾寜甯哥悊,A ,C鐨勯浘搴旇鏇存祿鎵嶅. 寰堟樉鐒?榪欒鎴戜滑鎯沖埌,D3D浼氭湁瀵瑰簲鐨勫鐞嗗姙娉? D3D鎻愪緵浜嗗熀浜庡彂鏁g殑闆懼寲鏁堟灉,闆懼寲闅忚瀵熺偣鐨勮窛紱誨澶ц屽澶?灝卞儚鐐瑰厜婧?涓嶈繃,榪欒姹傛垜浠殑紜歡鏀寔,鎵浠ュ湪璁劇疆鍓嶅簲璇ユ鏌?br>D3DCAPS9 caps; Device->GetDeviceCaps(&caps);
if(caps.RasterCaps&D3DPRASTERCAPS_FOGRANGE) Device->SetRenderState(D3DRS_RANGEFOGENABLE,true);
鎶婅繖涓鍔犲埌闆懼寲璁劇疆涓嵆鍙瘇~~
宸茬粡12鐐逛簡,浼拌浜烘湁鐐規檿,涔熻涓嶆槑鐧戒簺浠涔堜笢瑗夸簡,鍒版涓烘
]]> 閫忔槑綰圭悊鍜屽鉤闈㈤槾闅怐EMO http://m.shnenglu.com/Leaf/archive/2009/04/19/80444.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sun, 19 Apr 2009 06:40:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/19/80444.html http://m.shnenglu.com/Leaf/comments/80444.html http://m.shnenglu.com/Leaf/archive/2009/04/19/80444.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80444.html http://m.shnenglu.com/Leaf/services/trackbacks/80444.html 鍔犲叆浜嗗獎瀛愬悗鐨勬晥鏋?br> 娓叉煋鏍戠洰綰圭悊涔嬪墠錛岃繘琛屽涓嬭緗?br>Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true); Device->SetRenderState(D3DRS_SCRBLEND,D3DBLEND_SCRALPHA); Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSCRALPHA); Device->SetRenderState(D3DRS_ALPHATESTENABLE,true); Device->SetRenderState(D3DRS_ALPHAREF,0x0); Device->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL); 娓叉煋闃村獎鐨勬椂鍊欙紝浣跨敤鐨勬槸鍚屼竴綰圭悊錛屼絾闇榪涜濡備笅璁劇疆 Device->SetRenderState(D3DRS_SCRBLEND,D3DBLEND_INVSCRALPHA); 璋冧簡涓涓嬪崍錛屾墠璋冨嚭榪欓槾褰憋紝闅懼緱鍛~~`
]]> 3D DEMO鐨勫垵姝ュ疄鐜?/title> http://m.shnenglu.com/Leaf/archive/2009/04/18/80354.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 18 Apr 2009 07:42:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/18/80354.html http://m.shnenglu.com/Leaf/comments/80354.html http://m.shnenglu.com/Leaf/archive/2009/04/18/80354.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80354.html http://m.shnenglu.com/Leaf/services/trackbacks/80354.html D3DMULTISAMPLE_0_SAMPLES
D3DMULTISAMPLE_4_SAMPLES 緇堜簬鎴愬姛鍦版妸澶╃┖鐩掞紝鍏憡鏉匡紝MESH錛岀汗鐞嗙瓑涓璧風敤鍦ㄤ簡涓涓伐紼嬩腑錛屽搱鍝堬紝铏界劧姣旇緝鐧藉暒錛屼絾榪樻槸寰堟湁鎴愬氨鎰熴?
]]> 騫抽潰闃撮殣錛堢敤妯$増緙撳瓨闃叉浜屾铻嶅悎錛?/title> http://m.shnenglu.com/Leaf/archive/2009/04/18/80325.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 18 Apr 2009 02:02:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/18/80325.html http://m.shnenglu.com/Leaf/comments/80325.html http://m.shnenglu.com/Leaf/archive/2009/04/18/80325.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80325.html http://m.shnenglu.com/Leaf/services/trackbacks/80325.html 鑰屽浜庝竴涓笁緇寸墿浣撴潵璇達紝褰撳涓儴鍒嗘姇褰卞埌騫抽潰涓婃椂錛屼細浜х敓鍙犲姞鏁堟灉錛屽鑷存煇涓閮ㄤ綅棰滆壊杈冩繁錛岃屾鏃舵垜浠彲浠ラ氳繃妯$増緙撳瓨鏉ラ槻姝簩嬈¤瀺鍚堬紝浠庤岄伩鍏嶈繖綾葷幇璞$殑浜х敓銆?br>Device->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL,0xfff0000,1.0,0); Device->SetRenderState(D3DRS_STENCILENABLE,true); Device->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_EQUAL); Device->SetRenderState(D3DRS_STENCILREF,0x0); Device->SetRenderState(D3DRS_STENCILMASK,0xffffffff); Device->SetRenderState(D3DRS_STENCILWRITEMASK,0xffffffff); Device->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP); Device->SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP); Device->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_INCR); 棣栧厛寮鍚ā鐗?灝嗘祴璇曡鍒欒緗負"鐩哥瓑",妯$増鍙傝冭緗負0,澶辮觸鏃跺欎笉鏇存敼,鎴愬姛鐨勬椂鍊欏鍔?. 鐢變簬鎴戜滑宸茬粡灝嗘ā鐗堢紦瀛樻竻0 ,浜庢槸,褰撶涓嬈″啓鍏ユā鐗堢殑鏃跺?嫻嬭瘯鎬繪槸鎴愬姛鐨?妯$増鍊煎姞1.鑰屽綋絎簩嬈″啓鍏ョ殑鏃跺?妯$増鍊間笌妯$増鍙傝冨間笉鐩哥瓑,嫻嬭瘯渚夸細澶辮觸,浠庤岄樆姝簡鍐嶆鍐欏叆緙撳瓨. Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true); Device->SetRenderState(D3DRS_SCRBLEND,D3DBLEND_SCRALPHA); Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCAPHA); Device->SetRenderState(D3DRS_ZENABLE,false); //浣跨敤D3DXMatrixShadow(&S,&linghtDirection,&groundplane); //S涓烘渶鍚庤緭鍑虹殑鐭╅樀,鐒跺悗鏄厜綰挎柟鍚?鐒跺悗鏄緇樺埗闃村獎鐨勫鉤闈?br> //緇樺埗 //鏈鍚庡仛鏀跺熬宸ヤ綔 Device->SetRenderState(D3DRS_ZENABLE,true); Device->SetRenderState(D3DRS_ALPHABLENDENABLE,false); Device->SetRenderState(D3DRS_STENCILENABLE,false);
]]> 浠嶺file鍔犺澆MESH妯″瀷 http://m.shnenglu.com/Leaf/archive/2009/04/18/80326.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 18 Apr 2009 02:02:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/18/80326.html http://m.shnenglu.com/Leaf/comments/80326.html http://m.shnenglu.com/Leaf/archive/2009/04/18/80326.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80326.html http://m.shnenglu.com/Leaf/services/trackbacks/80326.html 棣栧厛浠嬬粛ID3DXBuffer 鎺ュ彛 姝ょ被鍨嬫湁涓や釜鏂規硶 LPVOID ID3DXBuffer::GetBufferPointer();//榪斿洖鎸囧悜緙撳瓨涓暟鎹搗濮嬩綅緗殑鎸囬拡 DWORD ID3DXBuffer::GetBufferSize()//榪斿洖緙撳瓨鐨勫ぇ灝?鍗曚綅涓哄瓧鑺?br> 涓嬮潰鍑芥暟鐢ㄤ簬鍒涘緩涓涓┖鐨処D3DXBuffer瀵硅薄 HRESULT D3DXCreateBuffer(DWORD NumBytes, LPD3DBUFFER *ppBuffer);
鍐嶆潵浠嬬粛涓涓狣3DXMATRIAL緇撴瀯 typedef struct D3DXMATERIAL { D3DMATERIAL9 Mat3D; //瀛樺偍鏉愯川 LPSTR pTextureFilename;//瀛樺偍綰圭悊璺緞鍚?br>}D3DXMATERIAL; 鍐嶆潵鐪嬬湅涓涓噸瑕佺殑鍑芥暟 HRESULT D3DXLoadMeshFromX( LPCSTR pFilename,//鏂囦歡鍚?br>DWORD Options,//鍒涘緩緗戞牸鏃舵墍浣跨敤鐨勬爣璁?br>LPDIRECT3DDEVICE9 *pDevice, LPD3DXBUFFER *ppAdjacency,//閭繪帴琛ㄤ俊鎭?br>LPD3DXBUFFER *ppMaterials,//鏉愯川鍜岀汗鐞嗕俊鎭? D3DXMATRIAL緇撴瀯 LPD3DXBUFFER *ppEffectInstances,// PDWORD pNumMaterials,//鏉愯川鏁扮洰 LPD3DXMESH *ppMesh//榪斿洖濉厖濂界殑Mesh瀵硅薄 }; 涓嬮潰鏄竴涓疄鐢ㄧ殑渚嬪瓙 class MyMesh { ........... private: ID3DXMesh* Mesh = 0; std::vector<D3DMATERIAL9> Mtrls(0); std::vector<IDirect3DTexture9*> Textures(0); ...... }; bool MyMesh::LoadMyMesh( LPCSTR pName,IDirect3DDevice9* Device) { ID3DXBuffer* adjBuffer = 0; ID3DXBuffer* mtrlBuffer = 0; DWORD numMtrls = 0; HRESULT hr = D3DXLoadMeshFromX(pName,D3DXMESH_MANAGED,Device,&adjBuffer,&mtrlBuffer,0,&numMtrls,&Mesh); if(FAILED(hr)) { ::MessageBox(NULL,"D3DXLoadFromX() - FAILED",0,0); return false; } if(mtrlBuffer!=0&&numMtrls!=0) //濡傛灉鏈夋潗璐?br> { D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();//GetBufferPointer() 涓轟簡閫傚悎鍚勭綾誨瀷,鍥犱負榪斿洖VOID*綾誨瀷 闇瑕佸己鍒惰漿鎹?br> for(int i = 0;i<numMtrls;i++) { //寰楀埌鐨勬潗璐ㄦ病鏈夌幆澧冨厜,鎴戜滑寰楄嚜宸卞姞涓?璁╁畠絳変簬婕皠鍏?br> mtrls[i].MatD3D.Ambient = mtrls[i].MatD3D.Diffuse; Mtrls.push_back(mtrls[i].MatD3D); } if(mtrls[i].pTextureFilename!=0)//綰圭悊涓嶄負絀?br> IDirect3DTexture9* tex = 0; D3DXCreateTextureFromFile(Device,mtrls.pTextureFilename,&tex); Textures.push_back(tex); } else { Textures.push_back(0); } } adjBuffer->Release(); mtrlBuffer->Release(); return true; } //鍔犺澆濂藉悗,璁劇疆濂界煩闃?灝卞彲浠ヨ繘琛岀粯鍒朵簡.鐢變簬Mesh鏄垎涓鴻澶氬瓙闆嗙殑,鎵浠ヨ涓涓竴涓覆鏌?br>void MyMesh::DrawMyMesh(IDreict3DDevice9* Deivice) { for(int i =0;i<Mtrls.size();i++) { Device->SetMaterial(&Mtrls[i]); Device->SetTexture(0,Textures[i]); Mesh->DrawSubset(i); } }
]]> 鐢ㄦā鐗堢紦瀛樺疄鐜伴暅闈㈡晥鏋?/title> http://m.shnenglu.com/Leaf/archive/2009/04/18/80324.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 18 Apr 2009 02:01:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/18/80324.html http://m.shnenglu.com/Leaf/comments/80324.html http://m.shnenglu.com/Leaf/archive/2009/04/18/80324.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80324.html http://m.shnenglu.com/Leaf/services/trackbacks/80324.html 棣栧厛灝嗘ā鐗堢紦瀛樻竻絀?br>Device->Clear( 0, 0, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, //娓呯┖妯$増緙撳瓨錛屾繁搴︾紦瀛?br> 0ff000000,//棰滆壊 1.0f, 0)//娓呯┖鍚庣殑妯$増緙撳瓨鍊?br> //鎺ヤ笅鏉ュ氨鏄ā鐗堢紦瀛樿繘琛岃緗?br>Device->SetRenderState(D3DRS_STENCILENABLE,true) //寮鍚ā鐗堢紦瀛?br>Device->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS);//灝嗘ā鐗堟祴璇曡緗負鎬繪槸鎴愬姛錛屽洜涓烘垜浠槸鍦ㄧ敾闀滈潰錛屼笉綆¢暅闈㈠浣曪紝閮借鐢諱笂鍘?br>Device->SetRenderState(D3DRS_STENCILREF,0x1);//璁劇疆妯$増鍙傝冨間負1錛岃繖鏍峰皢浼氱敤0x1鏉ユ爣璁伴暅闈㈠尯鍩?br>Device->SetRenderState(D3DRS_STENCILMASK,0xffffffff);//璁劇疆妯$増鎺╃爜錛?xffffffff琛ㄧず涓嶅睆钄戒換浣曚綅 Device->SetRenderState(D3DRS_STENCILWRITEMASK,0xffffffff)//妯$増鍐欐帺鐮?br>Device->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_REPLACE);//褰撴ā鐗堟祴璇曟垚鍔熸椂錛屼究鐢ㄦā鐗堝弬鑰冨鹼紙0x1錛夊幓鏇挎崲緙撳瓨涓殑鍊?br>Device->SetRenderState(D3DRS_ZWRITEENALBE,false);//鍏抽棴娣卞緙撳瓨鐨勫啓鍔熻兘錛屼互渚塊樆姝㈠娣辯紦瀛樼殑鏇存敼 Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);//寮鍚疉LPHA娣峰悎鍔熻兘 Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ZERO);//灝嗘簮铻嶅悎鍥犲瓙璁劇疆涓猴紙0錛?錛?錛?錛夛紱 Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);//灝嗙洰鏍囪瀺鍚堝洜瀛愯緗負(1,1,1,1); //鍦ㄨ繖閲岀敾闀滈潰,姝ゆ椂鐨勯暅闈細閫氳繃妯$増緙撳瓨榪涜緇樺埗,騫朵笖妯$増緙撳瓨涓殑浠h〃闀滈潰鐨勯儴鍒嗚鏍囪涓?x1,鑰屽叾瀹冨尯鍩熶負0; //鎺ヤ笅鏉ュ氨瑕佺粯鍒舵垜浠殑鐗╀綋浜?br>Device->SetRenderState(D3DRS_ZWRITEEABLE,true);//閲嶆柊寮鍚痁WRITE Device->SetRenderState(D3DRS_STENCILFUNC,D3DCMP_EQUAL);//灝嗘ā鐗堟祴璇曡鍒欒緗負鐩哥瓑 Device->SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP); Device->SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP);//榪欎袱鎺掕〃紺哄鏋滄繁搴﹀拰妯$増嫻嬭瘯澶辮觸,鍒欎笉瀵規ā鐗堜腑鐨勫唴瀹逛綔鏇存敼 Device->SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_KEEP);//鑻ユ祴璇曟垚鍔熶篃涓嶅鍏朵綔鏇存敼 //浣跨敤D3DXMatrixReflect(&R,&plane);姹傚嚭鐗╀綋鐨勯暅鍍?鍏朵腑plane涓洪暅闈㈠鉤闈? //鑻ユ鏃剁粯鐢繪垜浠細鐪嬩笉鍒扮墿浣?鍥犱負鐗╀綋鐨勬繁搴﹀ぇ浜庨暅闈㈢殑娣卞害,浜庢槸鎴戜滑瑕佹竻絀烘繁搴︾紦瀛?br> Device->Clear(0,0,D3DCLEAR_ZBUFFER,0,1.0f,0); //涓轟簡鑳借揪鍒扮墿浣撳湪闀滃瓙涓殑鏁堟灉,鎴戜滑渚濈劧瑕佺敤鍒癆LPHA娣峰悎 Device->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_DESTCOLOR);//(Rd,Gd,Bd,Ad) Device->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ZERO);//(0,0,0,0); //鐢變簬鐗╀綋鍦ㄩ暅闈腑鐨勬樉紺轟負鐗╀綋鐨勫儚,浜庢槸鎴戜滑瑕佸彉鏀歸暅鍍忕粯鍒舵椂鐨勮儗闈㈡秷闅愭ā寮?br>Device->SetRenderState(D3DRS_CULLMODE,D3DCULL_CW);//欏烘椂閽?br> 鏈鍚庣殑宸ヤ綔灝辨槸緇樺埗鍑轟綘鐨勭墿浣?鐒跺悗鍏抽棴寮鍚殑鍔熻兘,騫舵仮澶嶆秷闅愭ā寮?br>Device->SetRenderState(D3DRS_ALPHABLEND,false); Device->SetRenderState(D3DRS_STENCILENABLE,false); Device->SetRenderState(D3DRS_CULLMODE,CCW);//鎭㈠榛樿(閫嗘椂閽?
]]> 閫忔槑綰圭悊 http://m.shnenglu.com/Leaf/archive/2009/04/18/80322.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 18 Apr 2009 02:00:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/18/80322.html http://m.shnenglu.com/Leaf/comments/80322.html http://m.shnenglu.com/Leaf/archive/2009/04/18/80322.html#Feedback 0 http://m.shnenglu.com/Leaf/comments/commentRss/80322.html http://m.shnenglu.com/Leaf/services/trackbacks/80322.html 瀵逛簬涓浜涚汗鐞嗭紝鎴戜滑涓嶈姹傚叏閮ㄦ樉紺哄嚭鏉ワ紝濡傜敤鍏憡鏉挎樉紺虹殑涓媯墊爲鐨勭汗鐞嗭紝姝ゆ椂灝辮姹傝鑳屾櫙涓嶆樉紺哄嚭鏉ワ紝鍙樉紺烘爲鐨勯儴鍒嗐?br>//棣栧厛鍥劇墖鐨勮儗鏅澶勭悊鎴愰忔槑錛屾樉鐒舵垜浠湅鍒版槸閫忔槑鐨勪簡錛屼絾鏄浜庤綆楁満鏉ヨ錛屽悓鏍蜂細灝嗛忔槑鑳屾櫙鍚庣殑鐗╁搧閬綇銆?br>//姝ゆ椂灝辮鍦ㄦ覆鏌撶汗鐞嗗墠瀵瑰叾榪涜ALPHA娣峰悎 /*
alpha嫻嬭瘯鏍規嵁褰撳墠鍍忕礌鏄惁婊¤凍alpha嫻嬭瘯鏉′歡錛堝嵆鏄惁杈懼埌涓瀹氱殑閫忔槑搴︼級鏉ユ帶鍒舵槸鍚︾粯鍒惰鍍忕礌錛屽浘褰㈢▼搴忓簲鐢╝lpha嫻嬭瘯鍙互鏈夋晥鍦板睆钄芥煇浜涘儚绱犻鑹層備笌alpha娣峰悎鐩告瘮錛宎lpha嫻嬭瘯涓嶅皢褰撳墠鍍忕礌鐨勯鑹蹭笌棰滆壊緙撳啿鍖轟腑鍍忕礌鐨勯鑹叉販鍚堬紝鍍忕礌瑕佷箞瀹屽叏涓嶉忔槑錛岃涔堝畬鍏ㄩ忔槑銆傜敱浜庢棤闇榪涜棰滆壊緙撳啿鍖虹殑璇繪搷浣滃拰棰滆壊娣峰悎錛屽洜姝lpha嫻嬭瘯鍦ㄩ熷害涓婅浼樹簬alpha娣峰悎銆?br>
姣斿涓媯墊爲錛屾垜浠皢瀹冪殑鑳屾櫙ALPHA鍊艱緗負灝忎簬1銆?錛岄偅涔堬紝鎴戜滑鍙互灝咥LPHAREF 璁劇疆涓?銆? 鍗?x000000ff 鐒跺悗ALPHAFUNC 璁劇疆涓篏REATEREQUAL 錛?gt;=錛?鎵浠ワ紝鍙湁褰揂LPHA鍊煎ぇ浜庣瓑浜?鐨勯儴浠借娓叉煋錛岃繖鏍鋒爲鐨勮儗鏅氨涓嶇敤鐢諱簡錛?br>*/ g_pMyd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );//寮鍚疉LPHA娣峰悎鍔熻兘 g_pMyd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);//璁劇疆婧愭販鍚堝洜瀛愪負錛圓s,As,As,As) g_pMyd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);//璁劇疆鐩爣娣峰悎鍥犲瓙涓猴紙1-As,1-As,1-As,1-As);
g_pMyd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );//寮鍚疉LPHA嫻嬭瘯鍔熻兘 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHAREF, 0x0f );//璁劇疆ALPHA嫻嬭瘯鍙傝冨?br> g_pMyd3dDevice->SetRenderState( D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL );//璁劇疆APLHA嫻嬭瘯姣旇緝瑙勫垯 //鍦ㄦ澶勫姞杞界汗鐞嗗拰娓叉煋 鍦ㄦ覆鏌撳畬姣曞悗錛屼笉瑕佸繕浜嗗叧闂紑鍚殑鍔熻兘 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE ); g_pMyd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
]]> 鍏憡鏉?/title> http://m.shnenglu.com/Leaf/archive/2009/04/18/80321.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Sat, 18 Apr 2009 01:59:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/18/80321.html http://m.shnenglu.com/Leaf/comments/80321.html http://m.shnenglu.com/Leaf/archive/2009/04/18/80321.html#Feedback 1 http://m.shnenglu.com/Leaf/comments/commentRss/80321.html http://m.shnenglu.com/Leaf/services/trackbacks/80321.html 寮濮嬪彧鏄煡閬撳叕鍛婃澘灝辨槸涓嶇鎽勭浉鏈烘庝箞杞紝瀵硅薄鎬繪槸鍦ㄦ憚鐩告満鍓嶉潰銆傝繖鏄叕鍛婃澘涓殑涓縐嶏紝涔熸槸鏈甯歌鐨勪竴縐?br>濡傛父鎴忎腑浜虹墿銆丯PC鐨勫悕瀛楃瓑錛屽氨鏄敤璐村浘鎶鏈紝鐒跺悗鍐嶇敤鍏憡鏉匡紝榪欐牱涓嶇鐜╁鎬庝箞杞姩瑙嗚錛屾繪槸鑳界湅瑙佸悕瀛楁瀵圭潃鑷繁錛?br>緇堜簬鑷繁瀹炵幇浜嗕竴鍥炲叕鍛婃澘鍑芥暟 void Billboard(IDirect3DDevice9* Device,D3DXMATRIX &matInput,D3DXMATRIX &matOutput) { //========================= //鍏憡鏉挎妧鏈?br> //========================== D3DXMATRIX matBillboard,matView; D3DXMatrixIdentity(&matBillboard);//鍒濆鍖栦負鍗曚綅鐭╅樀 Device->GetTransform(D3DTS_VIEW,&matView);//鍙栧緱瑙傚療鐭╅樀 matBillboard._11 = matView._11;//璧嬪?br> matBillboard._13 = matView._13; matBillboard._31 = matView._31; matBillboard._33 = matView._33;
D3DXMatrixInverse(&matBillboard,NULL,&matBillboard);//姹傚叾閫嗙煩闃?br> matOutput = matBillboard * matInput; //鍏憡鏉跨粨鏉?br>} 鍑芥暟璇存槑錛?br>榪斿洖鍊鹼細void Device 鏄竴涓狪Direct3DDevice9* 綾誨瀷鐨勫弬鏁?br>&matInput 鏄竴涓狣3DXMATRIX 綾誨瀷鐨勫弬鏁? &matOutput 鏄竴涓狣3DXMATRIX 綾誨瀷鐨勫弬鏁?br> 鍔熻兘錛屽皢浼犲叆鐨刴atInput 鐭╅樀錛屼笌鎽勭浉鏈虹煩闃電殑Look鏂瑰悜鐭╅樀鐩鎬箻錛屽緱鍒癿atOutput 鐢ㄦ硶 D3DXMATRIX matWorld; D3DXMatrixIdentity(&matWorld); D3DXMatrixTranslation(&matWorld,1,1,1); //瀵筸atWorld 榪涜蹇呰鐨勫彉鎹?濡倀ranslation 錛宺otation 涔嬬被鐨勩?br> Billboard(g_pDevice,matWorld,matWorld); g_pDevice->SetTransform(D3DTS_WORLD,&matWorld); 鎺ヤ笅鏉ュ氨鍙互榪涜鏉愭枡錛岀汗鐞嗚緗佺粯鍒剁瓑宸ヤ綔浜嗭紒 铏界劧鏄緢綆鍗曠殑鎶鏈紝浣嗗嵈寰堝疄鐢ㄣ?/p>
]]> D3D API璋冪敤娑堣楄〃 http://m.shnenglu.com/Leaf/archive/2009/04/17/80229.html澶ф笂鐚?/dc:creator>澶ф笂鐚?/author>Fri, 17 Apr 2009 05:21:00 GMT http://m.shnenglu.com/Leaf/archive/2009/04/17/80229.html http://m.shnenglu.com/Leaf/comments/80229.html http://m.shnenglu.com/Leaf/archive/2009/04/17/80229.html#Feedback 3 http://m.shnenglu.com/Leaf/comments/commentRss/80229.html http://m.shnenglu.com/Leaf/services/trackbacks/80229.html
API Call
Average number of Cycles
SetVertexDeclaration
6500 - 11250
SetFVF
6400 - 11200
SetVertexShader
3000 - 12100
SetPixelShader
6300 - 7000
SPECULARENABLE
1900 - 11200
SetRenderTarget
6000 - 6250
SetPixelShaderConstant (1 Constant)
1500 - 9000
NORMALIZENORMALS
2200 - 8100
LightEnable
1300 - 9000
SetStreamSource
3700 - 5800
LIGHTING
1700 - 7500
DIFFUSEMATERIALSOURCE
900 - 8300
AMBIENTMATERIALSOURCE
900 - 8200
COLORVERTEX
800 - 7800
SetLight
2200 - 5100
SetTransform
3200 - 3750
SetIndices
900 - 5600
AMBIENT
1150 - 4800
SetTexture
2500 - 3100
SPECULARMATERIALSOURCE
900 - 4600
EMISSIVEMATERIALSOURCE
900 - 4500
SetMaterial
1000 - 3700
ZENABLE
700 - 3900
WRAP0
1600 - 2700
MINFILTER
1700 - 2500
MAGFILTER
1700 - 2400
SetVertexShaderConstant (1 Constant)
1000 - 2700
COLOROP
1500 - 2100
COLORARG2
1300 - 2000
COLORARG1
1300 - 1980
CULLMODE
500 - 2570
CLIPPING
500 - 2550
DrawIndexedPrimitive
1200 - 1400
ADDRESSV
1090 - 1500
ADDRESSU
1070 - 1500
DrawPrimitive
1050 - 1150
SRGBTEXTURE
150 - 1500
STENCILMASK
570 - 700
STENCILZFAIL
500 - 800
STENCILREF
550 - 700
ALPHABLENDENABLE
550 - 700
STENCILFUNC
560 - 680
STENCILWRITEMASK
520 - 700
STENCILFAIL
500 - 750
ZFUNC
510 - 700
ZWRITEENABLE
520 - 680
STENCILENABLE
540 - 650
STENCILPASS
560 - 630
SRCBLEND
500 - 685
Two_Sided_StencilMODE
450 - 590
ALPHATESTENABLE
470 - 525
ALPHAREF
460 - 530
ALPHAFUNC
450 - 540
DESTBLEND
475 - 510
COLORWRITEENABLE
465 - 515
CCW_STENCILFAIL
340 - 560
CCW_STENCILPASS
340 - 545
CCW_STENCILZFAIL
330 - 495
SCISSORTESTENABLE
375 - 440
CCW_STENCILFUNC
250 - 480
SetScissorRect
150 - 340
浣跨敤D3D錛屾垜浠氨寰楃煡閬撳父鐢ㄧ殑API鐨勬秷鑰楋紝鎵嶈兘澶熸柟渚挎垜浠紭鍖栬嚜宸辯殑娓叉煋鍣ㄣ傝繖閲岀粰鍑轟簡甯哥敤API鐨勬秷鑰楄〃錛屽彲浠ユ湁涓涓洿瑙傜殑姣旇緝銆?br>榪欎釜琛ㄤ篃鍙互鍦―3D SDK鏂囨。鐨?Accurately Profiling Direct3D API Calls (Direct3D 9) 涓鏂囦腑鎵懼埌
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
久久综合影视 |
aa国产精品 |
一区在线电影 |
久久久久国产一区二区 |
蜜桃精品久久久久久久免费影院 |
国产乱理伦片在线观看夜一区 |
亚洲视频电影在线 |
久久精品五月婷婷 |
亚洲精品黄色 |
国产精品爱啪在线线免费观看 |
亚洲综合日韩在线 |
久久综合狠狠 |
亚洲一区二区3 |
国产一区久久久 |
欧美激情区在线播放 |
亚洲尤物在线视频观看 |
欧美高清不卡 |
亚洲欧美综合网 |
亚洲美女黄色 |
亚洲高清在线观看一区 |
国产精品乱人伦中文 |
免费av成人在线 |
久久精品导航 |
日韩视频精品 |
欧美华人在线视频 |
久久国产一区二区 |
麻豆av一区二区三区久久 |
欧美一级黄色网 |
亚洲性图久久 |
久久米奇亚洲 |
久久久久久91香蕉国产 |
一区二区三区色 |
最新中文字幕一区二区三区 |
国产日韩欧美夫妻视频在线观看 |
欧美激情久久久久 |
久久久av毛片精品 |
久久精品一区二区三区不卡牛牛
|
国产精品国码视频 |
欧美成人激情视频免费观看 |
久久精品视频播放 |
欧美日韩综合在线免费观看 |
免费日韩视频 |
欧美成年人视频网站欧美 |
欧美性大战xxxxx久久久 |
韩国av一区二区三区四区 |
国产日韩精品一区观看 |
一区二区欧美国产 |
欧美成人a视频 |
免费在线日韩av |
亚洲免费视频在线观看 |
欧美日韩国产黄 |
欧美视频免费在线 |
美日韩免费视频 |
久久福利影视 |
国产欧美一区二区三区沐欲 |
欧美激情一区二区久久久 |
国产视频久久久久久久 |
亚洲午夜成aⅴ人片 |
亚洲激情视频在线观看 |
国产女优一区 |
中文久久精品 |
久久精品网址 |
亚洲午夜影视影院在线观看 |
亚洲影院在线观看 |
国产精品v欧美精品v日韩 |
亚洲精品麻豆 |
亚洲精品在线免费观看视频 |
亚洲免费播放 |
欧美日韩不卡在线 |
亚洲九九精品 |
亚洲精品在线观看免费 |
欧美粗暴jizz性欧美20 |
亚洲国产成人在线播放 |
欧美激情91 |
暖暖成人免费视频 |
亚洲欧洲一区二区天堂久久 |
亚洲第一精品夜夜躁人人躁
|
欧美激情第3页 |
毛片av中文字幕一区二区 |
亚洲国产va精品久久久不卡综合 |
另类亚洲自拍 |
欧美99在线视频观看 |
亚洲免费av网站 |
亚洲日本中文字幕免费在线不卡 |
一区二区三区免费看 |
欧美一区二区三区四区夜夜大片 |
久久久999国产 |
亚洲风情在线资源站 |
亚洲电影一级黄 |
欧美日韩a区 |
久久www免费人成看片高清 |
欧美国产日本高清在线 |
欧美国产丝袜视频 |
亚洲图片欧洲图片av |
亚洲欧美日韩中文在线制服 |
免费亚洲电影 |
欧美日韩另类视频 |
在线成人性视频 |
欧美日韩国产不卡在线看 |
一片黄亚洲嫩模 |
亚洲欧美影音先锋 |
亚洲国产视频一区二区 |
欧美中文字幕在线 |
男人插女人欧美 |
午夜激情综合网 |
美脚丝袜一区二区三区在线观看
|
国产精品视频在线观看 |
一区二区欧美视频 |
久久精品一区二区国产 |
国产精品99久久不卡二区 |
性做久久久久久久免费看 |
国产精品成人在线 |
久久资源在线 |
国产精品极品美女粉嫩高清在线 |
久久伊人一区二区 |
国产精品大片 |
亚洲欧洲在线播放 |
精品69视频一区二区三区
|
久久av一区 |
国产综合色精品一区二区三区 |
欧美激情成人在线 |
狠狠久久五月精品中文字幕 |
亚洲精品久久在线 |
亚洲电影欧美电影有声小说 |
久久av一区二区 |
欧美日韩国产一中文字不卡 |
久久综合999 |
国产亚洲va综合人人澡精品 |
日韩视频免费在线 |
亚洲国产毛片完整版
|
国产精品久久久久久久久久尿 |
欧美国产精品人人做人人爱 |
国产一区视频网站 |
亚洲一二三级电影 |
亚洲一区二区视频在线观看 |
美日韩精品视频免费看 |
国产精品天美传媒入口 |
亚洲久色影视 |
正在播放欧美视频 |
欧美日韩高清区 |
亚洲人成啪啪网站 |
日韩午夜精品 |
亚洲已满18点击进入久久 |
亚洲日韩视频 |
美女尤物久久精品 |
欧美成人午夜免费视在线看片 |
国产一区二区三区免费观看 |
久久综合网hezyo |
国内视频精品 |
久久久中精品2020中文 |
久久尤物电影视频在线观看 |
国产视频精品网 |
久久成年人视频 |
免费国产自线拍一欧美视频 |
有码中文亚洲精品 |
免费久久99精品国产自 |
欧美激情区在线播放 |
亚洲人成亚洲人成在线观看 |
欧美成人黄色小视频 |
亚洲精品视频在线观看免费 |
亚洲自拍16p |
国语自产偷拍精品视频偷 |
美女诱惑一区 |
亚洲图片欧美一区 |
久久精品国产亚洲精品 |
伊人色综合久久天天 |
你懂的国产精品 |
一区二区三区免费在线观看 |
羞羞视频在线观看欧美 |
在线播放日韩 |
欧美日韩亚洲系列 |
久久成人久久爱 |
欧美韩日亚洲 |
91久久精品美女高潮 |
亚洲片在线资源 |
国产精品高潮呻吟久久 |
欧美在线免费 |
亚洲激精日韩激精欧美精品 |
亚洲欧美乱综合 |
99精品欧美一区二区三区综合在线 |
国产精品毛片一区二区三区 |
欧美一区二区日韩 |
亚洲国产成人在线视频 |
亚洲欧美日韩视频一区 |
在线播放中文一区 |
欧美性猛片xxxx免费看久爱 |
羞羞色国产精品 |
亚洲黄色影院 |
久久日韩粉嫩一区二区三区 |
黄色日韩网站 |
欧美日韩在线一区 |
久热国产精品 |
亚洲欧美综合精品久久成人 |
欧美高清视频一区二区三区在线观看 |
亚洲一区欧美一区 |
亚洲日本中文字幕 |
国内外成人免费激情在线视频 |
欧美精品在线免费播放 |
亚洲国产精品一区二区www在线
|
在线免费观看一区二区三区 |
D3DUSAGE_RENDERTARGET 姝ょ汗鐞嗘垨琛ㄩ潰浣滀負涓涓覆鏌撶洰鏍囪鍒涘緩錛屽彧鑳藉垎閰嶅湪D3DPOOL_DEFAULT鐨勬樉鍗″唴瀛樹腑
D3DUSAGE_AUTOGENMIPMAP 璧勬簮浼氳嚜鍔ㄧ敓鎴愬綺懼害錛堝灞傛緇嗚妭錛夌汗鐞?mipmap)(Direct3D 9). 涓嶆敮鎸乿olume textures 鍜屾繁搴﹁〃闈?娣卞害綰圭悊錛堝嚬鍑歌創鍥撅級. 榪欎釜usage 涓嶆敮鎸佺郴緇熷唴瀛樹腑鐨勮祫婧?鐢―3DPOOL_SYSTEMMEM鍙傛暟鍒涘緩鐨勮祫婧?.
D3DUSAGE_DEPTHSTENCIL 姝よ祫婧愬皢浼氭槸涓涓繁搴︾紦鍐詫紝鍙兘鐢―3DPOOL_DEFAULT鍒嗛厤.
D3DUSAGE_DMAP The resource will be a displacement map. 錛燂紵錛?
D3DUSAGE_DONOTCLIP 欏剁偣緙撳啿鍖哄唴瀹逛笉闇瑕佽鍑? 褰撹娓叉煋鐨勭紦鍐插尯璁劇疆姝や綅鏃?D3DRS_CLIPPING 娓叉煋鍣ㄧ姸鎬佸繀欏昏緗負false.
D3DUSAGE_DYNAMIC 璁劇疆姝や綅琛ㄧず欏剁偣緙撳啿闇瑕佸姩鎬佺殑鍐呭瓨浣跨敤銆傝繖瀵歸┍鍔ㄧ▼搴忓緢鏈夌敤鍥犱負瀹冧嬌寰楅┍鍔ㄧ▼搴忓彲浠ュ喅瀹氭妸緙撳啿鍖烘斁鍦ㄥ摢閲屻備竴鑸殑錛岄潤鎬侀《绔紦鍐叉斁緗湪鏄懼瓨鍎垮姩鎬佺紦鍐查槻姝㈠湪AGP鍐呭瓨涓傛敞鎰忓鏋滀綘娌℃湁鎸囧畾璇ユ爣蹇椾綅錛岄偅涔堥《鐐圭紦鍐查粯璁ゅ氨鏄潤鎬佺殑銆?
D3DUSAGE_DYNAMIC浼氳寮哄埗璁劇疆錛屽綋D3DLOCK_DISCARD 鍜?D3DLOCK_NOOVERWRITE 閿佹爣蹇椾竴璧蜂嬌鐢? 鍥犳, D3DLOCK_DISCARD and D3DLOCK_NOOVERWRITE 鍙浣跨敤 D3DUSAGE_DYNAMIC鍒涘緩鐨勯《鐐圭紦鍐叉湁鐢?鏇村鍙傝Managing Resources (Direct3D 9).
鏇村鍏充簬鍔ㄦ侀《鐐圭紦鍐茬殑淇℃伅錛屽弬瑙丳erformance Optimizations (Direct3D 9).
D3DUSAGE_DYNAMIC 鍜?D3DPOOL_MANAGED涓嶅吋瀹? See D3DPOOL.
綰圭悊涔熷彲浠ヤ嬌鐢―3DUSAGE_DYNAMIC.褰撶劧, 鎵樼鐨勭汗鐞嗕笉鑳戒嬌鐢?D3DUSAGE_DYNAMIC. 鍏充簬鍔ㄦ佺汗鐞嗙殑淇℃伅錛屽弬瑙?Using Dynamic Textures.
D3DUSAGE_WRITEONLY
鐢ㄤ簬欏剁偣緙撳啿鍜岀儲寮曠紦鍐?
閫氱煡緋葷粺紼嬪簭鍙兂欏剁偣鍜岀儲寮曠紦鍐蹭腑鍐欏叆鏁版嵁銆備嬌鐢ㄨ繖涓爣璁板彲浠ヨ椹卞姩紼嬪簭閫夋嫨璁╁啓鍏ュ拰娓叉煋鎿嶄綔鏁堢巼鏈浣崇殑鍐呭瓨鍒嗛厤鏂瑰紡銆傚惎鐢ㄦ鐗規у悗灝濊瘯浠庡唴瀛樼紦鍐蹭腑璇誨彇鏁版嵁鐨勬搷浣滀細澶辮觸銆傚彧瀵逛嬌鐢―3DPOOL_DEFAULT鍒嗛厤鍦ㄦ樉瀛樹腑鐨勬暟鎹湁鏁堛?
D3DUSAGE_RTPATCHES Set to indicate that the vertex buffer is to be used for drawing high-order primitives. 錛燂紵錛?
D3DUSAGE_NONSECURE 鍏佽鍒涘緩鐨勮〃闈㈣鍙︿竴涓▼搴忕敤涓涓棤瀹夊叏鎬х殑鍏變韓鍙ユ焺鎵撳紑錛屽彧鍦―3D9EX浣跨敤
D3DUSAGE_TEXTAPI D3D9EX涓撶敤 鐣?
鐢ㄤ簬錛?
IDirect3DDevice9::CreateCubeTexture
IDirect3DDevice9::CreateDepthStencilSurface
IDirect3DDevice9::CreateIndexBuffer
IDirect3DDevice9::CreateOffscreenPlainSurface
IDirect3DDevice9::CreateRenderTarget
IDirect3DDevice9::CreateTexture
IDirect3DDevice9::CreateVertexBuffer
IDirect3DDevice9::CreateVolumeTexture
D3DXCreatexxx texturing functions