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

  C++博客 :: 首頁(yè) :: 聯(lián)系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 402860
  • 排名 - 59

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

 OpenGL中 的絕大多數(shù)特效都與某些類型的(色彩)混合有關(guān)。混色的定義為,將某個(gè)象素的顏色和已繪制在屏幕上與其對(duì)應(yīng)的象素顏色相互結(jié)合。至于如何結(jié)合這兩個(gè)顏色則 依賴于顏色的alpha通道的分量值,以及/或者所使用的混色函數(shù)。Alpha通常是位于顏色值末尾的第4個(gè)顏色組成分量。前面這些課我們都是用 GL_RGB來(lái)指定顏色的三個(gè)分量。相應(yīng)的GL_RGBA可以指定alpha分量的值。更進(jìn)一步,我們可以使用glColor4f()來(lái)代替 glColor3f()。
   絕大多數(shù)人都認(rèn)為Alpha分量代表材料的透明度。這就是說(shuō),alpha值為0.0時(shí)所代表的材料是完全透明的。alpha值為1.0時(shí)所代表的材料則是完全不透明的。

8.1、混色的公式
   若您對(duì)數(shù)學(xué)不感興趣,而只想看看如何實(shí)現(xiàn)透明,請(qǐng)?zhí)^(guò)這一節(jié)。若您想深入理解(色彩)混合的工作原理,這一節(jié)應(yīng)該適合您吧。(譯者: 其實(shí)混合的基本原理是就將要分色的圖像各象素的顏色以及背景顏色均按照RGB規(guī)則各自分離之后,根據(jù) — 圖像的RGB顏色分量*alpha值+背景的RGB顏色分量*(1-alpha值) — 這樣一個(gè)簡(jiǎn)單公式來(lái)混合之后,最后將混合得到的RGB分量重新合并。)公式如下:

(Rs Sr + Rd Dr, Gs Sg + Gd Dg, Bs Sb + Bd Db, As Sa + Ad Da)

OpenGL按照上面的公式計(jì)算這兩個(gè)象素的混色結(jié)果。小寫的s和r分別代表源象素和目標(biāo)象素。大寫的S和D則是相應(yīng)的混色因子。這些決定了您如何對(duì)這些 象素混色。絕大多數(shù)情況下,各顏色通道的alpha混色值大小相同,這樣對(duì)源象素就有(As, As, As, As),目標(biāo)象素則有(1, 1, 1, 1) - (As, As, As, As)。上面的公式就成了下面的模樣:

(Rs As + Rd (1 - As), Gs As + Gd (1 - As), Bs As + Bs (1 - As), As As + Ad (1 - As))

  這個(gè)公式會(huì)生成透明/半透明的效果。

