• <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>

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

            常用鏈接

            留言簿(48)

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

            搜索

            •  

            積分與排名

            • 積分 - 399428
            • 排名 - 59

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            上一課中我教給您三角形和四邊形的繪制方法。這一課我將教您給三角形和四邊形添加2種不同類(lèi)型的著色方法。使用單調(diào)著色(Flat coloring)給四邊形涂上固定的一種顏色。使用平滑著色(Smooth coloring)將三角形的三個(gè)頂點(diǎn)的不同顏色混合在一起,創(chuàng)建漂亮的色彩混合。
               繼續(xù)在上節(jié)課的DrawGLScene例程上修改。下面將整個(gè)例程重寫(xiě)了一遍。如果您計(jì)劃修改上節(jié)課的代碼,只需用下面的代碼覆蓋原來(lái)的DrawGLScene()就可以了。

              int DrawGLScene(GLvoid)                  // 此過(guò)程中包括所有的繪制代碼
              {
                   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
            // 清除屏幕及深度緩存
                  glLoadIdentity();                 // 重置模型觀(guān)察矩陣
                  glTranslatef(-1.5f,0.0f,-6.0f);          // 左移 1.5 單位,并移入屏幕 6.0
                  glBegin(GL_TRIANGLES);               // 繪制三角形

               如果您還記得上節(jié)課的內(nèi)容,這段代碼在屏幕的左半部分繪制三角形。下一行代碼是我們第一次使用命令glColor3f(r,g,b)。括號(hào)中的三個(gè)參數(shù)依次是紅、綠、藍(lán)三色分量。取值范圍可以從0,0f到1.0f。類(lèi)似于以前所講的清除屏幕背景命令。
               我們將顏色設(shè)為紅色(純紅色,無(wú)綠色,無(wú)藍(lán)色)。接下來(lái)的一行代碼設(shè)置三角形的第一個(gè)頂點(diǎn)(三角形的上頂點(diǎn)),并使用當(dāng)前顏色(紅色)來(lái)繪制。從現(xiàn)在開(kāi)始所有的繪制的對(duì)象的顏色都是紅色,直到我們將紅色改變成別的什么顏色。

                      glColor3f(1.0f,0.0f,0.0f);        // 設(shè)置當(dāng)前色為紅色
                      glVertex3f( 0.0f, 1.0f, 0.0f);      // 上頂點(diǎn)

               第一個(gè)紅色頂點(diǎn)已經(jīng)設(shè)置完畢。接下來(lái)我們?cè)O(shè)置第二個(gè)綠色頂點(diǎn)。三角形的左下頂點(diǎn)被設(shè)為綠色。

                      glColor3f(0.0f,1.0f,0.0f);        // 設(shè)置當(dāng)前色為綠色
                      glVertex3f(-1.0f,-1.0f, 0.0f);      // 左下

               現(xiàn)在設(shè)置第三個(gè)也就是最后一個(gè)頂點(diǎn)。開(kāi)始繪制之前將顏色設(shè)為藍(lán)色。這將是三角形的右下頂點(diǎn)。glEnd()出現(xiàn)后,三角形將被填充。但是因?yàn)槊總€(gè)頂點(diǎn)有不同的顏色,因此看起來(lái)顏色從每個(gè)角噴出,并剛好在三角形的中心匯合,三種顏色相互混合。這就是?交派?

                      glColor3f(0.0f,0.0f,1.0f);        // 設(shè)置當(dāng)前色為藍(lán)色
                      glVertex3f( 1.0f,-1.0f, 0.0f);      // 右下
                  glEnd();                     // 三角形繪制結(jié)束

                  glTranslatef(3.0f,0.0f,0.0f);          // 右移3單位

               現(xiàn)在我們繪制一個(gè)單調(diào)著色-藍(lán)色的正方形。最重要的是要記住,設(shè)置當(dāng)前色之后繪制的所有東東都是當(dāng)前色的。以后您所創(chuàng)建的每個(gè)工程都要使用顏色。即便是在完全采用紋理貼圖的時(shí)候,glColor3f仍舊可以用來(lái)調(diào)節(jié)紋理的色調(diào)。等等....,以后再說(shuō)吧。
               我們必須要做的事只需將顏色一次性的設(shè)為我們想采用的顏色(本例采用藍(lán)色),然后繪制場(chǎng)景。每個(gè)頂點(diǎn)都是藍(lán)色的,因?yàn)槲覀儧](méi)有告訴OpenGL要改變頂點(diǎn)的顏色。最后的結(jié)果是.....全藍(lán)色的正方形。再說(shuō)一遍,順時(shí)針繪制的正方形意味著我們所看見(jiàn)的是四邊形的背面。

                  glColor3f(0.5f,0.5f,1.0f);           // 一次性將當(dāng)前色設(shè)置為藍(lán)色
                  glBegin(GL_QUADS);               // 繪制正方形
                      glVertex3f(-1.0f, 1.0f, 0.0f);     // 左上
                      glVertex3f( 1.0f, 1.0f, 0.0f);     // 右上
                      glVertex3f( 1.0f,-1.0f, 0.0f);     // 左下
                      glVertex3f(-1.0f,-1.0f, 0.0f);     // 右下
                  glEnd();                    // 正方形繪制結(jié)束
                  return TRUE;                  // 繼續(xù)運(yùn)行
              }

               最后換掉窗口模式下的標(biāo)題內(nèi)容。

                         if (keys[VK_F1])         // F1鍵按下了么?
                         {
                               keys[VK_F1]=FALSE;
                // 若是,使對(duì)應(yīng)的Key數(shù)組中的值為 FALSE
                             KillGLWindow();     // 銷(xiāo)毀當(dāng)前的窗口
                             fullscreen=!fullscreen; // 切換 全屏 / 窗口 模式
                              // 重建 OpenGL 窗口(修改)
                             if (!CreateGLWindow("NeHe’s Color Tutorial",
                                   640,480,16,fullscreen))
                              {
                                   return 0;
                // 如果窗口未能創(chuàng)建,程序退出
                             }
                          }


            在這一課中,我試著盡量詳細(xì)的解釋如何為您的OpenGL多邊形添加單調(diào)和平滑的著色效果的步驟。改改代碼中的紅綠藍(lán)分量值,看看最后有什么樣的結(jié)果。如 果您有什么意見(jiàn)或建議請(qǐng)給我寫(xiě)信。如果您認(rèn)為有什么不對(duì)或可以改進(jìn),請(qǐng)告訴我。我想做最好的OpenGL教程并對(duì)您的反饋感興趣。
            posted on 2007-12-09 18:51 sdfasdf 閱讀(647) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): OPENGL

            Feedback

            # re: OpenGL教程- 著色 第三課 2007-12-09 19:08 學(xué)海一人
            Thank you!  回復(fù)  更多評(píng)論
              

            久久精品国产99国产精品| 91麻精品国产91久久久久| 久久99精品免费一区二区| 狠狠综合久久AV一区二区三区 | 久久综合中文字幕| 国产成人精品久久一区二区三区| 久久精品视频免费| 久久免费视频6| 久久人人爽人人爽人人爽| 久久ww精品w免费人成| 久久综合久久久| 亚洲精品高清国产一线久久| AV无码久久久久不卡蜜桃| 国产精品一久久香蕉国产线看观看| 伊人久久大香线蕉av不变影院| 国产午夜久久影院| 欧美亚洲另类久久综合婷婷| 久久ZYZ资源站无码中文动漫| 精品久久久久中文字幕一区| 久久99久国产麻精品66| 色综合久久天天综合| 亚洲国产另类久久久精品黑人 | 99国产精品久久| 青青草原综合久久大伊人导航 | 欧美777精品久久久久网| 色婷婷久久综合中文久久一本| 精品国产一区二区三区久久| 99久久国产综合精品女同图片| 色婷婷噜噜久久国产精品12p| 一级做a爰片久久毛片16| 久久精品国产亚洲AV高清热| 亚洲精品无码专区久久久| 亚洲va中文字幕无码久久不卡 | 国产精品一久久香蕉国产线看观看 | 久久人人爽人人爽人人av东京热 | 亚洲人成精品久久久久| 久久精品国产精品亚洲精品| 无码国内精品久久综合88 | 91久久精品国产91性色也| 久久精品亚洲精品国产欧美| 亚洲日韩欧美一区久久久久我 |