青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

永遠(yuǎn)也不完美的程序

不斷學(xué)習(xí),不斷實(shí)踐,不斷的重構(gòu)……

常用鏈接

統(tǒng)計(jì)

積分與排名

好友鏈接

最新評論

D3D狀態(tài)

狀態(tài)


Microsoft® Direct3D®設(shè)備是一個(gè)狀態(tài)機(jī)。應(yīng)用程序設(shè)置光照、渲染和變換模塊的狀態(tài),然后在渲染時(shí)傳遞數(shù)據(jù)給它們。

本節(jié)描述圖形流水線用到的所有不同類型的狀態(tài)。


渲染狀態(tài)


設(shè)備渲染狀態(tài)控制Microsoft® Direct3D®設(shè)備光柵化模塊的行為,它們通過改變渲染狀態(tài)的屬性,使用何種類型的著色算法,霧屬性和其它光柵化器操作來達(dá)到這個(gè)目的。

C++應(yīng)用程序通過調(diào)用IDirect3DDevice9::SetRenderState方法控制渲染狀態(tài)的屬性。D3DRENDERSTATETYPE枚舉類型指定所有可能的渲染狀態(tài),應(yīng)用程序把一個(gè)枚舉類型值作為第一個(gè)參數(shù)傳遞給IDirect3DDevice9::SetRenderState方法。

固定功能頂點(diǎn)處理由IDirect3DDevice9::SetRenderState方法和以下設(shè)備渲染狀態(tài)控制。這些控制中的大多數(shù)在使用可編程頂點(diǎn)著色器時(shí)沒有任何作用。

  • D3DRS_SPECULARENABLE
  • D3DRS_FOGSTART
  • D3DRS_FOGEND
  • D3DRS_FOGDENSITY
  • D3DRS_RANGEFOGENABLE
  • D3DRS_LIGHTING
  • D3DRS_AMBIENT
  • D3DRS_FOGVERTEXMODE
  • D3DRS_COLORVERTEX
  • D3DRS_LOCALVIEWER
  • D3DRS_NORMALIZENORMALS
  • D3DRS_DIFFUSEMATERIALSOURCE
  • D3DRS_SPECULARMATERIALSOURCE
  • D3DRS_AMBIENTMATERIALSOURCE
  • D3DRS_EMISSIVEMATERIALSOURCE
  • D3DRS_VERTEXBLEND

另外,固定功能頂點(diǎn)處理流水線使用以下方法設(shè)置變換、材質(zhì)和光照。

  • IDirect3DDevice9::SetTransform
  • IDirect3DDevice9::SetMaterial
  • IDirect3DDevice9::SetLight
  • IDirect3DDevice9::LightEnable

注意     D3DRS_SPECULARENABLE控制像素流水線中鏡面反射色的加法。D3DRS_FOGSTARTD3DRS_FOGENDD3DRS_FOGDENSITY控制如何計(jì)算霧的起點(diǎn)、終點(diǎn)和像素霧的密度。

更多的信息包含在以下主題中。

概述

阿爾法混合狀態(tài)

阿爾法測試狀態(tài)

環(huán)境光狀態(tài)

抗鋸齒狀態(tài)

剔除狀態(tài)

深度緩存狀態(tài)

霧狀態(tài)

光照狀態(tài)

輪廓和填充狀態(tài)

每頂點(diǎn)顏色狀態(tài)

圖元裁剪狀態(tài)

著色狀態(tài)

模板緩存狀態(tài)

紋理環(huán)繞狀態(tài)


阿爾法混合狀態(tài)


一個(gè)顏色的阿爾法值控制它的透明度。啟用阿爾法混合允許把一個(gè)表面上的顏色、材質(zhì)和紋理根據(jù)透明度混合到另一個(gè)表面上。

更多信息請參閱阿爾法紋理混合紋理混合

C++應(yīng)用程序使用D3DRS_ALPHABLENDENABLE渲染狀態(tài)啟用阿爾法透明混合。Microsoft® Direct3D® API允許多種類型的阿爾法混合。但是,重要的是要注意用戶的三維硬件可能不完全支持所有Direct3D提供的混合狀態(tài)。

已完成的阿爾法混合的類型取決于D3DRS_SRCBLENDD3DRS_DESTBLEND渲染狀態(tài)。源和目的混合狀態(tài)須成對使用。以下示例代碼顯示了如何將源混合狀態(tài)設(shè)置為D3DBLEND_SRCCOLOR并將目的混合狀態(tài)設(shè)置為D3DBLEND_INVSRCCOLOR。

// 本例假設(shè)d3dDevice為指向IDirect3DDevice9接口的有效指針。

 

// 設(shè)置源混合狀態(tài)。

d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);

 

// 設(shè)置目的混合狀態(tài)。

// 設(shè)置目的混合狀態(tài)。

d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);

