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

隨筆 - 132  文章 - 51  trackbacks - 0
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(7)

隨筆分類

隨筆檔案

文章分類

文章檔案

cocos2d-x

OGRE

OPenGL

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

狀態(tài)

    Direct3D設備使用狀態(tài)來配置所有的管道處理。采樣器狀態(tài)通過例如定義紋理尋址方式(texture addressing)和過濾模式控制紋理采樣器設置。紋理狀態(tài)設置用于控制紋理如何被組合以及相互之間如何混合的多重紋理混合器。渲染狀態(tài)控制大多數管道狀態(tài)。

    狀態(tài)塊是存儲和恢復狀態(tài)的便利機制。

狀態(tài)塊保存和恢復狀態(tài)

    狀態(tài)塊是一組設備狀態(tài)。設備狀態(tài)由渲染狀態(tài),定點狀態(tài),像素狀態(tài),或上述的所有狀態(tài)組成。狀態(tài)塊包含設備當前狀態(tài)的快照,或你可以創(chuàng)建狀態(tài)塊來記錄每一個應用程序造成的狀態(tài)改變。

創(chuàng)建狀態(tài)塊

    選擇你想獲取的狀態(tài)類型,比功能照下面的方法創(chuàng)建狀態(tài)塊:

    IDirect3DStateBlock9* pStateBlock = NULL;

    pd3dDevice->CreateStateBlock(D3DSBT_ALL, &pStateBlock);

    CreateStateBlock創(chuàng)建狀態(tài)塊,并且獲取設備狀態(tài)。設備狀態(tài)由第一個參數中狀態(tài)塊類型指定。該狀態(tài)可以為下面任一值:

l         所有的設備狀態(tài)

l         所有的像素狀態(tài)

l         所有的定點狀態(tài)

獲取狀態(tài)信息

    創(chuàng)建狀態(tài)塊自動獲取當前設備狀態(tài)。效果系統(tǒng)使用狀態(tài)塊保存狀態(tài)。在調用Begin后,狀態(tài)塊被創(chuàng)建并且獲取狀態(tài)。當調用End,狀態(tài)塊中狀態(tài)被重新應用于設備。

    要保存自定義的狀態(tài)序列,將你需要保存的狀態(tài)更改序列包含在BeginStateBlockEndStateBlock之間。BeginStateBlock通知當前的設備設置狀態(tài)塊并且將EndStateBlock調用之前發(fā)生的狀態(tài)改變添加到其中。下面是例子:

    IDirect3DStateBlock9* pStateBlock = NULL;

    pd3dDevice->BeginStateBlock();

//這里發(fā)生任意數量的狀態(tài)改變

//SetRenderState, SetSamplerState, SetTextureStageState…

    pd3dDevice->EndStateBlock(&pStateBlock);

    這將在自定義狀態(tài)塊中保存代碼序列中任意數量的狀態(tài)改變。之后,當你想要使用狀態(tài)塊重置設備狀態(tài)時,調用IDirect3DStateBlock::Apply。這僅僅會覆蓋狀態(tài)塊中義獲取的設備狀態(tài)。其他在自定義狀態(tài)塊中沒有獲取的設備狀態(tài)不會改變。(記得在不需要使用狀態(tài)塊對象時調用Release)。

 

用狀態(tài)塊保存所有的設備狀態(tài)

    狀態(tài)塊可以用于獲取所有的設備狀態(tài)。下面是設備狀態(tài)中包含的狀態(tài)元素:

l         頂點狀態(tài);

l         像素狀態(tài);

l         每個紋理指定的采樣器;

l         每個頂點紋理;

