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

  C++博客 :: 首頁 :: 聯系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402520
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

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

8.1、混色的公式
   若您對數學不感興趣,而只想看看如何實現透明,請跳過這一節。若您想深入理解(色彩)混合的工作原理,這一節應該適合您吧。(譯者: 其實混合的基本原理是就將要分色的圖像各象素的顏色以及背景顏色均按照RGB規則各自分離之后,根據 — 圖像的RGB顏色分量*alpha值+背景的RGB顏色分量*(1-alpha值) — 這樣一個簡單公式來混合之后,最后將混合得到的RGB分量重新合并。)公式如下:

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

OpenGL按照上面的公式計算這兩個象素的混色結果。小寫的s和r分別代表源象素和目標象素。大寫的S和D則是相應的混色因子。這些決定了您如何對這些 象素混色。絕大多數情況下,各顏色通道的alpha混色值大小相同,這樣對源象素就有(As, As, As, As),目標象素則有(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))

  這個公式會生成透明/半透明的效果。

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

  #include <windows.h>                    // Windows的頭文件
  #include <stdio.h>                     // 標準輸入/輸出庫的頭文件
  #include <gl\gl.h>                     // OpenGL32庫的頭文件
  #include <gl\glu.h>                    // GLu32庫的頭文件
  #include <gl\glaux.h>                   // GLaux庫的頭文件

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

  bool keys[256];                      // 用于鍵盤例程的數組
  bool active=TRUE;                     // 窗口的活動標志,缺省為TRUE
  bool fullscreen=TRUE;                   // 全屏標志缺省設定成全屏模式

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

  GLfloat xrot;                       // X 旋轉
  GLfloat yrot;                       // Y 旋轉
  GLfloat xspeed;                      // X 旋轉速度
  GLfloat yspeed;                      // Y 旋轉速度

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

  GLfloat LightAmbient[]= { 0.5f };             // 環境光參數
  GLfloat LightDiffuse[]= { 1.0f };              // 漫射光參數
  GLfloat LightPosition[]= { 0.0f };             // 光源位置

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

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

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

  在InitGL()代碼段加入以下兩行。第一行以全亮度繪制此物體,并對其進行50%的alpha混合(半透明)。當混合選項打開時,此物體將會產生50%的透明效果。第二行設置所采用的混合類型。Rui Martins的補充:alpha通道的值為0.0意味著物體材質是完全透明的。1.0則意味著完全不透明。

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

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

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

  接著上面的代碼,我們增加如下的代碼。這幾行監視B鍵是否按下。如果是的話,計算機檢查混合選項是否已經打開。然后將其置為相反的狀態。

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

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

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

8.3、紋理貼圖的Alpha混合
  用于紋理貼圖的alpha參數可以象顏色一樣從問題貼圖中讀取。方法如下,您需要在載入所需的材質同時取得其的alpha參數。然后在調用glTexImage2D()時使用GL_RGBA的顏色格式。