改變源和目的混合狀態(tài)可以使物體在霧很濃或灰塵很多的環(huán)境中看起來像發(fā)光物體。例如,若應(yīng)用程序在霧很濃的環(huán)境中建模了火焰,能量場,離子束或類似的發(fā)光體,則可把源和目的混合狀態(tài)都設(shè)置為D3DBLEND_ONE。

阿爾法混合的另一種應(yīng)用是控制三維場景中的光照,也稱為光照貼圖。將源混合狀態(tài)設(shè)置為D3DBLEND_ZERO并將目的混合狀態(tài)設(shè)置為D3DBLEND_SRCALPHA,會根據(jù)源的阿爾法信息使場景變暗。源圖元被用作光照貼圖,對幀緩存中的內(nèi)容進(jìn)行縮放,并在適當(dāng)?shù)臅r(shí)候使之變暗,這就是單色光照貼圖。

應(yīng)用程序可以生成彩色光照貼圖,只要把源阿爾法混合狀態(tài)設(shè)置為D3DBLEND_ZERO,并把目的混合狀態(tài)設(shè)置為D3DBLEND_SRCCOLOR。


阿爾法測試狀態(tài)


C++應(yīng)用程序可以用阿爾法測試控制何時(shí)把像素被寫入渲染目標(biāo)表面。通過設(shè)置D3DRS_ALPHATESTENABLE渲染狀態(tài),應(yīng)用程序讓當(dāng)前的Direct3D設(shè)備根據(jù)阿爾法測試函數(shù)測試每個(gè)像素。如果測試成功,那么就把像素寫入表面。如果不成功,那么Direct3D就忽略該像素。應(yīng)用程序通過D3DRS_ALPHAFUNC渲染狀態(tài)選擇阿爾法測試函數(shù)。應(yīng)用程序可以通過D3DRS_ALPHAREF渲染狀態(tài)設(shè)置一個(gè)參考阿爾法值用來和所有像素進(jìn)行比較。

阿爾法測試常用于在光柵化幾乎透明的物體時(shí)提高性能。如果正被光柵化的顏色數(shù)據(jù)比給定像素更不透明(D3DPCMPCAP_GREATEREQUAL),那么該像素就被寫入。否則,光柵化器就完全忽略該像素,這樣就節(jié)省了將兩個(gè)顏色混合所需要的處理。以下示例代碼檢查當(dāng)前設(shè)備是否支持一個(gè)給定的比較函數(shù),若支持,則設(shè)置比較函數(shù)的參數(shù),用來在渲染時(shí)提高性能。

// 本示例代碼假設(shè)pCaps為一D3DCAPS9結(jié)構(gòu),

// 被先前的一個(gè)IDirect3D9::GetDeviceCaps調(diào)用填充。

 

if (pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)

{

    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);

    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);

    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);

}

 

// 如果不支持比較,那么就照常渲染。唯一的缺點(diǎn)是沒有性能上的提升。

并不是所有的硬件都支持全部阿爾法測試特性。可以通過調(diào)用IDirect3D9::GetDeviceCaps方法檢查設(shè)備能力,取回設(shè)備能力后,根據(jù)希望使用的比較函數(shù)檢查相關(guān)D3DCAPS9結(jié)構(gòu)的AlphaCmpCaps成員。如果AlphaCmpCaps成員只包含D3DPCMPCAPS_ALWAYS能力或D3DPCMPCAPS_NEVER能力,那么驅(qū)動(dòng)程序不支持阿爾法測試。


環(huán)境光狀態(tài)


環(huán)境光是周圍的光,從各個(gè)方向照射而來。

有關(guān)Microsoft® Direct3D®如何使用環(huán)境光的信息,請參閱直射光與環(huán)境光,和與光照相關(guān)的數(shù)學(xué)

C++應(yīng)用程序調(diào)用IDirect3DDevice9::SetRenderState方法設(shè)置環(huán)境光的顏色,并將D3DRS_AMBIENT枚舉類型值作為第一個(gè)參數(shù)傳入。第二個(gè)參數(shù)是顏色值,默認(rèn)值為零。

// 本例假設(shè)d3dDevice為指向IDirect3DDevice9接口的有效指針。

 

// 設(shè)置環(huán)境光

 

d3dDevice->SetRenderState(D3DRS_AMBIENT, 0x00202020);


抗鋸齒狀態(tài)


抗鋸齒是使屏幕上的線和邊緣看起來更為平滑的一種方法。Microsoft® Direct3D®支持兩種抗鋸齒方法:邊緣抗鋸齒和全屏抗鋸齒。

有關(guān)這些技術(shù)的更多細(xì)節(jié),請參閱抗鋸齒

默認(rèn)情況下,Direct3D不執(zhí)行抗鋸齒。邊緣抗鋸齒需要渲染第二遍,要啟用邊緣抗鋸齒,應(yīng)該把D3DRS_EDGEANTIALIAS渲染狀態(tài)設(shè)置為TRUE,要禁用邊緣抗鋸齒,應(yīng)該把D3DRS_EDGEANTIALIAS設(shè)置為FALSE。