8.2、OpenGL中的混色
  在OpenGL中實(shí)現(xiàn)混色的步驟類似于我們以前提到的OpenGL過(guò)程。接著設(shè)置公式,并在繪制透明對(duì)象時(shí)關(guān)閉寫深度緩存。因?yàn)槲覀兿朐诎胪该鞯膱D形背后繪制 對(duì)象。這不是正確的混色方法,但絕大多數(shù)時(shí)候這種做法在簡(jiǎn)單的項(xiàng)目中都工作的很好。
  Rui Martins的補(bǔ)充: 正確的混色過(guò)程應(yīng)該是先繪制全部的場(chǎng)景之后再繪制透明的圖形。并且要按照與深度緩存相反的次序來(lái)繪制(先畫最遠(yuǎn)的物體)。考慮對(duì)兩個(gè)多邊形(1和2)進(jìn)行 alpha混合,不同的繪制次序會(huì)得到不同的結(jié)果。(這里假定多邊形1離觀察者最近,那么正確的過(guò)程應(yīng)該先畫多邊形2,再畫多邊形1。正如您再現(xiàn)實(shí)中所見(jiàn) 到的那樣,從這兩個(gè)“透明的”多邊形背后照射來(lái)的光線總是先穿過(guò)多邊形2,再穿過(guò)多邊形1,最后才到達(dá)觀察者的眼睛)。 在深度緩存啟用時(shí),您應(yīng)該將透明圖形按照深度進(jìn)行排序,并在全部場(chǎng)景繪制完畢之后再繪制這些透明物體。否則您將得到不正確的結(jié)果。我知道某些時(shí)候這樣做是 很令人痛苦的,但這是正確的方法。
  我們將使用第七課的代碼。一開(kāi)始先在代碼開(kāi)始處增加兩個(gè)新的變量。出于清晰起見(jiàn),我重寫了整段代碼。

  #include <windows.h>                    // Windows的頭文件
  #include <stdio.h>                     // 標(biāo)準(zhǔn)輸入/輸出庫(kù)的頭文件
  #include <gl\gl.h>                     // OpenGL32庫(kù)的頭文件
  #include <gl\glu.h>                    // GLu32庫(kù)的頭文件
  #include <gl\glaux.h>                   // GLaux庫(kù)的頭文件

  HGLRC hRC=NULL;                      // 永久著色描述表
  HDC hDC=NULL;                       // 私有GDI設(shè)備描述表
  HWND hWnd=NULL;                      // 保存我們的窗口句柄
  HINSTANCE hInstance;                    // 保存程序的實(shí)例

  bool keys[256];                      // 用于鍵盤例程的數(shù)組
  bool active=TRUE;                     // 窗口的活動(dòng)標(biāo)志,缺省為TRUE
  bool fullscreen=TRUE;                   // 全屏標(biāo)志缺省設(shè)定成全屏模式

  BOOL light;                        // 光源的開(kāi)/關(guān)
  bool blend;                        // Blending 開(kāi)/關(guān) ( 新增 )
  BOOL lp;                          // L鍵按下了么?
  BOOL fp;                          // F鍵按下了么?

  GLfloat xrot;                       // X 旋轉(zhuǎn)
  GLfloat yrot;                       // Y 旋轉(zhuǎn)
  GLfloat xspeed;                      // X 旋轉(zhuǎn)速度
  GLfloat yspeed;                      // Y 旋轉(zhuǎn)速度

  GLfloat z=-5.0f;                      // 深入屏幕的距離

  GLfloat LightAmbient[]= { 0.5f };             // 環(huán)境光參數(shù)
  GLfloat LightDiffuse[]= { 1.0f };              // 漫射光參數(shù)
  GLfloat LightPosition[]= { 0.0f };             // 光源位置

  GLuint filter;                       // 濾波類型
  GLuint texture[3];                     // 3種紋理的儲(chǔ)存空間
  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   // WndProc定義

  然后往下移動(dòng)到LoadGLTextures()這里。找到“if (TextureImage[0]=LoadBMP("Data/Crate.bmp"))”這一行。我們現(xiàn)在使用有色玻璃紋理來(lái)代替上一課中的木箱紋理。

      if (TextureImage[0]=LoadBMP("Data/glass.bmp"))   // 載入玻璃位圖 (已修改)

  在InitGL()代碼段加入以下兩行。第一行以全亮度繪制此物體,并對(duì)其進(jìn)行50%的alpha混合(半透明)。當(dāng)混合選項(xiàng)打開(kāi)時(shí),此物體將會(huì)產(chǎn)生50%的透明效果。第二行設(shè)置所采用的混合類型。Rui Martins的補(bǔ)充:alpha通道的值為0.0意味著物體材質(zhì)是完全透明的。1.0則意味著完全不透明。

      glColor4f(1.0f,1.0f,1.0f,0.5f);          // 全亮度, 50% Alpha 混合(新增)
      glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 基于源象素alpha通道值的半透明混合函數(shù) (新增)

  在接近第七課結(jié)尾處的地方找到下面的代碼段。

      if (keys[VK_LEFT])                // Left方向鍵按下了么?
      {
          yspeed-=0.01f; 
             // 若是,減少yspeed
      }

  接著上面的代碼,我們?cè)黾尤缦碌拇a。這幾行監(jiān)視B鍵是否按下。如果是的話,計(jì)算機(jī)檢查混合選項(xiàng)是否已經(jīng)打開(kāi)。然后將其置為相反的狀態(tài)。

      if (keys[VK_LEFT])                // Left方向鍵按下了么?
      if (keys[’B’] && !bp)               // B 健按下且bp為 FALSE么?
      {
          bp=TRUE;
                 // 若是, bp 設(shè)為 TRUE
          blend = !blend;              // 切換混合選項(xiàng)的 TRUE / FALSE
          if(blend)                 // 混合打開(kāi)了么?
          {
              glEnable(GL_BLEND);
        // 打開(kāi)混合
              glDisable(GL_DEPTH_TEST);    // 關(guān)閉深度測(cè)試
          }
          else
                   // 否則
          {
              glDisable(GL_BLEND);
       // 關(guān)閉混合
              glEnable(GL_DEPTH_TEST);     // 打開(kāi)深度測(cè)試
          }
      }
      if (!keys[’B’])
                 // B 鍵松開(kāi)了么?
      {
          bp=FALSE;
                // 若是, bp設(shè)為 FALSE
      }

