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