要啟用全屏抗鋸齒,應(yīng)該把D3DRS_MULTISAMPLEANTIALIAS渲染狀態(tài)設(shè)置為TRUE。要禁用全屏抗鋸齒,應(yīng)該把D3DRS_MULTISAMPLEANTIALIAS設(shè)置為FALSE。


剔除狀態(tài)


Direct3D渲染圖元時(shí)會剔除背向用戶的圖元。

C++應(yīng)用程序使用D3DRS_CULLMODE渲染狀態(tài)設(shè)置剔除模式,它可以被設(shè)置為D3DCULL枚舉類型的成員。默認(rèn)情況下,Direct3D把頂點(diǎn)逆時(shí)針排列的面作為背向面剔除。

以下示例代碼描述了設(shè)置剔除模式的過程,這里把頂點(diǎn)順時(shí)針排列的面作為背向面剔除。

// 本例假設(shè)d3dDevice為指向IDirect3DDevice9接口的有效指針。

// 設(shè)置剔除狀態(tài)。

d3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);


深度緩存狀態(tài)


深度緩存是消除隱藏線和隱藏面的一種方法。默認(rèn)的情況下,Direct3D不使用深度緩存。

有關(guān)深度緩存的概念,請參閱深度緩存

C++應(yīng)用程序用D3DRS_ZENABLE渲染狀態(tài)更新深度緩存的狀態(tài),用D3DZBUFFERTYPE枚舉類型成員指定新的狀態(tài)值。

若應(yīng)用程序要阻止Direct3D寫入深度緩存,則可在調(diào)用IDirect3DDevice9::SetRenderState時(shí)用D3DRS_ZWRITEENABLE枚舉類型作為第一個(gè)參數(shù),并將第二個(gè)參數(shù)指定為D3DZB_FALSE。

以下示例代碼顯示了如何將深度緩存狀態(tài)設(shè)置為啟用z緩存。

// 本例假設(shè)d3dDevice為指向IDirect3DDevice9接口的有效指針。

// 啟用z緩存

d3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

應(yīng)用程序也可以使用D3DRS_ZFUNC渲染狀態(tài)控制Direct3D用于深度緩存的比較函數(shù)。

Z偏移是把一個(gè)表面顯示在另一個(gè)表面之前的一種方法,即使它們的深度值相同。可以將此技術(shù)用于多種效果。一個(gè)常用的例子是在墻上渲染影子,影子和墻具有相同的深度值,但是應(yīng)用程序希望把影子顯示在墻上,只要給影子賦一個(gè)z偏移值就可以讓Direct3D正確地顯示它們(請參閱D3DRS_ZBIAS)。


霧狀態(tài)


霧效果可以賦予三維場景更強(qiáng)的真實(shí)感。霧效果不僅可以用于模擬霧,也能減少遠(yuǎn)處場景的清晰度。這反映了真實(shí)世界中的情況,物體離用戶越遠(yuǎn),它們的細(xì)節(jié)就越模糊。

有關(guān)如何在應(yīng)用程序中使用霧的更多信息,請參閱

C++應(yīng)用程序通過設(shè)備渲染狀態(tài)控制霧。D3DRENDERSTATETYPE枚舉類型包括許多狀態(tài),控制應(yīng)用程序使用的是像素(查找表)霧還是頂點(diǎn)霧,霧是何顏色,系統(tǒng)使用的霧的公式,及公式的參數(shù)。

可以通過將D3DRS_FOGENABLE渲染狀態(tài)設(shè)置為TRUE啟用霧。霧的顏色可以使用D3DRS_FOGCOLOR渲染狀態(tài)設(shè)置為指定顏色,霧的顏色的阿爾法分量被忽略。

D3DRS_FOGTABLEMODED3DRS_FOGVERTEXMODE渲染狀態(tài)控制霧計(jì)算使用的公式,它們也間接控制使用何種類型的霧。這兩個(gè)渲染狀態(tài)都可以被設(shè)置為D3FOGMODE枚舉類型的成員。將任何一個(gè)渲染狀態(tài)設(shè)置為D3DFOG_NONE相應(yīng)地禁用像素霧或頂點(diǎn)霧。如果兩個(gè)渲染狀態(tài)都被設(shè)置為有效的模式,則系統(tǒng)只啟用像素霧。

D3DRS_FOGSTARTD3DRS_FOGEND渲染狀態(tài)控制D3DFOG_LINEAR模式下霧公式的參數(shù)。D3DRS_FOGDENSITY渲染狀態(tài)控制指數(shù)霧模式下霧的密度。

更多信息請參閱霧的參數(shù)


光照狀態(tài)


使用Microsoft® Direct3D®幾何流水線的應(yīng)用程序可以啟用或禁用光照計(jì)算。只有包含頂點(diǎn)法向的頂點(diǎn)才能正確地計(jì)算光照,不含法向的頂點(diǎn)在所有光照計(jì)算中將使用零點(diǎn)積,因此沒有法向的頂點(diǎn)得不到光照。