但是怎樣才能在使用紋理貼圖的時(shí)候指定混合時(shí)的顏色呢?很簡(jiǎn)單,在調(diào)整貼圖模式時(shí),文理貼圖的每個(gè)象素點(diǎn)的顏色都是由alpha通道參數(shù)與當(dāng)前地象素顏 色相乘所得到的。比如,繪制的顏色是(0.5, 0.6, 0.4),我們會(huì)把顏色相乘得到(0.5, 0.6, 0.4, 0.2)(alpha參數(shù)在沒(méi)有指定時(shí),缺省為1.0)。
  就是如此。OpenGL實(shí)現(xiàn)Alpha混合的確很簡(jiǎn)單。

  原文注11/13/1999
我(NeHe)混色代碼進(jìn)行了修改,以使顯示的物體看起來(lái)更逼真。同時(shí)對(duì)源象素和目的象素使用alpha參數(shù)來(lái)混合,會(huì)導(dǎo)致物體的人造痕跡看起來(lái)很明 顯。會(huì)使得物體的背面沿著側(cè)面的地方顯得更暗。基本上物體會(huì)看起來(lái)很怪異。我所用的混色方法也許不是最好的,但的確能夠工作。啟用光源之后,物體看起來(lái)很 逼真。感謝Tom提供的原始代碼,他采用的混色方法是正確的,但物體看起來(lái)并不象所期望的那樣吸引人。
  代碼所作的再次修改是因?yàn)樵谀承╋@卡上glDepthMask()函數(shù)存在尋址問(wèn)題。這條命令在某些卡上啟用或關(guān)閉深度緩沖測(cè)試時(shí)似乎不是很有效,所以我已經(jīng)將啟用或關(guān)閉深度緩沖測(cè)試的代碼轉(zhuǎn)成老式的glEnableglDisable

8.3、紋理貼圖的Alpha混合
  用于紋理貼圖的alpha參數(shù)可以象顏色一樣從問(wèn)題貼圖中讀取。方法如下,您需要在載入所需的材質(zhì)同時(shí)取得其的alpha參數(shù)。然后在調(diào)用glTexImage2D()時(shí)使用GL_RGBA的顏色格式。
