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

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

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402521
  • 排名 - 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參數來混合,會導致物體的人造痕跡看起來很明 顯。會使得物體的背面沿著側面的地方顯得更暗。基本上物體會看起來很怪異。我所用的混色方法也許不是最好的,但的確能夠工作。啟用光源之后,物體看起來很 逼真。感謝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>
            欧美成人小视频| 影音先锋中文字幕一区| 一区二区三区不卡视频在线观看| 久久久久久高潮国产精品视| 欧美成人综合一区| 亚洲欧美日韩精品| 亚洲大片在线观看| 国产精品免费一区二区三区观看| 久久精品成人欧美大片古装| 亚洲三级影院| 欧美日韩一区在线观看| 亚洲欧洲av一区二区三区久久| 欧美成人小视频| 亚洲高清不卡| 久久久久久综合网天天| 一区二区免费看| 午夜一区不卡| 中文成人激情娱乐网| 精品动漫一区二区| 国产一区二区三区直播精品电影 | 久久久福利视频| 亚洲午夜精品17c| 亚洲精品护士| 狠狠综合久久av一区二区老牛| 国产精品久久| 欧美bbbxxxxx| 久久久之久亚州精品露出| 蜜臀久久久99精品久久久久久| 久久超碰97人人做人人爱| 亚洲自拍三区| 夜夜狂射影院欧美极品| 亚洲国产精品一区| 国产主播一区二区| 黄色精品在线看| 亚洲一级在线| 亚洲国产精品毛片| 亚洲国产91色在线| 亚洲尤物视频网| 亚洲一区美女视频在线观看免费| 欧美在线视频a| 久久久国际精品| 久久久久国产精品一区二区| 欧美精品一区三区| 欧美日韩久久久久久| 国产主播一区二区三区| 亚洲午夜电影| 最近中文字幕mv在线一区二区三区四区| 欧美va天堂| 亚洲主播在线播放| 欧美在线高清视频| 国产精品久久久久一区二区三区| 亚洲黄色在线观看| 一本在线高清不卡dvd| 美脚丝袜一区二区三区在线观看| 亚洲资源在线观看| 国产精品麻豆va在线播放| 在线视频欧美日韩精品| 亚洲日本aⅴ片在线观看香蕉| 另类成人小视频在线| 欧美激情视频一区二区三区在线播放 | 亚洲电影成人| 久久视频在线看| 欧美精品色网| 亚洲精品乱码久久久久久蜜桃麻豆 | 免费看成人av| 久久蜜桃精品| 激情六月综合| 欧美成人精品在线| 欧美刺激午夜性久久久久久久| 亚洲精品1区2区| 亚洲免费福利视频| 亚洲网友自拍| 亚洲大片在线观看| 蜜臀久久99精品久久久久久9 | 国产精品久久久久毛片大屁完整版 | 亚洲无线一线二线三线区别av| 欧美在线视频不卡| 好吊成人免视频| 欧美.日韩.国产.一区.二区| 久久综合色播五月| 日韩一区二区精品| 久久狠狠久久综合桃花| 亚洲高清不卡一区| 欧美激情视频在线播放| 亚洲小说春色综合另类电影| 亚洲一区免费在线观看| 国内精品久久久久伊人av| 欧美99在线视频观看| 欧美乱大交xxxxx| 欧美一站二站| 一区二区三区黄色| 欧美高清在线精品一区| 国产亚洲成精品久久| 亚洲午夜一区二区| 性色av一区二区三区在线观看| 欧美日韩三级电影在线| 欧美在线欧美在线| 免费在线成人av| 一区二区在线视频播放| 亚洲人永久免费| 国产亚洲成精品久久| 亚洲精品护士| 黄色小说综合网站| 一本一本久久| 国模吧视频一区| 夜夜爽夜夜爽精品视频| 欧美日韩黄色一区二区| 日韩网站免费观看| 欧美一级欧美一级在线播放| 国产日韩欧美精品| 亚洲人精品午夜在线观看| 国产区二精品视| 久久精品免费观看| 欧美日韩精品高清| 欧美成人情趣视频| 国产亚洲精品久久久| 亚洲精品一区二区三区在线观看| 久久久久一区| 一区二区高清在线| 久久―日本道色综合久久| 午夜精品久久久99热福利| 亚洲视频一区在线| 国产精品婷婷| 午夜久久电影网| 欧美日韩成人在线视频| 国内精品久久久久久久果冻传媒 | 先锋影音网一区二区| 亚洲视频一二三| 欧美福利视频网站| 免费观看不卡av| 极品少妇一区二区三区| 欧美亚洲三区| 久久国产手机看片| 国产午夜一区二区三区| 亚洲欧美日韩国产综合在线| 亚洲一区在线看| 欧美日韩免费观看中文| 亚洲精品视频在线观看网站| 亚洲精品免费一二三区| 欧美大片在线观看| 欧美激情视频在线播放| 欧美日韩不卡合集视频| 亚洲国产91| 一区二区三区精品| 国产精品成人久久久久| 亚洲一区二区三区在线| 亚洲午夜国产成人av电影男同| 欧美日产国产成人免费图片| 亚洲理论在线| 亚洲综合另类| 国产欧美日韩在线观看| 欧美中文字幕在线| 欧美韩国在线| 亚洲午夜三级在线| 国产专区综合网| 女女同性女同一区二区三区91| 亚洲高清不卡在线| 亚洲一区影音先锋| 国色天香一区二区| 欧美成人精品在线播放| 9人人澡人人爽人人精品| 欧美一级欧美一级在线播放| 韩国av一区二区| 欧美日本精品一区二区三区| 亚洲视频综合在线| 麻豆精品91| 国内精品久久久久伊人av| 久久综合九色综合欧美就去吻 | 美女日韩在线中文字幕| 亚洲美女在线视频| 国产人久久人人人人爽| 免费视频一区二区三区在线观看| 亚洲精品之草原avav久久| 性色av一区二区三区红粉影视| 国内精品久久国产| 欧美日韩中文字幕| 亚洲看片一区| 久久xxxx精品视频| 日韩一级片网址| 国产在线精品成人一区二区三区| 美女国内精品自产拍在线播放| 99精品视频免费全部在线| 久久久久久久成人| 亚洲综合第一页| 亚洲品质自拍| 国内精品久久久久伊人av| 欧美日韩一级黄| 久热综合在线亚洲精品| 亚洲欧美成人一区二区三区| 亚洲日本在线视频观看| 裸体女人亚洲精品一区| 亚洲午夜av| 久久影视三级福利片| 亚洲综合国产精品| 亚洲欧洲一二三| 欧美肥婆bbw| 久久亚洲欧洲| 91久久中文字幕| 国产伪娘ts一区| 国产精品毛片va一区二区三区 |