更多信息請參閱光照的數(shù)學(xué)

應(yīng)用程序通過將D3DRS_LIGHTING渲染狀態(tài)設(shè)置為TRUE啟用Direct3D光照,這是默認(rèn)的設(shè)置,應(yīng)用程序通過將該渲染狀態(tài)設(shè)置為FALSE禁用Direct3D光照。

光照渲染狀態(tài)與可以對頂點(diǎn)緩存中的頂點(diǎn)執(zhí)行的光照計(jì)算完全無關(guān)。在進(jìn)行頂點(diǎn)處理時(shí)IDirect3DDevice9::ProcessVertices方法接收自己的標(biāo)志用于控制光照計(jì)算。


輪廓和填充狀態(tài)


沒有紋理的圖元會使用它們的材質(zhì)指定的顏色進(jìn)行渲染,或者如果為頂點(diǎn)指定了顏色,就使用頂點(diǎn)色。可以將D3DRS_FILLMODE渲染狀態(tài)指定為D3DFILLMODE枚舉類型的值以選擇填充圖元的方法。

要啟用抖動(dòng),應(yīng)用程序必須把D3DRS_DITHERENABLE枚舉類型值作為第一個(gè)參數(shù)傳給IDirect3DDevice9::SetRenderState,并把第二個(gè)參數(shù)設(shè)置為TRUE,把第二個(gè)參數(shù)設(shè)置為FALSE則禁用抖動(dòng)。

有時(shí),畫一條線中的最后一個(gè)像素可能導(dǎo)致與周圍圖元的重疊。可以使用D3DRS_LASTPIXEL枚舉值控制這種情況。但是,未經(jīng)深思熟慮最好不要改變這個(gè)設(shè)置。在有些情況下,禁止渲染最后一個(gè)像素可能會導(dǎo)致圖元之間的縫隙。

通過設(shè)置適當(dāng)?shù)漠嬀€模式可以畫物體的輪廓。默認(rèn)的畫線狀態(tài)是畫實(shí)線。更多信息請參閱Direct3D擴(kuò)展(D3DX)線段繪制渲染狀態(tài)。


每頂點(diǎn)顏色狀態(tài)


當(dāng)使用彈性頂點(diǎn)格式(FVF)編碼時(shí),頂點(diǎn)可以同時(shí)包含頂點(diǎn)顏色和頂點(diǎn)法向的信息。默認(rèn)情況下, Microsoft® Direct3D®在計(jì)算光照時(shí)使用這些信息。要設(shè)置是否把頂點(diǎn)顏色用于光照計(jì)算,應(yīng)該調(diào)用IDirect3DDevice9::SetRenderState方法,把D3DRS_COLORVERTEX作為第一個(gè)參數(shù),把第二個(gè)參數(shù)設(shè)置為FALSE禁用頂點(diǎn)顏色光照,或TRUE啟用之。

若每頂點(diǎn)顏色被啟用,則應(yīng)用程序可以配置系統(tǒng)從何處取得源頂點(diǎn)顏色信息。D3DRS_AMBIENTMATERIALSOURCED3DRS_DIFFUSEMATERIALSOURCED3DRS_EMISSIVEMATERIALSOURCED3DRS_SPECULARMATERIALSOURCE渲染狀態(tài)控制相應(yīng)環(huán)境反射色、漫反射色、放射色和鏡面反射顏色成員的來源。每個(gè)狀態(tài)可以被設(shè)置為D3DMATERIALCOLORSOURCE枚舉類型的成員,該枚舉類型定義了一些常數(shù),通知系統(tǒng)是使用當(dāng)前材質(zhì)的顏色、頂點(diǎn)的漫反射顏色還是頂點(diǎn)的鏡面反射顏色作為指定顏色成員的來源。


圖元裁剪狀態(tài)


如果圖元的一部分位于視區(qū)外,那么Microsoft® Direct3D®可以對此類圖元進(jìn)行裁剪。在C++應(yīng)用程序中,Direct3D裁剪由D3DRS_CLIPPING渲染狀態(tài)控制。可以將該渲染狀態(tài)設(shè)置為TRUE(默認(rèn)值)啟用圖元裁剪,或?qū)⒅O(shè)置為FALSE禁用Direct3D裁剪服務(wù)。



著色狀態(tài)


Direct3D同時(shí)支持平面和高洛德著色,默認(rèn)情況下使用高洛德著色。要控制當(dāng)前的著色模式,C++應(yīng)用程序可以給D3DRS_SHADEMODE渲染狀態(tài)指定一個(gè)D3DSHADEMODE枚舉類型值。

以下C++示例代碼顯示了把著色狀態(tài)設(shè)置為平面著色模式的過程。

// 本例假設(shè)d3dDevice為指向IDirect3DDevice9接口的有效指針。

// 設(shè)置著色模式。

d3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);


模板緩存狀態(tài)


應(yīng)用程序使用模板緩存決定是否把一個(gè)像素寫入到渲染目標(biāo)表面。