posted on 2007-12-11 18:12 sdfasdf 閱讀(2420) 評(píng)論(0)  編輯 收藏 引用 所屬分類: OPENGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久全国免费视频| 欧美激情一区二区久久久| 极品少妇一区二区三区精品视频| 久久九九精品99国产精品| 欧美在线啊v一区| 激情成人亚洲| 亚洲高清在线观看一区| 美女尤物久久精品| 99在线精品视频在线观看| 制服诱惑一区二区| 国产日产欧产精品推荐色 | 久久综合网hezyo| 亚洲人成毛片在线播放女女| 亚洲日本免费| 国产精品久久婷婷六月丁香| 久久久九九九九| 另类激情亚洲| 亚洲一区二区三| 欧美一区二区三区视频在线观看| 国语自产精品视频在线看| 亚洲高清三级视频| 欧美亚一区二区| 久久亚洲春色中文字幕久久久| 美女国产一区| 亚洲欧美日产图| 久久嫩草精品久久久精品| 日韩视频免费大全中文字幕| 亚洲专区免费| 亚洲国产精品久久久| 一区二区三区视频免费在线观看 | 影音先锋成人资源站| 91久久国产综合久久蜜月精品 | 久久aⅴ国产欧美74aaa| 亚洲日本理论电影| 亚洲一区二区三区四区视频| 亚洲第一在线综合在线| 99re这里只有精品6| 黑人极品videos精品欧美裸| 亚洲精品无人区| 国产亚洲成年网址在线观看| 亚洲欧洲三级电影| 国产日韩欧美视频在线| 欧美高清在线视频| 国产精品亚洲综合色区韩国| 亚洲第一天堂av| 国产精品伊人日日| 91久久在线播放| 国语自产偷拍精品视频偷| 99国产成+人+综合+亚洲欧美| 狠狠色综合播放一区二区| 一区二区日韩| 亚洲国产精品一区二区久| 夜夜爽www精品| 亚洲国产成人tv| 亚洲欧美在线网| 一区二区91| 乱中年女人伦av一区二区| 久久成人人人人精品欧| 欧美日韩另类在线| 老司机午夜免费精品视频| 国产精品久久久久影院亚瑟| 亚洲激情黄色| 伊大人香蕉综合8在线视| 亚洲一级在线观看| av成人黄色| 欧美xart系列高清| 久久香蕉国产线看观看网| 国产精品区一区二区三| 亚洲精品欧美日韩专区| 亚洲国产婷婷香蕉久久久久久| 午夜一区在线| 亚洲欧美在线观看| 欧美伦理一区二区| 欧美国产三区| 激情久久综合| 欧美一区二区精品在线| 亚洲一区欧美激情| 欧美精品91| 亚洲电影专区| 韩国精品在线观看| 亚洲欧美成人网| 亚洲欧美久久| 欧美日韩中文另类| 亚洲人成网站影音先锋播放| 亚洲国产三级网| 久久全球大尺度高清视频| 久久久久国产精品www| 国产区精品在线观看| 亚洲午夜精品17c| 亚洲一区二区免费| 欧美日韩调教| 亚洲另类一区二区| 99视频一区| 欧美精品三区| 亚洲欧洲三级电影| 99精品欧美| 欧美精品大片| 亚洲精品久久久久久久久久久久| 亚洲欧洲日产国产综合网| 久久久久久久激情视频| 久久野战av| 在线观看国产日韩| 久久久久国产一区二区| 久久夜色精品| 黄色一区二区在线| 老牛影视一区二区三区| 欧美大胆a视频| 亚洲精品久久久久久久久久久久| 美女图片一区二区| 亚洲高清久久| 日韩午夜在线视频| 欧美精品一卡| 日韩一级在线观看| 一区二区三区日韩精品视频| 欧美精品一区二区久久婷婷| 亚洲韩国精品一区| 亚洲精品久久久久久久久久久久 | 99精品视频免费观看| 欧美日韩国产精品成人| 亚洲人成啪啪网站| 国产精品99久久久久久www| 欧美日韩一区二区三区四区五区| 99综合精品| 欧美一二区视频| 国语精品一区| 欧美va亚洲va香蕉在线| 亚洲激情黄色| 亚洲一区黄色| 国产亚洲一区在线播放| 久久久噜噜噜久久| 亚洲国产精品一区二区三区| 中文有码久久| 国产女人水真多18毛片18精品视频| 欧美在线免费一级片| 美女主播精品视频一二三四| 亚洲免费播放| 国产精品成人va在线观看| 亚洲欧美日韩国产中文在线| 麻豆精品91| 99国产精品视频免费观看一公开| 国产精品chinese| 欧美一区二区三区久久精品茉莉花| 玖玖综合伊人| 一本在线高清不卡dvd| 国产精品一区在线观看| 久久这里有精品15一区二区三区| 亚洲黄色av| 亚洲欧美日韩直播| 一区在线影院| 欧美日韩在线一区| 久久成人资源| 亚洲国产精品久久人人爱蜜臀| 亚洲免费在线播放| 一区二区三区在线看| 欧美日韩国产小视频在线观看| 亚洲女人小视频在线观看| 欧美成人精品一区二区| 亚洲一区二区三区777| 一区二区亚洲| 欧美日韩在线精品| 欧美在线亚洲在线| 亚洲欧洲一二三| 久久精品人人爽| 亚洲免费精品| 国产亚洲综合精品| 欧美精品久久久久久久| 性欧美超级视频| 亚洲精品123区| 久久久精品动漫| 亚洲精品永久免费| 国产亚洲欧美日韩一区二区| 欧美精品福利| 欧美夜福利tv在线| 亚洲美女视频网| 免费成人av在线看| 亚洲欧美日韩直播| 亚洲另类在线一区| 国产一区二区你懂的| 欧美三级乱码| 美女主播一区| 午夜宅男欧美| 一二美女精品欧洲| 欧美国产视频日韩| 久久国产加勒比精品无码| 日韩亚洲在线| 亚洲第一中文字幕| 国产欧美一区二区三区在线看蜜臀 | 亚洲精品一二| 国产区精品视频| 国产精品v日韩精品v欧美精品网站| 狂野欧美一区| 欧美一区午夜精品| 亚洲视频福利| 亚洲欧洲综合| 欧美成人国产一区二区| 久久久久免费观看| 午夜影视日本亚洲欧洲精品| 亚洲精品久久久久久下一站| 精品成人一区二区| 国产一区二区成人|