l         每個位移映射紋理(Each displacement map texture;

l         當前紋理的調色板;

l         對于每個頂點流:指向頂點緩存的指針,SetStreamSource中指定的每個參數和SetStreamSourceFreq指定的分配器(divider)(如果有);

l         指向索引緩存的指針;

l         視口;

l         裁剪矩形;

l         世界變換矩陣,視變換矩陣和投影矩陣;

l         紋理變換;

l         裁剪面(如果有);

l         當前材質;

 

要用狀態(tài)塊獲取所有的狀態(tài)對象,需在調用CreateStateBlock時使用D3DSBT_ALL作為第一個參數。

 

使用狀態(tài)塊保存頂點狀態(tài)

    狀態(tài)塊可以用于僅獲取頂點狀態(tài)。下面的狀態(tài)為頂點狀態(tài):

l         頂點渲染狀態(tài);

l         頂點采樣器器狀態(tài);

l         頂點紋理狀態(tài);

l         SetNPatchModeN面片(NPatch)模式片段;

l         SetLight中每一個光源,包括LightEnable指定的光源是否開啟的狀態(tài);

l         當前頂點著色器和每一個頂點著色器常量;

l         對于每個頂點流:保存SetStreamSourceFreq中指定的分配器(divider;

l         當前頂點聲明(FVF)

 

使用狀態(tài)塊獲取頂點狀態(tài),需在調用CreateStateBlock時為第一個參數指定D3DSBT_VERTEXSTATE

頂點管道:渲染狀態(tài)

    設備渲染狀態(tài)幾乎影響管道的每一個部分的行為。渲染狀態(tài)通過調用SetRenderState來設置。下面的表格包含設置頂點狀態(tài)的所有渲染狀態(tài):

Render States

Default Value

D3DRS_CULLMODE(剔除模式)

D3DCULL_CCW(剔除逆時針順序的點平面)

D3DRS_FOGCOLOR(霧顏色)

0

D3DRS_FOGTABLEMODE

D3DFOG_NONE

D3DRS_FOGSTART

0

D3DRS_FOGEND

1

D3DRS_FOGDENSITY(霧密度)

1

D3DRS_RANGEFOGENABLE

FALSE

D3DRS_AMBIENT(環(huán)境()色)

0

D3DRS_COLORVERTEX

TRUE

D3DRS_FOGVERTEXMODE

D3DFOG_NONE

D3DRS_CLIPPING(裁剪)

TRUE

D3DRS_LIGHTING(光照)

TRUE

D3DRS_LOCALVIEWER

TRUE

D3DRS_EMISSIVEMATERIALSOURCE

D3DMCS_MATERIAL

D3DRS_AMBIENTMATERIALSOURCE

D3DMCS_MATERIAL

D3DRS_DIFFUSEMATERIALSOURCE

D3DMCS_COLOR1

D3DRS_SPECULARMATERIALSOURCE

D3DMCS_COLOR2

D3DRS_VERTEXBLEND

D3DVBF_DISABLE

D3DRS_CLIPPLANEENABLE

0

D3DRS_POINTSIZE

Driver dependent

D3DRS_POINTSIZE_MIN

1

D3DRS_POINTSPRITEENABLE

FALSE

D3DRS_POINTSCALEENABLE

FALSE

D3DRS_POINTSCALE_A

1

D3DRS_POINTSCALE_B

0

D3DRS_POINTSCALE_C

0

D3DRS_MULTISAMPLEANTIALIAS

TRUE

D3DRS_MULTISAMPLEMASK

0xffffffff

D3DRS_PATCHEDGESTYLE

D3DPATCHEDGE_DISCRETE

D3DRS_POINTSIZE_MAX

1

D3DRS_INDEXEDVERTEXBLENDENABLE

FALSE

D3DRS_TWEENFACTOR

0

D3DRS_POSITIONDEGREE

D3DDEGREE_CUBIC

D3DRS_NORMALDEGREE

D3DDEGREE_LINEAR

D3DRS_MINTESSELLATIONLEVEL

1

D3DRS_MAXTESSELLATIONLEVEL

1

D3DRS_ADAPTIVETESS_X

0

D3DRS_ADAPTIVETESS_Y

0

D3DRS_ADAPTIVETESS_Z

1

D3DRS_ADAPTIVETESS_W

0

D3DRS_ENABLEADAPTIVETESSELLATION"/>

FALSE

采樣器狀態(tài)控制采樣相關的主題,如濾波,貼瓷和紋理坐標尋址模式。使用SetSamplerState設置采樣器狀態(tài)(包括在鑲嵌器(tessellator)單元中用于采樣位移映射(displacement maps的采樣器狀態(tài)).采樣器狀態(tài)以”D3DSAMP_”為前綴重命名會導致從DirectX 8中移植的程序在編譯時報錯。

    下面的表格包含設置頂點狀態(tài)的所有采樣器狀態(tài):

Sampler States

Default Value

D3DSAMP_DMAPOFFSET

256

頂點管道:紋理狀態(tài)

    紋理狀態(tài)控制多紋理混合器的紋理混合操作。使用SetTextureStageState來設置紋理狀態(tài)。使用SetTexture將一個紋理對象與采樣器層關聯。

    下面的表格包含設置頂點狀態(tài)的所有紋理狀態(tài):

Texture States

Default Value

D3DTSS_TEXCOORDINDEX

0

D3DTSS_TEXTURETRANSFORMFLAGS

D3DTTFF_DISABLE

    D3DTSS_TEXCOORDINDEX是一個固定功能的定點處理狀態(tài)。如果使用可編程的頂點著色器,該狀態(tài)會被忽略。

 

使用狀態(tài)塊保存像素狀態(tài)

    狀態(tài)塊可以僅用于獲取像素狀態(tài)。下面的狀態(tài)為像素狀態(tài):

l         像素渲染狀態(tài)

l         像素紋理狀態(tài)

l         像素采樣器狀態(tài)

l         當前像素著色器和每個像素著色器常量

使用狀態(tài)塊獲取像素狀態(tài),需在調用CreateStateBlock時為第一個參數指定D3DSBT_PIXELSTATE

像素管道:渲染狀態(tài)

    設備渲染狀態(tài)幾乎影響管道每一個部分的行為。調用SetRenderState設置渲染狀態(tài)。

    下面的表格包含設置像素狀態(tài)的所有渲染狀態(tài):

Render States

Default Value

D3DRS_ZENABLE

D3DZB_FALSE

D3DRS_SPECULARENABLE

FALSE

D3DFILLMODE

D3DFILL_SOLID

D3DSHADEMODE

D3DSHADE_GOURAUD

D3DRS_ZWRITEENABLE

TRUE

D3DRS_ALPHATESTENABLE

FALSE

D3DRS_LASTPIXEL

TRUE

D3DRS_SRCBLEND

D3DBLEND_ONE

D3DRS_DESTBLEND

D3DBLEND_ZERO

D3DRS_ZFUNC

D3DCMP_LESSEQUAL

D3DRS_ALPHAREF

0

D3DRS_ALPHAFUNC

D3DCMP_ALWAYS

D3DRS_DITHERENABLE

FALSE

D3DRS_FOGSTART

0

D3DRS_FOGEND

1

D3DRS_FOGDENSITY

1

D3DRS_ALPHABLENDENABLE

FALSE

D3DRS_DEPTHBIAS

0

D3DRS_STENCILENABLE

FALSE

D3DRS_STENCILFAIL

D3DSTENCILOP_KEEP

D3DRS_STENCILZFAIL

D3DSTENCILOP_KEEP

D3DRS_STENCILPASS

D3DSTENCILOP_KEEP

D3DRS_STENCILFUNC

D3DCMP_ALWAYS

D3DRS_STENCILREF

0

D3DRS_STENCILMASK

0xffffffff

D3DRS_STENCILWRITEMASK

0xffffffff

D3DRS_TEXTUREFACTOR

0xffffffff

D3DRS_WRAP0

0

D3DRS_WRAP1

0

D3DRS_WRAP2

0

D3DRS_WRAP3

0

D3DRS_WRAP4

0

D3DRS_WRAP5

0

D3DRS_WRAP6

0

D3DRS_WRAP7

0

D3DRS_WRAP8

0

D3DRS_WRAP9

0

D3DRS_WRAP10

0

D3DRS_WRAP11

0

D3DRS_WRAP12

0

D3DRS_WRAP13

0

D3DRS_WRAP14

0

D3DRS_WRAP15

0

D3DRS_LOCALVIEWER

TRUE

D3DRS_EMISSIVEMATERIALSOURCE

D3DMCS_MATERIAL

D3DRS_AMBIENTMATERIALSOURCE

D3DMCS_MATERIAL

D3DRS_DIFFUSEMATERIALSOURCE

D3DMCS_COLOR1

D3DRS_SPECULARMATERIALSOURCE

D3DMCS_COLOR2

D3DRS_COLORWRITEENABLE

0x0000000f

D3DBLENDOP

D3DBLENDOP_ADD

D3DRS_SCISSORTESTENABLE

FALSE

D3DRS_SLOPESCALEDEPTHBIAS

0

D3DRS_ANTIALIASEDLINEENABLE

FALSE

D3DRS_Two_Sided_StencilMODE

FALSE

D3DRS_CCW_STENCILFAIL

D3DSTENCILOP_KEEP

D3DRS_CCW_STENCILZFAIL

D3DSTENCILOP_KEEP

D3DRS_CCW_STENCILPASS

D3DSTENCILOP_KEEP

D3DRS_CCW_STENCILFUNC

D3DCMP_ALWAYS

D3DRS_COLORWRITEENABLE1

0x0000000f

D3DRS_COLORWRITEENABLE2

0x0000000f

D3DRS_COLORWRITEENABLE3

0x0000000f

D3DRS_BLENDFACTOR

0xffffffff

D3DRS_SRGBWRITEENABLE

0

D3DRS_SEPARATEALPHABLENDENABLE

FALSE

D3DRS_SRCBLENDALPHA

D3DBLEND_ONE

D3DRS_DESTBLENDALPHA

D3DBLEND_ZERO

D3DRS_BLENDOPALPHA

D3DBLENDOP_ADD

像素管道:采樣器狀態(tài)

采樣器狀態(tài)控制采樣相關的主題,如濾波,貼瓷和紋理坐標尋址模式。使用SetSamplerState設置采樣器狀態(tài)(包括在鑲嵌器(tessellator)單元中用于采樣位移映射(displacement maps的采樣器狀態(tài)).采樣器狀態(tài)以”D3DSAMP_”為前綴重命名會導致從DirectX 8中移植的程序在編譯時報錯。

    下面的表格包含設置像素狀態(tài)的所有采樣器狀態(tài):

Sampler States

Default Value

D3DSAMP_ADDRESSU

D3DTADDRESS_WRAP

D3DSAMP_ADDRESSV

D3DTADDRESS_WRAP

D3DSAMP_ADDRESSW

D3DTADDRESS_WRAP

D3DSAMP_BORDERCOLOR

0x00000000

D3DSAMP_MAGFILTER

D3DTEXF_POINT

D3DSAMP_MINFILTER

D3DTEXF_POINT

D3DSAMP_MIPFILTER

D3DTEXF_NONE

D3DSAMP_MIPMAPLODBIAS

0

D3DSAMP_MAXMIPLEVEL

0

D3DSAMP_MAXANISOTROPY

1

D3DSAMP_SRGBTEXTURE

0

D3DSAMP_ELEMENTINDEX

0

像素管道:紋理狀態(tài)

紋理狀態(tài)控制多紋理混合器的紋理混合操作。使用SetTextureStageState來設置紋理狀態(tài)。使用SetTexture將一個紋理對象與采樣器層關聯。

    下面的表格包含設置像素狀態(tài)的所有紋理狀態(tài):

Texture States

Default Value

D3DTSS_COLOROP

D3DTOP_DISABLE

D3DTSS_COLORARG1

D3DTA_TEXTURE

D3DTSS_COLORARG2

D3DTA_CURRENT

D3DTSS_ALPHAOP

D3DTOP_DISABLE

D3DTSS_ALPHAARG1

D3DTA_TEXTURE

D3DTSS_ALPHAARG2

D3DTA_CURRENT

D3DTSS_BUMPENVMAT00

0

D3DTSS_BUMPENVMAT01

0

D3DTSS_BUMPENVMAT10

0

D3DTSS_BUMPENVMAT11

0

D3DTSS_TEXCOORDINDEX

0

D3DTSS_BUMPENVLSCALE

0

D3DTSS_BUMPENVLOFFSET

0

D3DTSS_TEXTURETRANSFORMFLAGS

D3DTTFF_DISABLE

D3DTSS_COLORARG0

D3DTA_CURRENT

D3DTSS_ALPHAARG0

D3DTA_CURRENT

D3DTSS_RESULTARG

D3DTA_CURRENT

 

 

 

渲染狀態(tài)

設備渲染狀態(tài)幾乎影響管道每一個部分的行為。調用SetRenderState設置渲染狀態(tài)。下面的主題包含了附加的信息。

  • Alpha混合狀態(tài)(Alpha Blending State)
  • Alpha測試狀態(tài)(Alpha Testing State)
  • 環(huán)境光照狀態(tài)(Ambient Lighting State)
  • 反走樣狀態(tài)(Antialiasing State)
  • 剔除狀態(tài)(Culling State)
  • 深度緩存狀態(tài)(Depth Buffering State)
  • 霧狀態(tài)(Fog State)
  • 光照狀態(tài)(Lighting State)
  • 輪廓和填充狀態(tài)(Outline and Fill State)
  • 單點顏色狀態(tài)(Per-Vertex Color State)
  • 圖元裁剪狀態(tài)(Primitive Clipping State)
  • 著色狀態(tài)(Shading State)
  • 模板緩存狀態(tài)(Stencil Buffer State)
  • 紋理包裝狀態(tài)(Texture Wrapping State)

 

Alpha混合狀態(tài)(Alpha Blending State)

色彩的Alpha值控制其透明度。開啟Alpha混合允許平面上的顏色,材質和紋理以透明度混合到其他平面上。

更多信息參考Alpha紋理混合(Alpha Texture Blending)紋理混合(Texture Blending)

C++編寫的應用程序使用D3DRS_ALPHABLENDENABLE渲染狀態(tài)開啟Alpha透明度混合。Direct3D API允許多種Alpha混合類型。然而,需要注意用戶的3D硬件并不一定支持所有Direct3D允許的混合狀態(tài)。

Alpha混合類型的設定依賴于D3DRS_SRCBLENDD3DRS_DESTBLEND渲染狀態(tài)。需要成對使用源混合狀態(tài)和目標混合狀態(tài)。下面的代碼舉例說明如何將源混合狀態(tài)設置為D3DBLEND_SRCCOLOR,將目標混合狀態(tài)設置為D3DBLEND_INVSRCCOLOR

 

//此代碼假設d3dDevice為合法的IDirect3DDevice9接口指針

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

d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);

//設置目標混合狀態(tài)

d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);

   

    改變源混合狀態(tài)和目標混合狀態(tài)會改變在布滿霧或灰層的大氣中的放射性物體的外觀。例如,如果你的應用程序模擬在霧環(huán)境中的火焰,力場,等離子束或相似的放射性物質,將源混合狀態(tài)和目標混合狀態(tài)設置為D3DBLEND_ONE

    其他的Alpha混合應用程序用該狀態(tài)來控制3D場景的光照,也稱之為光照映射(light mapping)。根據源的Alpha信息,將源混合狀態(tài)設置為D3DBLEND_ZERO并將目標混合狀態(tài)設置為D3DBLEND_SRCALPHA使場景變暗。源圖元在合適的時機被作為使幀緩存內容變暗比例的光照映射(The source primitive is used as a light map that scales the contents of the frame buffer to darken it when appropriate).這生成單色光照映射(This produces monochrome light mapping).

    你可以通過將源Alpha混合狀態(tài)設置為D3DBLEND_ZERO,把目標混合狀態(tài)設置為D3DBLEND_SRCCOLOR來完成彩色光照映射。

   

Alpha測試狀態(tài)(Alpha Testing State)

C++應用程序可使用Alpha測試來控制像素何時被吸入渲染目標平面。通過使用D3DRS_ALPHATESTENABLE渲染狀態(tài),應用程序設置當前Direct3D設備依照Alpha測試函數測試每一個像素。如果測試成功,像素被寫在該平面。如果失敗,Direct3D忽略該像素。使用D3DRS_ALPHAFUNC渲染狀態(tài)選擇Alpha測試函數。應用程序可以通過使用D3DRS_ALPHAREF渲染狀態(tài)為所有的像素設置Alpha參考值用于比較。

Alpha測試最一般的用途是當柵格華對象幾乎透明時用于改進性能。如果被柵格化的顏色數據比給定像素的顏色值更不透明(D3DCMPCAPS_GREATEREQUAL),則像素被寫入。否則,光柵完全忽略該像素,節(jié)省了對兩個顏色的混合請求的處理。下面的代碼舉例說明檢測是否所給定的比較被支持,如果被支持,設置比較函數必要的參數在渲染時改進性能。

//該例子假設pCapsD3DCAPS9結構在之前調用IDirect3D9::GetDeviceCaps
//
時被填充
if(pCaps.AlphaCmpCaps & D3DPCMPCAPS_GREATEREQUAL)
{
    dev->SetRenderState(D3DRS_ALPHAREF, (DWORD)0x00000001);
    dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
    dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
}
//
若該比較不支持,繼續(xù)渲染。
//
唯一的缺點是沒有性能的提升。

    并不時所有的硬件支持所有的Alpha測試特性。你可以通過調用GetDeviceCaps方法檢測設備能力。在重新獲取設備能力后,檢測相關的D3DCAPS9結構的AlphaCmpCaps成員是否支持需要的比較函數。如果AlphaCmpCaps成員包含僅僅D3DPCMPCAPS_ALWAYS能力或D3DPCMPCAPS_NEVER能力,那驅動程序不支持Alpha測試。

環(huán)境光照狀態(tài)(Ambient Lighting State)

環(huán)境光是環(huán)境從所有方向輻射的光線。要了解Direct3D如何使用環(huán)境光照,參考光照數學(Mathematics of Lighting)

C++應用程序通過在調用SetRenderState方法時給第一個參數傳遞枚舉值D3DRS_AMBIENT設置環(huán)境光顏色。第二個參數為顏色值。默認值為0

d3dDevice->SetRenderState(D3DRS_AMBIENT, 0x00202020);

反走樣(抗鋸齒)狀態(tài)(Antialiasing State)

反走樣是使線或邊緣在屏幕上外觀更光滑的方法。默認情況下,Direct3D不執(zhí)行反走樣。要開啟全屏反走樣,設置D3DRS_MULTISAMPLEANTIALIAS渲染狀態(tài)為TRUE。要關閉反走樣則設置該渲染狀態(tài)值為FALSE

剔除狀態(tài)(Culling State)

要改進渲染性能,你可以挑選(或刪除)背離攝像機的圖元面。對于單面圖元,由于背面不可見,此方法節(jié)省了渲染時間。要開啟剔出,你需要知道定點的環(huán)繞順序(一般為逆時針)。此例子講刪除任何背面向前的圖元(給定逆時針環(huán)繞順序):

SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);

深度緩存狀態(tài)(Depth Buffering State)

深度緩存是刪除隱藏線或隱藏面的方法。默認情況下,Direct3D不使用深度緩存。

C++應用程序使用D3DRS_ZENABLE渲染狀態(tài)更新深度緩存狀態(tài),使用D3DZBUFFERTYPE枚舉成員以制定新的狀態(tài)值。

如果你的應用程序需要阻止Direct3D寫入深度緩存,可在調用SetRenderState時使用D3DRS_ZWRITEENABLE枚舉值,并給第二個參數指定值D3DZB_FALSE

下面的代碼說明如何將深度緩存狀態(tài)設置為開啟Z緩存。

d3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

應用程序也可以使用D3DRS_ZFUNC渲染狀態(tài)來控制Direct3D在執(zhí)行深度緩存時的比較函數。

Z偏移是將一個平面在另一平面前顯示的方法,即時他們的深度值相同。你可以使用該技術實現變化的效果。一般的例子是渲染墻的陰影。墻和陰影具有相同的深度值。然而,你希望你的應用程序在墻上顯示陰影。給陰影加上一個Z偏移使Direct3D合適的顯示他們(參見D3DRS_DEPTHBIAS)。

霧狀態(tài)(Fog State)

舞化效果使得3D場景更加真實。你可以使用霧化效果更好的模擬霧(You can use fog effects for more than simulating fog)。他們同樣可以根據距離減小場景的清晰度。這反映了現實世界中發(fā)生的情況;隨著物體遠離用戶,他們的細節(jié)變得更模糊。

C++應用程序通過設備渲染狀態(tài)控制霧化。D3DRENDERSTATETYPE枚舉類型包含的狀態(tài)控制像素(表)或頂點霧是否使用,它們的顏色,系統(tǒng)使用的霧化計算公式和公式的參數。

你通過將D3DRS_FOGENABLE渲染狀態(tài)設置為TRUE開啟霧化效果。可以使用D3DRS_FOGCOLOR渲染狀態(tài)將霧顏色設置為任意值;霧顏色的Alpha值被忽略。

D3DRS_FOGTABLEMODED3DRS_FOGVERTEXMODE渲染狀態(tài)控制應用于霧計算的公式,它們間接地控制所使用的霧化類型。兩個渲染狀態(tài)可設置D3DFOGMODE枚舉類型中的成員。分別設置為這兩個渲染狀態(tài)設置D3DFOG_NONE值關閉像素和頂點霧效果。如果兩個渲染狀態(tài)都被設置為有效的模式,系統(tǒng)僅應用像素渲染效果

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

光照狀態(tài)(Lighting State)

如果你不使用頂點著色器或像素著色器進行光照,你可以在運行時選擇光照引擎。光照引擎要求頂點數據中包含每個頂點的法線;沒有法線數據的頂點在光照計算時會發(fā)生點積為0的情況。光照計算在光照數學(Mathematics of lighting)中有更詳細的介紹。

要開啟光照引擎,使用:

SetRenderState(D3DRS_LIGHTING, TRUE);

輪廓和填充狀態(tài)(Outline and Fill State)

沒有紋理的圖元使用由材質或頂點顏色指定的顏色進行渲染。你可以通過D3DFILLMODE中定義的枚舉值為D3DRSFILLMODE渲染狀態(tài)選擇一個填充方法。

要開啟抖動(dithering),應用程序需給SetRenderState的第一個參數傳遞D3DRS_DITHERENABLE枚舉值。并設置第二個參數為TRUE以打開抖動,設為FALSE關閉抖動。

有時,在繪制直線的最后一個像素時會與周圍的圖元造成難看的重疊。你可以使用D3DRS_LASTPIXEL枚舉值控制此情況的發(fā)生。然而,在裝換該設置時需要仔細考慮。在某些情況下,禁止渲染最后一個像素會造成圖元之間難看的裂縫。

對象輪廓可以通過設置合適的線繪模式來繪制。默認的畫線狀態(tài)為繪制實線。參考D3DX中的繪線支持(Line Drawing Support in D3DX )渲染狀態(tài)獲取更多信息。

逐點顏色狀態(tài)(Per-Vertex Color State)

在執(zhí)行光照時如果你告知運行時顯示頂點顏色數據,Direct3D光照引擎會使用逐頂點顏色數據。通過開啟下面的渲染狀態(tài):

//關閉逐點顏色渲染
SetRenderState(D3DRS_COLORVERTEX, FALSE);
//
關閉逐點顏色渲染
SetRenderState(D3DRS_COLORVERTEX, TRUE);

    如果逐點顏色被開啟,應用程序可以配置系統(tǒng)獲取頂點顏色信息的源。D3DRS_AMBIENTMATERIALSOURCE, D3DRS_DIFFUSEMATERIALSOURCE, D3DRS_EMISSIVEMATERIALSOURCED3DRS_SPECULARMATERIALSOURCE渲染狀態(tài)分別控制環(huán)境光,漫反射光,發(fā)射光和鏡面光顏色組成源。每一個狀態(tài)可以被設置為定義指示系統(tǒng)為指定的顏色成份使用當前材質,漫反射色或鏡面光顏色作為源的D3DMATERIALCOLORSOURCE枚舉類型的成員。

圖元裁剪狀態(tài)(Primitive Clipping State)

部分位于(或完全在外)視錐臺的圖元會被裁減,僅渲染圖元的可視部分。裁減使得僅渲染可見的圖元或圖元的可見部分,從而減少了大量工作。

要使用管道進行裁減,設置D3DRS_CLIPPING渲染狀態(tài)為TRUE(默認值)來開啟裁減或設置為FALSE關閉Direct3D裁減。

著色狀態(tài)(Shading State)

Direct3D支持平面著色和高絡德著色。默認為高絡德著色。遙控制當前著色模式,C++應用程序需為D3DRS_SHADEMODE渲染狀態(tài)指定一個D3DSHADEMODE枚舉類型的成員。

下面的代碼說明如何設置著色狀態(tài)為平面著色模式:
d3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);