細(xì)節(jié)請參閱模板緩存技術(shù)

C++應(yīng)用程序通過調(diào)用IDirect3DDevice9::SetRenderState方法啟用或禁用模板緩存,應(yīng)該將D3DRS_STENCILENABLE作為第一個(gè)參數(shù)的值,并相應(yīng)地把第二個(gè)參數(shù)設(shè)置為TRUE或FALSE啟用或禁用模板緩存。

通過調(diào)用IDirect3DDevice9::SetRenderState,可以設(shè)置Microsoft® Direct3D®執(zhí)行模板測試時(shí)使用的比較函數(shù),只需將第一個(gè)參數(shù)的值設(shè)置為D3DRS_STENCILFUNC,并把D3DCMPFUNC枚舉類型值作為第二個(gè)參數(shù)的值傳入。

模板參考值是在模板緩存中的值,模板函數(shù)用它進(jìn)行測試。默認(rèn)情況下,模板參考值為零。應(yīng)用程序可以調(diào)用IDirect3DDevice9::SetRenderState設(shè)置它的值,只需將D3DRS_STENCILREF作為第一個(gè)參數(shù)傳入,并把第二個(gè)參數(shù)的值設(shè)置為新的參考值。

Direct3D在對每個(gè)像素執(zhí)行模板測試前,會對模板參考值和模板掩碼值進(jìn)行按位與操作,并把得到的結(jié)果用模板比較函數(shù)與模板緩存的內(nèi)容進(jìn)行比較。應(yīng)用程序可以調(diào)用IDirect3DDevice9::SetRenderState設(shè)置模板掩碼值,只需將D3DRS_STENCILMASK作為第一個(gè)參數(shù)傳入,并把第二個(gè)參數(shù)設(shè)置為新的模板掩碼值。

要設(shè)置模板測試失敗時(shí)Direct3D采取的行動(dòng),可以調(diào)用IDirect3DDevice9::SetRenderState并將D3DRS_STENCILFAIL作為第一個(gè)參數(shù)傳入,第二個(gè)參數(shù)必須被設(shè)為D3DSTENCILCAPS枚舉類型的成員。

應(yīng)用程序也可以控制當(dāng)模板測試通過但是z緩存測試失敗時(shí)Direct3D如何響應(yīng),只需調(diào)用IDirect3DDevice9::SetRenderState,將D3DRS_STENCILZFAIL作為第一個(gè)參數(shù)傳遞,并把第二個(gè)參數(shù)設(shè)為D3DSTENCILCAPS枚舉類型的成員。

另外,應(yīng)用程序還可以控制當(dāng)模板測試和z緩存測試都通過時(shí)Direct3D做什么,只需調(diào)用IDirect3DDevice9::SetRenderState并將D3DRS_STENCILPASS作為第一個(gè)參數(shù),并把第二個(gè)參數(shù)設(shè)為D3DSTENCILCAPS枚舉類型的成員。

寫掩碼可以用于修改將要寫入模板緩存的值。要設(shè)置模板緩存寫掩碼,只需調(diào)用IDirect3DDevice9::SetRenderState,并將D3DRS_STENCILWRITEMASK作為第一個(gè)參數(shù)傳遞,并把第二個(gè)參數(shù)設(shè)為寫掩碼的值。


紋理環(huán)繞狀態(tài)


D3DRS_WRAP0D3DRS_WRAP7渲染狀態(tài)啟用或禁用設(shè)備的多重紋理級聯(lián)中各種紋理的u和v環(huán)繞。可以把這些渲染狀態(tài)設(shè)置為標(biāo)志D3DWRAPCOORD_0,D3DWRAPCOORD_1,D3DWRAPCOORD_2和D3DWARPCOORD_3的組合,相應(yīng)地啟用紋理在第一、第二、第三和第四個(gè)方向上的環(huán)繞,若使用零值,則禁用所有環(huán)繞。默認(rèn)情況下,所有紋理的所有方向上的紋理環(huán)繞都被禁用。

有關(guān)的概念綜述請參閱紋理環(huán)繞


取樣器狀態(tài)


取樣狀態(tài)控制諸如過濾、tiling及尋址等與取樣有關(guān)的操作。

取樣狀態(tài)

SetSamplerState設(shè)置取樣器狀態(tài)(包括tessellator中對位移貼圖進(jìn)行取樣的狀態(tài)),為了能夠在編譯時(shí)檢測出正在移植Microsoft® DirectX® 8.x的應(yīng)用程序,這些狀態(tài)已經(jīng)被重新命名并以D3DSAMP_前綴開頭。這些狀態(tài)包括:

  • D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV, D3DSAMP_ADDRESSW
  • D3DSAMP_BORDERCOLOR
  • D3DSAMP_MAGFILTER, D3DSAMP_MINFILTER, D3DSAMP_MIPFILTER
  • D3DSAMP_MIPMAPLODBIAS
  • D3DSAMP_MAXMIPLEVEL
  • D3DSAMP_MAXANISOTROPY