posted on 2007-12-11 18:12 sdfasdf 閱讀(2420) 評論(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>
            午夜一级久久| 亚洲盗摄视频| 欧美一区二区在线观看| 亚洲午夜在线观看视频在线| 99www免费人成精品| 亚洲美女视频在线观看| 亚洲国产精品久久久久秋霞蜜臀 | 卡通动漫国产精品| 欧美一级视频| 久久九九精品99国产精品| 欧美成年人网站| 亚洲欧美www| 亚洲欧美日韩区| 久久久久久午夜| 免费中文日韩| 欧美精品一区三区在线观看| 欧美喷水视频| 国产精品系列在线播放| 国产精品亚洲一区| 亚洲国产精品一区二区第四页av| 亚洲精品看片| 亚洲欧美日韩精品久久奇米色影视| 翔田千里一区二区| 欧美大片在线观看一区二区| 一本一本久久| 久久久久久久综合| 欧美日韩在线精品| 国产亚洲欧美色| 日韩亚洲视频| 另类图片国产| 亚洲夜晚福利在线观看| 欧美成人国产一区二区| 国产欧美精品日韩| 一本久道久久综合中文字幕| 久久婷婷影院| 夜夜嗨av色一区二区不卡| 午夜精品亚洲一区二区三区嫩草| 老牛嫩草一区二区三区日本| 亚洲每日更新| 免费成人高清视频| 国产私拍一区| 亚洲欧美中文在线视频| 亚洲国产清纯| 久久亚洲国产精品一区二区 | 亚洲视频免费在线| 久久久噜噜噜久噜久久| 亚洲天堂成人| 欧美激情亚洲另类| 在线观看国产精品淫| 欧美一区二区视频在线| 亚洲国产你懂的| 久久久不卡网国产精品一区| 欧美日韩视频不卡| 亚洲精品国产日韩| 久久在线播放| 午夜精品一区二区在线观看| 国产精品美女久久久久av超清| 亚洲精品免费看| 久久婷婷色综合| 欧美诱惑福利视频| 国产一区二区三区四区老人| 亚洲男人的天堂在线观看| 99精品久久| 欧美激情一区二区三级高清视频| 国内揄拍国内精品少妇国语| 亚洲一级黄色| 一区二区免费在线观看| 欧美日韩在线播放| 在线亚洲一区二区| 一本久道久久综合中文字幕| 欧美日韩亚洲一区二区| 在线视频欧美精品| 亚洲国产欧美一区| 另类尿喷潮videofree| 国产精品三级久久久久久电影| 亚洲精品日韩激情在线电影| 麻豆成人精品| 久久se精品一区二区| 国产精品a久久久久久| 99视频精品免费观看| 欧美激情精品久久久久久蜜臀| 久久精品二区三区| 国语自产在线不卡| 欧美专区在线播放| 亚洲欧美日韩国产一区二区| 国产精品视频最多的网站| 亚洲——在线| 亚洲一区三区电影在线观看| 亚洲美女av网站| 久久一区二区三区av| 欧美在线观看www| 国产精品一区二区在线观看不卡| 亚洲一区不卡| 国产精品99久久久久久www| 国产精品久久久久久久免费软件| 久久久久久久久久久久久久一区| 久久九九99视频| 亚洲视频欧美视频| 亚洲欧美制服另类日韩| 在线观看国产成人av片| 亚洲激情六月丁香| 国产一区二区三区av电影| 国产一区二区三区四区hd| 欧美欧美全黄| 日韩视频一区二区在线观看| 亚洲天堂av电影| 亚洲电影成人| 亚洲在线视频网站| 亚洲欧洲日产国产综合网| 亚洲精品国精品久久99热| 黑人极品videos精品欧美裸| 一区二区三区精密机械公司| 亚洲黄色成人网| 欧美在线播放| 性做久久久久久| 欧美精品激情blacked18| 久久在线免费| 国产日韩欧美精品一区| 这里只有精品丝袜| 亚洲美女在线看| 久久中文欧美| 久久伊人亚洲| 国产一区二区按摩在线观看| 在线亚洲精品| 亚洲一区视频在线| 欧美成人国产| 亚洲视频自拍偷拍| 国模套图日韩精品一区二区| 91久久夜色精品国产网站| 国产综合香蕉五月婷在线| 在线亚洲美日韩| 亚洲老司机av| 久久亚洲春色中文字幕| 欧美一区二区三区在线看| 欧美精品久久一区| 免播放器亚洲一区| 国产一区二区三区在线观看免费 | 久久亚洲免费| 欧美一激情一区二区三区| 欧美激情一二三区| 老色鬼精品视频在线观看播放| 久热精品在线视频| 国产精品一区二区你懂的| 亚洲美女一区| 亚洲午夜激情网站| 欧美日韩在线看| 这里只有精品丝袜| 欧美一区二区三区在线播放| 国产精品网站视频| 亚洲欧美在线另类| 久久一二三国产| 亚洲国产日韩欧美| 欧美精品一区二区三区在线播放 | 亚洲日本va午夜在线电影 | 国产一区二区成人| 免费日韩成人| 亚洲精品永久免费| 亚洲一区在线免费| 国产性猛交xxxx免费看久久| 久久精品一二三| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲国产精品v| 欧美好吊妞视频| 亚洲人成在线观看网站高清| 亚洲午夜女主播在线直播| 国产精品色网| 久久九九国产精品怡红院| 亚洲黄色免费电影| 一区二区免费看| 国产欧美日韩精品丝袜高跟鞋| 久久精品国产第一区二区三区| 久久综合色婷婷| 亚洲精选在线观看| 国产精品永久| 欧美一区中文字幕| 欧美成人精品在线播放| 亚洲一区二区三区四区五区黄 | 国产精品视频导航| 亚洲精品在线电影| 欧美成人r级一区二区三区| 一区二区三区你懂的| 久久精品一区| 亚洲三级电影全部在线观看高清 | 欧美激情二区三区| 欧美亚洲综合久久| 免费不卡亚洲欧美| 亚洲午夜免费福利视频| 一区精品久久| 欧美视频在线观看免费网址| 欧美在线免费视频| 日韩亚洲欧美在线观看| 亚洲欧美亚洲| 在线观看欧美亚洲| 国产伦一区二区三区色一情| 欧美日本一道本| 久久久www成人免费无遮挡大片| 99国产精品久久| 欧美成人免费视频| 午夜久久福利| 亚洲天堂av在线免费观看|