Alpha-Blending 水印

        現在許多遊戲爲了達到光影或圖象的透明效果都會採用AlphaBlend 技術。所謂AlphaBlend技術,其實就是按照"Alpha"混合向量的值來混合源像素和目標像素,一般用來處理半透明效果。在計算機中的圖象可以用 R(紅色),G(綠色),B(藍色)三原色來表示。假設一幅圖象是A,另一幅透明的圖象是B,那麼透過B去看A,看上去的圖象C就是B和A的混合圖象,設 B圖象的透明度爲alpha(取值爲0-1,0爲完全透明,1爲完全不透明),Alpha混合公式如下:
  R(C)=alpha*R(B)+(1-alpha)*R(A)
  G(C)=alpha*G(B)+(1-alpha)*G(A)
  B(C)=alpha*B(B)+(1-alpha)*B(A)
  R(x)、G(x)、B(x)分別指顏色x的RGB分量原色值。從上面的公式可以知道,Alpha其實是一個決定混合透明度的數值。
 
 
        現在的遊戲,不管是 2D 還是 3D 的,爲了追求透明光影效果,通常都會使用到 Alpha-Blending 技術。下面,我們將談論什麼是 Alpha-Blending 技術並簡單介紹 Alpha-Blending 技術的具體算法。
  所謂 Alpha-Blending,其實就是按照“Alpha”混合向量的值來混合源像素和目標像素。爲了便於理解,我們就從兩個像素間的 Alpha-Blending 過程談起吧。
  第一步,先把源像素和目標像素的 RGB 三個顏色分量分離,然後把源像素的三個顏色分量分別乘上 Alpha 的值,並把目標像素的三個顏色分量分別乘上 Alpha 的反值,接下來把結果按對應顏色分量相加,再對最後求得的每個分量結果除以 Alpha 的最大值(通常這一步都是用移位來完成,這亦是 Alpha 的最大值爲何總是二的冪的原因),最後把三個顏色分量重新合成爲一個像素輸出。
  在這個過程中,爲了分離像素中的 RGB 三個顏色分量,我們一般會使用掩膜的方法。至於具體的三個掩膜值:RMask、GMask 和 BMask,可以從 DirectDraw 中的 DDPixelFormat 返回得到(當然,你也可以根據自己的需要做各種靈活處理)。
  在下面給出的說明性例程中,我們假設 RMask、GMask 和 BMask 已經存放的是 RGB 三個顏色分量的位掩膜值,Alpha 的最大值爲 256,而 source 和 dest 是指向源像素和目標像素的指針。
 
int ialpha = 256 - *alpha; // Alpha 的反值
*dest = (RMask & (((*source & RMask) * *alpha + (*dest & RMask) * ialpha) >>8)) | (GMask & (((*source & GMask) * *alpha + (*dest & GMask) * ialpha) >>8)) | (BMask & (((*source & BMask) * *alpha + (*dest & BMask) * ialpha) >>8));
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章