DirectX 9.0中,使用像素著色器2.0版時(shí),雖然紋理坐標(biāo)的數(shù)量仍被限制為8個(gè),但每一趟最多可以支持16個(gè)紋理表面。有些紋理層狀態(tài)與表面相關(guān),有些與坐標(biāo)集相關(guān),有些與頂點(diǎn)處理相關(guān),而有些則與像素處理相關(guān)。IDirect3DDevice9::SetSamplerState方法可以指定紋理過濾、平鋪、截取、MIPLOD等狀態(tài),最多可以有16個(gè)取樣器。

C++應(yīng)用程序通過調(diào)用IDirect3DDevice9::SetSamplerState方法控制與紋理有關(guān)的取樣狀態(tài)。D3DSAMPLERSTATETYPE枚舉類型用于指定取樣狀態(tài)。

相關(guān)主題


紋理層狀態(tài)


紋理層狀態(tài)控制紋理坐標(biāo)的生成及紋理坐標(biāo)的狀態(tài),如環(huán)繞模式。

C++應(yīng)用程序通過調(diào)用IDirect3DDevice9::SetTextureStageState方法控制與紋理有關(guān)的狀態(tài)。D3DTEXTURESTAGESTATETYPE枚舉類型定義了所有與紋理有關(guān)的渲染狀態(tài),應(yīng)用程序應(yīng)該將D3DTEXTURESTAGESTATETYPE枚舉類型值作為第一個(gè)參數(shù)傳遞給IDirect3DDevice9::SetTextureStageState方法。

應(yīng)用程序可以通過調(diào)用IDirect3DDevice9::SetTexture方法設(shè)置某一層的紋理。

SetTextureStageState

SetTextureStageState現(xiàn)在可以設(shè)置以下狀態(tài)。

  • 固定功能頂點(diǎn)處理狀態(tài)。這些狀態(tài)控制對紋理坐標(biāo)的操控:D3DTSS_TEXTURETRANSFORMFLAGS和 D3DTSS_TEXCOORDINDEX。最多可以設(shè)置八個(gè)(因?yàn)镈irect3D總是支持八組紋理坐標(biāo))
  • 固定功能像素著色器狀態(tài)(以前的TextureStageState)。D3DTSS_COLOROP, D3DTSS_ALPHAOP, D3DTSS_COLORARG0, D3DTSS_COLORARG1, D3DTSS_COLORARG2, D3DTSS_ALPHAARG0, D3DTSS_ALPHAARG1, D3DTSS_ALPHAARG2, D3DTSS_BUMPENVMAT00, D3DTSS_BUMPENVMAT01, D3DTSS_BUMPENVMAT10, D3DTSS_BUMPENVMAT11, D3DTSS_BUMPENVLSCALE, D3DTSS_BUMPENVLOFFSET, and D3DTSS_RESULTARG。這些狀態(tài)最多可有MaxTextureBlendStages組可供設(shè)置。

D3DTSS_TEXCOORDINDEX是一個(gè)固定功能頂點(diǎn)處理狀態(tài)。如果使用可編程頂點(diǎn)著色器,那么這個(gè)狀態(tài)被忽略。

應(yīng)用程序可以使用的紋理取樣器的數(shù)量由像素著色器的版本決定。

  • 固定功能像素著色器:MaxTextureBlendStages/MaxSimultaneousTextures個(gè)紋理取樣器
  • ps.1.1到ps.1.3: 4個(gè)紋理取樣器。
  • ps.1.4:6個(gè)紋理取樣器。
  • ps.2.0:16個(gè)紋理取樣器。
  • 支持Microsoft DirectX® 9.0位移貼圖的設(shè)備將支持一個(gè)額外的取樣器(D3DDMAPSAMPLER),它在tesselator對位移貼圖進(jìn)行取樣。

有關(guān)更多紋理混合的信息,請參閱紋理混合


狀態(tài)塊


一個(gè)狀態(tài)塊是一組設(shè)備狀態(tài)、渲染狀態(tài)、光照和材質(zhì)的參數(shù)、變換狀態(tài)、紋理層狀態(tài)和當(dāng)前紋理信息。狀態(tài)塊是設(shè)備當(dāng)前狀態(tài)的一個(gè)記錄,或者是被顯式地記錄下來的。可以通過單獨(dú)的一次調(diào)用把記錄應(yīng)用于設(shè)備。渲染設(shè)備可以優(yōu)化設(shè)備狀態(tài)塊以加速應(yīng)用程序所要求的一般順序的狀態(tài)改變。另外,設(shè)備狀態(tài)塊也可以使改變設(shè)備狀態(tài)更為方便。

C++應(yīng)用程序可以調(diào)用IDirect3DDevice9::EndStateBlock方法結(jié)束記錄一個(gè)狀態(tài)塊,以及調(diào)用IDirect3DDevice9::CreateStateBlock方法保存一組預(yù)定義的設(shè)備狀態(tài)數(shù)據(jù)時(shí),得到一個(gè)狀態(tài)塊句柄。

