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

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

常用鏈接

留言簿(8)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜


    半透明在游戲中通常用來呈現(xiàn)若隱若現(xiàn)的特殊效果。事實上這種效果的運(yùn)用相當(dāng)頻繁,比如薄霧、鬼魂或隱形任務(wù)等,有時會以半透明的手法來表現(xiàn)。本篇隨筆就來介紹半透明效果的制作方法,下圖23是一張位圖經(jīng)過半透明處理后顯示在背景上的效果。

1、半透明的制作原理
   
     簡單地說,半透明效果就是前景圖案與背景圖案像素顏色的混合。從圖23中觀察半透明效果呈現(xiàn)的區(qū)域,可以看到背景圖案,也可看到前景的人物圖案。什么是前景圖案與背景圖案像素顏色的混合呢?這就要從位圖的基本結(jié)構(gòu)開始談起了。
    一張位圖是由許多的像素所組成的,每一個像素中都包含紅(R)、綠(G)、藍(lán)(B)三原色的色彩值,由這三種原色值來決定該像素的色彩。而要呈現(xiàn)半透明效果,必須將前景圖與背景圖彼此對應(yīng)像素的顏色依某一比例來進(jìn)行調(diào)配,這個比例就叫做“不透明度”。
    以沒有進(jìn)行半透明處理,單純地將一張前景圖貼到背景圖上的一塊區(qū)域來說,前景圖的不透明度是100%,而背景圖在這一塊區(qū)域上的不透明度則是0%(完全透明,所以看不見背景),也就是說在這塊區(qū)域上,背景圖的色彩完全派不上用場。
    可是如果想要有半透明的效果,讓前景圖看起來稍微透明一點(diǎn),那就需要確定不透明度的值。假設(shè)確定不透明度是70%,也就是說前景圖像素顏色按照一定的不透明度比例進(jìn)行合成,那么最后整個區(qū)域所呈現(xiàn)出來的就是所要的半透明效果了。綜合上面的說明,可以整理出一個建檔的公式如下:
    半透明圖色彩 = 前景圖色彩 × 不透明度 + 背景圖色彩 ×(1 - 不透明度)

2、半透明的操作步驟
   
    清楚了半透明制作的原理后,接下來說明程序產(chǎn)生半透明效果的實際步驟。
    步驟一:取得位圖結(jié)構(gòu)
    位圖結(jié)構(gòu)包含了一些位圖的基本信息,由于我們在制作半透明效果時會用到,因此在從文件加載位圖后,必須先取得該位圖的結(jié)構(gòu),而取的位圖結(jié)構(gòu)的函數(shù)如下:
int GetObject(   HGDIOBJ GDI對象,  //取得GDI對象結(jié)構(gòu)
                           
int 結(jié)構(gòu)大小,
                            LPVOID 結(jié)構(gòu)變量,);
    上面這個函數(shù)用于取得GDI對象的信息,包含這里所談的位圖,其中第3個參數(shù)是一個結(jié)構(gòu)變量,如果是用于取得位圖的信息,則輸入一個位圖結(jié)構(gòu)的地址,而Windows API所定義的位圖結(jié)構(gòu)(BITMAP)如下:
typedef struct tagBITMAP{
                                                                LONG bmType;  
// 位圖類型,必須設(shè)為0
                                                                
LONG bmWidth;  // 位圖寬度
                                                               
LONG bmHeight; //位圖長度
                                                                
LONG bmWidthBytes;  //每一列像素所占Byte數(shù)
                                                               
WORD bmPlanes;  //顏色平面數(shù)
                                                               
WORD bmBitsPixel; //像素的位數(shù)
                                                                
LPVOID bmBits;  //位圖內(nèi)存指針
                                                            
}
BITMAP;
    后面將會用到bmWidth、bmHeight、bmWidthBytes及bmBitsPixel這幾個結(jié)構(gòu)成員的信息。
    在此舉個例子來說明取得位圖結(jié)構(gòu)的方法,假設(shè)現(xiàn)在有一個位圖名稱為“bitmap”,位圖結(jié)構(gòu)變量名稱為“bm”,則使用GetObject()函數(shù)取得BITMAP結(jié)構(gòu)的程序代碼如下:
GetObject(bitmap,sizeof(BITMAP),&bm);
    這樣,位圖結(jié)構(gòu)bm中的各個結(jié)構(gòu)成員便包含了位圖bitmap的基本信息。
    步驟二:建立暫存數(shù)組
    取得位圖的結(jié)構(gòu),接下來必須先建立一個暫存數(shù)組準(zhǔn)備存儲位圖中所有像素的顏色值。這個暫存數(shù)組的大小是由前一個步驟中所取得位圖的bmHeight與bmWidthBytes信息來決定的,因此,必須利用指針來動態(tài)建立。延續(xù)前一個例子,若要建立一個可存儲bitmap所有像素顏色值的暫存數(shù)組,程序代碼如下:
unsigned char *px = new unsigned char [bm.bmHeight * bm.bmWidthBytes];
    這里,因為unsigned char變量類型大小是1Byte,所以這個數(shù)組的每個元素大小也就是1Byte(8bits)。以一張24bits色彩的位圖來說,它的每個像素是以24bits來表示顏色的,其中B(藍(lán))、G(綠)、R(紅)三原色各占8個bits。
    因此,在下面的步驟中,當(dāng)取出位圖的所有顏色并存儲在這個數(shù)組中時,每一個像素會占用3個數(shù)組元素來存儲B、G、R的顏色值。
    步驟三:取得位圖位置
    建立了暫存數(shù)組之后,要取出位圖的所有顏色值存儲到數(shù)組中就簡單多了,有一個現(xiàn)成的API函數(shù)可以使用。
LONG GetBitmapBits(  HBITMAP 位圖,  // 取得位圖位值
                                        
LONG 要取得的Byte數(shù),
                                         LPVOID 存儲的數(shù)組指針);
    使用此函數(shù)取得位圖位值的程序代碼如下。
GetBitmapBits(bitmap, bm.bmHeight * bm.bmWidthBytes, px);
    下面以圖來說明像素顏色值存儲在數(shù)組中的對應(yīng)關(guān)系,如下圖所示:

    步驟四:合成像素顏色值
    取得了位圖的所有像素顏色值之后,接下來的工作就是按照不透明度來設(shè)定半透明區(qū)域內(nèi)每個像素的顏色了。
    此時應(yīng)該會有兩個像素顏色數(shù)組,一個是前景圖的,一個則是背景圖的。根據(jù)實際要顯示半透明區(qū)域的坐標(biāo),將這兩個數(shù)組算出對應(yīng)的元素進(jìn)行簽名講過的顏色合成運(yùn)算,再存回暫存數(shù)組中,anemia數(shù)組中所存儲的便是已經(jīng)完成半透明的顏色值了。這個步驟的實際處理過程,將在代碼中做詳細(xì)說明。
    步驟五:重設(shè)位圖顏色
    處理完暫存數(shù)組中半透明的顏色值之后,最后一個操作就是根據(jù)數(shù)組的內(nèi)容來重設(shè)位圖的顏色。這個操作同樣可以使用一個API的函數(shù)來完成。
LONG SetBitmapBits(     HBITMAP 位圖, //設(shè)定位圖位值
                                           
DWORD 顏色數(shù)組大小, 
                                           CONST VOID 數(shù)組指針 );
//為什么是CONST VOID?

    以上5個步驟都完成之后,所要的半透明圖也就完成了,剩下的就只有貼圖操作了。


范例ch2_7:取得前景圖與背景圖的顏色值,以前景圖的不透明度30%和背景圖的不透明度70%進(jìn)行半透明處理,制作半透明效果。
下載地址:ch2_7(上傳到windows live空間,可能需要MSN賬號登陸)
說明:程序源代碼中有相關(guān)的注釋。
程序運(yùn)行結(jié)果如下圖:



PS:如想獲得更多關(guān)于Visual C++游戲開發(fā)的內(nèi)容,可點(diǎn)擊隨筆:《Visual C++游戲編程基礎(chǔ)》學(xué)習(xí)筆記——索引隨筆
posted on 2010-04-08 19:12 煙皚 閱讀(1387) 評論(0)  編輯 收藏 引用 所屬分類: 《Visual C++游戲編程基礎(chǔ)》學(xué)習(xí)筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美一区二区三区久久人妖| 亚洲国产美女| 在线播放亚洲一区| 在线观看成人小视频| 亚洲电影毛片| 亚洲毛片在线观看| 日韩视频在线永久播放| 欧美激情欧美狂野欧美精品| 欧美日韩国产色站一区二区三区| 欧美视频在线不卡| 韩国成人福利片在线播放| 亚洲成色999久久网站| 亚洲看片一区| 久久大逼视频| 亚洲国产综合在线| 午夜精品美女自拍福到在线 | 日韩一二三区视频| 亚洲精品国产精品国自产观看| 亚洲激情av| 亚洲欧洲精品一区| 亚洲一区二区三区国产| 欧美在线观看视频一区二区三区| 欧美成年视频| 亚洲一区二区动漫| 久久亚洲一区二区| 国产精品久久午夜| 日韩视频在线一区| 亚洲国产美女久久久久| 香蕉久久a毛片| 欧美高清在线精品一区| 一区二区三区欧美成人| 欧美大片免费观看| 在线播放中文一区| 欧美一区日韩一区| 亚洲人体1000| 久久久精品一区二区三区| 欧美少妇一区| 亚洲精品偷拍| 久久婷婷国产麻豆91天堂| 在线一区二区三区四区| 欧美福利视频在线观看| 亚洲电影天堂av| 久久女同精品一区二区| 亚洲中无吗在线| 欧美日韩午夜视频在线观看| 在线精品国产欧美| 久久久夜夜夜| 亚洲欧美日韩国产精品| 国产精品区二区三区日本| 亚洲一区二区三区三| 亚洲福利视频一区二区| 乱中年女人伦av一区二区| 国产香蕉97碰碰久久人人| 午夜精品久久久久久99热软件| 亚洲激情在线视频| 欧美国产日韩一区二区| 激情视频一区二区| 欧美一区1区三区3区公司| 一本色道久久综合亚洲精品按摩| 免费在线播放第一区高清av| 在线观看久久av| 免费欧美电影| 欧美1区2区3区| 亚洲国产高清在线| 亚洲福利专区| 欧美日韩一区二区三区四区五区 | 亚洲精品国精品久久99热| 美女精品在线观看| 久久精品国产亚洲a| 狠狠色丁香婷综合久久| 久久伊伊香蕉| 欧美成人精品一区二区| 在线看片成人| 亚洲人成网站777色婷婷| 欧美激情综合色综合啪啪| 中文一区二区| 日韩网站在线看片你懂的| 国产精品你懂得| 卡一卡二国产精品| 欧美激情一级片一区二区| 亚洲欧美日韩精品久久| 午夜精品一区二区三区在线播放| 国产在线观看精品一区二区三区| 玖玖在线精品| 国产日产欧美一区| 欧美成人自拍视频| 欧美日韩国产一区| 欧美一区三区三区高中清蜜桃| 先锋影音久久| aa国产精品| 午夜亚洲激情| 亚洲九九精品| 久久精品中文字幕一区| 亚洲视频视频在线| 久久国产加勒比精品无码| 亚洲日本欧美在线| 午夜免费电影一区在线观看| 亚洲国产日韩在线| 亚洲欧美久久久| 日韩亚洲欧美成人| 欧美在线黄色| 午夜影院日韩| 欧美大片专区| 久久综合狠狠综合久久综合88| 欧美激情视频免费观看| 久久久久国产精品人| 欧美亚洲不卡| 亚洲高清电影| 在线不卡欧美| 欧美伊人久久久久久久久影院| 亚洲图片欧美午夜| 欧美精品日韩www.p站| 久久综合久久久久88| 欧美性猛交一区二区三区精品| 农村妇女精品| 精品成人国产| 久久国产视频网| 亚洲欧美伊人| 欧美日韩成人网| 亚洲国产成人不卡| 亚洲国产成人在线视频| 欧美在线精品一区| 久久久久久久久久久久久久一区 | 欧美久久久久久| 男女视频一区二区| 国产一区二区看久久| 9l国产精品久久久久麻豆| 亚洲激情女人| 老司机免费视频一区二区| 午夜精品久久久久久99热| 国产精品二区在线| 野花国产精品入口| 亚洲午夜精品国产| 欧美视频不卡| 亚洲制服av| 欧美在线影院在线视频| 国产一区二区三区高清播放| 一本色道久久综合一区| 99国产精品99久久久久久| 欧美紧缚bdsm在线视频| 亚洲高清免费视频| 一个色综合导航| 欧美日韩在线亚洲一区蜜芽 | 欧美风情在线| 亚洲第一页自拍| 欧美好骚综合网| 亚洲精品午夜精品| 亚洲精品资源美女情侣酒店| 欧美一级大片在线免费观看| 国产精品国色综合久久| 亚洲免费视频观看| 久久色中文字幕| 亚洲第一成人在线| 欧美成人a∨高清免费观看| 亚洲国产欧美不卡在线观看| 99热在这里有精品免费| 欧美无乱码久久久免费午夜一区| aa级大片欧美三级| 欧美在线国产精品| 伊人久久噜噜噜躁狠狠躁| 欧美/亚洲一区| 制服丝袜激情欧洲亚洲| 久久精品一区二区三区不卡牛牛 | 免费成人美女女| 亚洲另类一区二区| 国产精品天美传媒入口| 久久中文字幕一区| 亚洲卡通欧美制服中文| 午夜电影亚洲| 91久久极品少妇xxxxⅹ软件| 国产精品国产馆在线真实露脸| 亚洲一区免费网站| 免费在线观看成人av| 午夜精品剧场| 亚洲激情婷婷| 欧美系列精品| 久久免费国产精品| 亚洲视频第一页| 欧美大片免费观看| 午夜精品久久久久久久久久久久 | 久久久水蜜桃av免费网站| 亚洲美女少妇无套啪啪呻吟| 国产亚洲精久久久久久| 欧美精品在线观看播放| 欧美在线视频导航| 一区二区三区国产精品| 欧美国产精品专区| 欧美亚洲一区二区在线观看| 夜夜爽夜夜爽精品视频| 亚洲福利视频三区| 狠狠久久五月精品中文字幕| 国产精品初高中精品久久| 免播放器亚洲| 久久色中文字幕| 久久国产精品久久w女人spa| 一区二区三区不卡视频在线观看 | 久久久精品国产免费观看同学| 国产精品99久久久久久有的能看| 在线激情影院一区| 国模大胆一区二区三区|