模板緩存狀態(tài)(Stencil Buffer State)

應用程序使用模板緩存來決定像素是否被寫入目標平面。細節(jié)參看模板緩存技術(Stencil Buffer Techniques)

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

D3DRS_WRAP0D3DRS_WRAP7渲染狀態(tài)為設備的多紋理層中多個紋理開啟和關閉u環(huán)繞和v環(huán)繞(紋理u,v坐標)。你可以設置這些渲染狀態(tài)為D3DWRAPCOORD_0D3DWRAPCOORD_1, D3DWRAPCOORD_2D3DWRAPCOORD_3標識的或值來開啟紋理第一個,第二個,第三個和第四個方向的環(huán)繞。使用0關閉所有的環(huán)繞。默認情況下禁用所有紋理層所有方向的紋理環(huán)繞。

posted on 2011-06-05 15:32 風輕云淡 閱讀(1310) 評論(0)  編輯 收藏 引用 所屬分類: DX
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产曰批免费观看久久久| 亚洲一区二区日本| 日韩亚洲欧美在线观看| 欧美日韩高清在线| 亚洲视频电影在线| 久久成人人人人精品欧| 精品电影在线观看| 欧美国产日韩一区二区| 在线视频欧美日韩| 久久一区二区三区超碰国产精品| 亚洲大片免费看| 欧美久久一级| 亚洲欧美激情视频| 免费欧美电影| 亚洲婷婷在线| 黑丝一区二区| 欧美久久久久久蜜桃| 午夜电影亚洲| 欧美第一黄网免费网站| 亚洲一级黄色片| 国内激情久久| 欧美极品影院| 亚洲欧美日韩国产综合精品二区| 老**午夜毛片一区二区三区| 日韩视频永久免费| 国产欧美一区二区精品仙草咪 | 一区二区三区四区蜜桃| 久久久久国产免费免费| 亚洲精品自在在线观看| 国产欧美日韩精品一区| 欧美高清在线视频| 欧美一区二区三区免费视频| 亚洲日本中文| 久久露脸国产精品| 中国女人久久久| 亚洲高清电影| 国产视频久久| 国产精品xvideos88| 久久伊人一区二区| 亚洲欧美日韩精品久久| 亚洲毛片一区| 欧美激情1区| 久久久精品一区二区三区| 亚洲视频电影在线| 亚洲人午夜精品免费| 国产亚洲免费的视频看| 国产精品地址| 欧美日韩国产综合视频在线观看中文 | 久久精品国产亚洲aⅴ| 亚洲视频专区在线| 亚洲精品免费看| 欧美bbbxxxxx| 久久久久国产精品一区三寸 | 久久国产精品久久久久久电车| 一区二区精品国产| 日韩视频在线观看免费| 亚洲国产精品久久91精品| 国产一区二区0| 国产精品揄拍500视频| 欧美系列精品| 欧美天堂亚洲电影院在线播放| 欧美激情第1页| 欧美sm视频| 欧美高清在线一区二区| 欧美成ee人免费视频| 免费永久网站黄欧美| 久久字幕精品一区| 免费精品99久久国产综合精品| 久久久国产精品一区| 久久精品夜夜夜夜久久| 久久九九久久九九| 久久精品91| 久久亚洲精品一区| 欧美成人精品激情在线观看| 欧美成人免费va影院高清| 欧美国产日韩在线| 欧美日本一道本| 欧美日韩一区在线观看| 欧美性猛交xxxx免费看久久久| 欧美午夜美女看片| 国产精品日韩在线播放| 国产日韩成人精品| 伊人精品成人久久综合软件| 亚洲国产精品久久精品怡红院| 亚洲欧洲精品一区二区| 亚洲作爱视频| 香蕉尹人综合在线观看| 欧美中文在线字幕| 久久躁日日躁aaaaxxxx| 亚洲电影自拍| 在线一区观看| 欧美专区福利在线| 免费不卡中文字幕视频| 欧美久久99| 国产精品一级在线| 狠狠色丁香婷综合久久| 亚洲日本在线视频观看| 在线亚洲一区观看| 久久精品夜色噜噜亚洲aⅴ| 另类尿喷潮videofree| 亚洲国产精品一区制服丝袜 | 午夜视频在线观看一区| 久久在线精品| 国产精品二区影院| 韩日成人在线| 一本色道久久综合| 久久精品电影| 亚洲人成在线观看一区二区| 亚洲午夜精品一区二区| 久久久久欧美| 欧美日韩在线视频一区二区| 国产在线日韩| 99re这里只有精品6| 久久国产精品一区二区三区| 亚洲二区视频| 午夜免费久久久久| 欧美国产成人精品| 国产亚洲综合性久久久影院| 99精品视频免费观看| 久久久最新网址| 夜夜嗨一区二区三区| 狂野欧美性猛交xxxx巴西| 国产精品久久久一本精品| 亚洲国产精品高清久久久| 性伦欧美刺激片在线观看| 亚洲国产日韩在线| 久久精品视频导航| 国产精品久久久对白| 亚洲日本理论电影| 久久欧美肥婆一二区| 一区二区三区免费在线观看| 免费日韩一区二区| 国产一区二区毛片| 亚洲欧美在线一区二区| 91久久在线观看| 久久躁狠狠躁夜夜爽| 国产日韩欧美a| 亚洲欧美一区二区精品久久久| 亚洲高清电影| 老司机午夜精品视频| 国语自产精品视频在线看| 亚洲欧美日韩在线综合| 亚洲精选在线观看| 欧美超级免费视 在线| 伊人久久亚洲影院| 久久精品视频亚洲| 亚洲欧美区自拍先锋| 国产精品免费电影| 一区二区三区四区五区精品| 91久久精品美女| 欧美96在线丨欧| 91久久久久久国产精品| 美女精品网站| 久久久久五月天| 在线成人www免费观看视频| 久久精品毛片| 久久国产精品一区二区三区四区| 国产乱码精品一区二区三区五月婷| 亚洲免费影视| 亚洲欧美电影院| 国产精品区一区二区三区| 亚洲免费一级电影| 亚洲午夜精品国产| 国产伦精品一区二区三区| 欧美一级久久久| 香蕉久久夜色精品国产使用方法 | 亚洲成色999久久网站| 久热国产精品视频| 久久久久久久999| 亚洲国产精品传媒在线观看| 欧美成人日本| 欧美激情亚洲视频| 亚洲视频第一页| 亚洲免费一级电影| 韩国成人理伦片免费播放| 免费成人网www| 欧美国产日韩一区二区在线观看 | 一区二区三区精品| 中文亚洲字幕| 国产亚洲午夜| 亚洲成人在线网| 欧美日韩另类国产亚洲欧美一级| 亚洲免费视频成人| 午夜一区不卡| 亚洲激情视频网站| a4yy欧美一区二区三区| 国产女主播视频一区二区| 狼人天天伊人久久| 欧美国产日韩精品| 午夜激情久久久| 久久久精品性| 一区二区三区黄色| 香蕉成人伊视频在线观看| 亚洲国产精品视频| 一本久久a久久免费精品不卡| 国产日韩精品一区| 欧美激情亚洲激情| 欧美视频在线看| 久久久综合免费视频| 欧美乱妇高清无乱码|