更多信息包含在以下主題中。

概述

創(chuàng)建預(yù)定義的狀態(tài)塊

記錄狀態(tài)塊


創(chuàng)建預(yù)定義的狀態(tài)塊


IDirect3DDevice9::CreateStateBlock方法創(chuàng)建一個(gè)新的狀態(tài)塊,它包含全部的設(shè)備狀態(tài)或是僅與頂點(diǎn)或像素處理相關(guān)的設(shè)備狀態(tài)。IDirect3DDevice9::CreateStateBlock方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)代表要在新的狀態(tài)塊中記錄的狀態(tài)信息的類型,第二個(gè)參數(shù)是返回句柄的地址,用于接收當(dāng)調(diào)用成功時(shí)返回的有效狀態(tài)塊的句柄。

第一個(gè)參數(shù)為D3DSTATEBLOCKTYPE枚舉類型,可以從以下三種選擇:

  • 保存頂點(diǎn)和像素狀態(tài)。
  • 只保存頂點(diǎn)狀態(tài)。
  • 只保存像素狀態(tài)。

要了解可以保存的狀態(tài)的全部列表,請參閱D3DSTATEBLOCKTYPE

一定要檢查IDirect3DDevice9::CreateStateBlock方法的錯(cuò)誤代碼,如果該方法失敗,很可能是顯示模式改變了。為了從此類失敗中恢復(fù),應(yīng)用程序應(yīng)該重新創(chuàng)建表面,然后重新創(chuàng)建狀態(tài)塊。


記錄狀態(tài)塊


IDirect3DDevice9接口提供IDirect3DDevice9::BeginStateBlock方法,在應(yīng)用程序設(shè)置設(shè)備狀態(tài)時(shí),該方法會把它們記錄到一個(gè)狀態(tài)塊中。該方法使系統(tǒng)開始把設(shè)備狀態(tài)的改變記錄到一個(gè)狀態(tài)塊中,而不是將它們(新的設(shè)備狀態(tài))應(yīng)用于設(shè)備。可被記錄的狀態(tài)列表請參閱IDirect3DDevice9::BeginStateBlock

當(dāng)應(yīng)用程序完成對狀態(tài)塊的記錄后,應(yīng)該調(diào)用IDirect3DDevice9::EndStateBlock方法通知系統(tǒng)以結(jié)束記錄。該方法返回一個(gè)狀態(tài)塊的句柄,應(yīng)用程序應(yīng)該將接收狀態(tài)塊句柄的變量的地址作為pToken參數(shù)傳入。應(yīng)用程序可以根據(jù)需要用這個(gè)句柄應(yīng)用該狀態(tài)塊,記錄新的狀態(tài)數(shù)據(jù)到狀態(tài)塊中,以及在不再需要該狀態(tài)塊時(shí)將之刪除。

一定要檢查IDirect3DDevice9::EndStateBlock方法的錯(cuò)誤代碼,如果該方法失敗,很可能是因?yàn)轱@示模式改變了。應(yīng)該合理地設(shè)計(jì)應(yīng)用程序,使之能夠從此類失敗中恢復(fù),只要重新創(chuàng)建表面并再次記錄狀態(tài)塊就可以達(dá)到這個(gè)目的。

