唐山公司網(wǎng)站建設(shè) 中企動(dòng)力沈陽關(guān)鍵詞seo排名
該技術(shù)能使我們將當(dāng)前要進(jìn)行光柵化的像素的顏色與先前已已光柵化并處于同一位置的像素的顏色進(jìn)行合成,即將正在處理的圖元顏色值與存儲(chǔ)在后臺(tái)緩存中的像素顏色值進(jìn)行合成(混合),利用該技術(shù)我們可得到各種各樣的效果,尤其是透明效果。
在融合運(yùn)算時(shí)需要遵循:首先繪制那些不需要進(jìn)行融合的物體,然后將需要進(jìn)行融合的物體按照相對(duì)于攝像機(jī)的深度值進(jìn)行排序,如果物體已處于觀察坐標(biāo)系中,該運(yùn)算的效率會(huì)相當(dāng)高,因?yàn)榇藭r(shí)只需要對(duì)Z分量進(jìn)行排序,最后按照自后往前的順序逐個(gè)繪制將要進(jìn)行融合運(yùn)算的物體。
融合處理公式
這個(gè)公式中每個(gè)變量都是一個(gè)4D顏色向量(r,g,b,a),中間符號(hào)表示分量逐個(gè)相乘
OutpurPixel:融合后的顏色值
SourcePixel:當(dāng)前計(jì)算得到的、用于與后臺(tái)緩存中對(duì)應(yīng)像素進(jìn)行融合的像素顏色值
SourceBlendFactor:源融合因子,指定了源像素的顏色值在融合中所占比例,該值在區(qū)間[0,1]
DestPixel:當(dāng)前處于后臺(tái)緩存中的像素顏色值
DestBlendFactor:目標(biāo)融合因子,指定了目標(biāo)像素的顏色值在融合中所占的比例,該值在區(qū)間[0,1]內(nèi)
源融合因子和目標(biāo)融合因子使我們可以各種方式修改源像素和目標(biāo)像素的顏色值,從而獲得各種不同的效果,Direct3D中默認(rèn)狀態(tài)下是禁止融合運(yùn)算的,可將繪制狀態(tài)D3DRS_ALPHABLENDENABLE設(shè)為true便啟用了融合運(yùn)算,融合計(jì)算的開銷并不低,所以應(yīng)該僅在必需的場(chǎng)合中使用,當(dāng)繪制完需要進(jìn)行融合的幾何體之后,應(yīng)禁止Alpha融合,在對(duì)三角形單元組進(jìn)行融合時(shí),最好進(jìn)行批處理,之后應(yīng)立即繪制出來,這樣就可避免在每幀圖像中都啟用了禁止融合運(yùn)算。
Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);//融合運(yùn)算 Draw...Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
融合因子
可通過設(shè)置繪制狀態(tài)D3DRS_SRCBLEND和D3DRS_DESTBLEND的值來對(duì)源融合因子和目標(biāo)融合因子分別進(jìn)行設(shè)定。
//Source、Destination 填D3DBLEND枚舉
Device->SetRenderState(D3DRS_SRCBLEND, Source);
Device->SetRenderState(D3DRS_DESTBLEND, Destination);
透明度
每個(gè)頂點(diǎn)顏色中的Alpha分量與顏色值類似,都是沿著三角形到單元表面漸變的,但它并非用于確定某像素的顏色值,而是用于確定像素的Alpha分量,Alpha分量主要用于指定像素的透明度,假定為每個(gè)像素的Alpha分量保留8位,則合法區(qū)間為[0,255],Alpha為0時(shí)元素完全透明,為255則完全不透明,為了能使Alpha分量來秒后蘇像素的透明度,必須將融合因子和目標(biāo)融合因子分辨設(shè)置為D3DBLEND_SRCALLPHA和D3DBLEND_INVSRCALPHA,這些值恰好也是融合因子的默認(rèn)值。
Alpha通道
我們并不直接使用計(jì)算得到Alpha分量,而往往是從紋理的Alpha通道中獲取Alpha信息,Alpha通道是保留給存儲(chǔ)了Alpha分量的紋理元的一個(gè)額外的位集合,當(dāng)紋理映射到某個(gè)圖元中時(shí),Alpha通道中的Alpha分量也進(jìn)行了映射,并成為了該圖元中像素的Alpha分量。
指定Alpha來源
默認(rèn)狀態(tài)下,如果當(dāng)前設(shè)置的紋理擁有一個(gè)Alpha通道,Alpha值就取自該Alpha通道,如果沒有Alpha通道,Alpha值就取自頂點(diǎn)的顏色,也可以用下列繪制狀態(tài)來指定Alpha值的來源(漫反射顏色值或Alpha通道)
//漫反射顏色值
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);//紋理的Alpha通道
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
用DirectX Texture Tool創(chuàng)建Alpha通道
最常見的圖像文件格式中不含有Alpha信息,可以用DirectX紋理工具創(chuàng)建一個(gè)具有Alpha通道的DDS文件,DDS文件是一種專門為DirectX應(yīng)用程序和紋理設(shè)計(jì)的圖像格式??墒褂肈3DXCreateTextureFromFile函數(shù)將DDS文件加載到紋理中。
使用該工具打開圖片后會(huì)自動(dòng)加載為24位的RGB紋理(紅、綠、藍(lán)分量各占8位),如果想擴(kuò)展為32位的ARGB格式的紋理,選擇菜單中Format然后選擇Change Surface Format命令,選擇A8R8G8B8格式并確定就創(chuàng)建了一幅像素顏色深度為32位的圖像,接下來的任務(wù)是將數(shù)據(jù)加載到Alpha通道中,選擇菜單File,然后選擇Open Onto Alpha Channel Of This Texture命令,找到要加載到該Alpha通道的數(shù)據(jù)的圖像文件后就完成在Alpha通道作用下的紋理圖了,保存后命名為xxx.dds