posted on 2008-12-24 17:37 狂爛球 閱讀(2795) 評論(0)  編輯 收藏 引用 所屬分類: 圖形編程

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            韩国精品主播一区二区在线观看| 亚洲精品视频免费| 尤物99国产成人精品视频| 国产精品久久| 国产精品午夜在线| 一区二区三区在线观看视频| 国产欧美亚洲视频| 亚洲承认在线| 在线视频欧美日韩| 久久激情综合| 久久久久国产一区二区| 欧美在线观看视频| 老牛国产精品一区的观看方式| 久久亚洲精品欧美| 欧美不卡视频一区| 国产精品成av人在线视午夜片| 国产精品家教| 在线观看三级视频欧美| 最新日韩av| 香蕉久久久久久久av网站| 欧美成人a视频| 99精品99| 久久综合色播五月| 国产精品蜜臀在线观看| 在线精品视频一区二区| 亚洲午夜电影在线观看| 免费国产一区二区| 9l国产精品久久久久麻豆| 久久激情视频免费观看| 欧美片网站免费| 国产欧美在线看| 99精品国产一区二区青青牛奶| 久久爱另类一区二区小说| 亚洲国产另类久久精品| 亚洲视频在线观看一区| 欧美黄网免费在线观看| 狠狠色狠狠色综合日日91app| a4yy欧美一区二区三区| 另类尿喷潮videofree | 久久久国产精品一区二区中文| 欧美3dxxxxhd| 欧美一区二区三区电影在线观看| 欧美精品国产一区| 韩国三级电影一区二区| 欧美一激情一区二区三区| 欧美 日韩 国产 一区| 亚洲在线视频一区| 欧美激情精品久久久久久变态| 国产精品亚洲片夜色在线| 亚洲美女福利视频网站| 麻豆91精品91久久久的内涵| 亚洲曰本av电影| 国产精品久久久对白| 亚洲精品男同| 久久视频这里只有精品| 欧美一区二区日韩| 国产精品黄色在线观看| 国产精品99久久久久久久女警| 免费成人性网站| 久久亚洲精品中文字幕冲田杏梨| 国产精品视频自拍| 欧美亚洲一区| 午夜电影亚洲| 国产日韩欧美| 欧美一区二区三区免费观看视频| 久久一区中文字幕| 欧美精品亚洲精品| 亚洲日本成人女熟在线观看| 美女网站久久| 久久天堂精品| 亚洲国产精品一区二区三区| 久久一区中文字幕| 久久久久久久一区| 在线国产日韩| 亚洲电影免费观看高清完整版在线 | 欧美成人视屏| 亚洲精品一区二区三区樱花| 欧美黑人国产人伦爽爽爽| 美女图片一区二区| 亚洲乱码精品一二三四区日韩在线 | 久久最新视频| 老司机午夜精品视频| 91久久精品国产91性色tv| 欧美高清视频一区二区| 欧美成人资源网| 亚洲视频在线观看免费| 中文在线一区| 国产亚洲免费的视频看| 欧美jizzhd精品欧美喷水| 欧美激情按摩在线| 午夜精品久久久久久久久| 午夜精品国产| 亚洲激情在线| 中文精品一区二区三区| 国内久久婷婷综合| 亚洲欧洲一区| 国产日韩av一区二区| 亚洲成人在线免费| 日韩视频在线观看国产| 日韩午夜精品| 国产欧美一区二区精品性| 免费视频最近日韩| 国产精品初高中精品久久| 久久一区二区精品| 欧美日本三区| 久热爱精品视频线路一| 欧美人体xx| 久久人人爽人人爽| 欧美日韩亚洲一区二区三区在线观看 | 国产精品一级久久久| 亚洲欧美日韩国产一区二区| 久久久久久久一区二区三区| 日韩天堂在线观看| 亚洲三级免费电影| 国产日韩欧美亚洲一区| 亚洲国产婷婷香蕉久久久久久99 | 欧美中文字幕在线视频| 亚洲精品中文在线| 欧美一级在线播放| 亚洲一区免费观看| 久久综合给合| 久久久久久久性| 国产精品任我爽爆在线播放| 亚洲第一中文字幕在线观看| 国产日韩欧美在线| 一区二区高清视频| 亚洲区第一页| 久久久久久久久久久久久9999| 亚洲欧美日本另类| 欧美人与禽猛交乱配视频| 亚洲电影有码| 亚洲国产精品久久91精品| 性18欧美另类| 欧美一区午夜精品| 国产精品国产三级国产专播品爱网| 亚洲国产高清一区二区三区| 欲色影视综合吧| 久久精品免费看| 久久久精品欧美丰满| 国产日韩av在线播放| 这里只有精品在线播放| 亚洲视频在线观看视频| 欧美涩涩网站| 一本大道久久a久久综合婷婷| 亚洲美女黄色片| 欧美大片在线观看| 亚洲精品国产精品国自产观看| 亚洲精选大片| 欧美日韩国产一区二区三区地区| 亚洲国产美女精品久久久久∴| 在线观看日韩欧美| 久久天天躁狠狠躁夜夜爽蜜月| 久久一二三国产| 亚洲国产女人aaa毛片在线| 欧美不卡视频一区发布| 亚洲精品日韩综合观看成人91| 亚洲精品小视频在线观看| 欧美高清免费| 最近中文字幕日韩精品| av成人免费在线| 久久成人免费网| 国产一区二区三区在线观看精品 | 免费观看国产成人| 亚洲三级国产| 欧美视频日韩| 亚洲女女做受ⅹxx高潮| 久久精品一区四区| 亚洲高清色综合| 亚洲第一在线| 激情久久综合| 欧美激情视频在线播放| av成人免费在线| 翔田千里一区二区| 国内激情久久| 欧美精品一区二区三区在线播放 | 国产欧美精品日韩区二区麻豆天美| 香蕉成人久久| 欧美国产大片| 亚洲午夜高清视频| 国语自产精品视频在线看8查询8 | 国产日韩在线视频| 免费在线观看精品| 亚洲无限乱码一二三四麻| 久久久久久久网站| 一本久道久久综合婷婷鲸鱼| 国产欧美一区视频| 欧美精品一区二区三| 欧美在线高清视频| 一本色道久久综合亚洲精品按摩 | 久久久精品国产99久久精品芒果| 国产午夜精品理论片a级探花 | 欧美成人精品激情在线观看| 夜夜爽www精品| 麻豆精品视频在线| 亚洲免费视频一区二区| 亚洲激情网址| 在线日韩中文| 国产视频在线一区二区| 欧美日韩中文字幕精品| 免费视频一区|