Jeff Molofee(NeHe) 的 OPENGL 教程 | |
第三課 |
Translated by |
上一課中我教給您三角形和四邊形的繪製方法。這一課我將教您給三角形和四邊形添加2種不同類型的着色方法。使用Flat coloring(單調着色)給四邊形塗上固定的一種顏色。使用Smooth coloring(平滑着色)將三角形的三個頂點的不同顏色混合在一起,創建漂亮的色彩混合。 繼續在上節課的DrawGLScene例程上修改。下面將整個例程重寫了一遍。如果您計劃修改上節課的代碼,只需用下面的代碼覆蓋原來的DrawGLScene()就可以了。 |
|
int DrawGLScene(GLvoid) // 此過程中包括所有的繪製代碼 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度緩存 glLoadIdentity(); // 重置模型觀察矩陣 glTranslatef(-1.5f,0.0f,-6.0f); // 左移 1.5 單位,並移入屏幕 6.0 glBegin(GL_TRIANGLES); // 繪製三角形 |
|
如果您還記得上節課的內容,這段代碼在屏幕的左半部分繪製三角形。下一行代碼是我們第一次使用命令glColor3f(r,g,b)。括號中的三個參數依次是紅、綠、藍三色分量。取值範圍可以從0,0f到1.0f。類似於以前所講的清除屏幕背景命令。 我們將顏色設爲紅色(純紅色,無綠色,無藍色)。接下來的一行代碼設置三角形的第一個頂點(三角形的上頂點),並使用當前顏色(紅色)來繪製。從現在開始所有的繪製的對象的顏色都是紅色,直到我們將紅色改變成別的什麼顏色。 |
|
glColor3f(1.0f,0.0f,0.0f); //設置當前色爲紅色 glVertex3f( 0.0f, 1.0f, 0.0f); // 上頂點 |
|
第一個紅色頂點已經設置完畢。接下來我們設置第二個綠色頂點。三角形的左下頂點被設爲綠色。 | |
glColor3f(0.0f,1.0f,0.0f);//設置當前色爲綠色 glVertex3f(-1.0f,-1.0f, 0.0f); // 左下 |
|
現在設置第三個也就是最後一個頂點。開始繪製之前將顏色設爲藍色。這將是三角形的右下頂點。glEnd()出現後,三角形將被填充。但是因爲每個頂點有不同的顏色,因此看起來顏色從每個角噴出,並剛好在三角形的中心匯合,三種顏色相互混合。這就是平滑着色。 | |
glColor3f(0.0f,0.0f,1.0f);//設置當前色爲藍色 glVertex3f( 1.0f,-1.0f, 0.0f); // 右下 glEnd(); // 三角形繪製結束 glTranslatef(3.0f,0.0f,0.0f); // 右移3單位 |
|
現在我們繪製一個單調着色-藍色的正方形。最重要的是要記住,設置當前色之後繪製的所有東東都是當前色的。以後您所創建的每個工程都要使用顏色。即便是在完全採用紋理貼圖的時候,glColor3f仍舊可以用來調節紋理的色調。等等....,以後再說吧。 我們必須要做的事只需將顏色一次性的設爲我們想採用的顏色(本例採用藍色),然後繪製場景。每個頂點都是藍色的,因爲我們沒有告訴OpenGL要改變頂點的顏色。最後的結果是.....全藍色的正方形。再說一遍,順時針繪製的正方形意味着我們所看見的是四邊形的背面。 |
|
glColor3f(0.5f,0.5f,1.0f); // 一次性將當前色設置爲藍色 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(); // 正方形繪製結束 return TRUE; // 繼續運行 } |
|
最後換掉窗口模式下的標題內容。 | |
if (keys[VK_F1]) // F1鍵按下了麼? { keys[VK_F1]=FALSE; // 若是,使對應的Key數組中的值爲 FALSE KillGLWindow(); // 銷燬當前的窗口 fullscreen=!fullscreen; // 切換 全屏 / 窗口 模式 // 重建 OpenGL 窗口(修改) if (!CreateGLWindow("NeHe's Color Tutorial",640,480,16,fullscreen)) { return 0; // 如果窗口未能創建,程序退出 } } |
|
在這一課中,我試着儘量詳細的解釋如何爲您的OpenGL多邊形添加單調和平滑的着色效果的步驟。改改代碼中的紅綠藍分量值,看看最後y有什麼樣的結果。如果您有什麼意見或建議請給我EMAIL。如果您認爲有什麼不對或可以改進,請告訴我。我想做最好的OpenGL教程並對您的反饋感興趣。 {譯者:NeHe的文檔似乎很簡單,似乎很羅嗦。但仔細想來這樣的高手您又見過幾個?還是那句話,我不是高手,希望您是,真誠的。} 下面是源代碼下載鏈接。祝您好運! |
|
* DOWNLOAD Visual C++ Code For This Lesson. * DOWNLOAD Visual Basic Code For This Lesson. ( Conversion by Ross Dawson ) * DOWNLOAD GLUT Code For This Lesson. ( Conversion by Andy Restad ) * DOWNLOAD Cygwin (FREE Language) Code For This Lesson. ( Conversion by Stephan Ferraro ) * DOWNLOAD Delphi Code For This Lesson. ( Conversion by Peter De Jaegher ) * DOWNLOAD MacOS X/GLUT Code For This Lesson. ( Conversion by Raal Goff ) * DOWNLOAD Linux/GLX Code For This Lesson. ( Conversion by Mihael Vrbanec ) * DOWNLOAD Code Warrior 5 Code For This Lesson. ( Conversion by Scott Lupton ) * DOWNLOAD MASM Code For This Lesson. ( Conversion by Nico (Scalp) ) * DOWNLOAD ASM Code For This Lesson. ( Conversion by Foolman ) * DOWNLOAD Visual Fortran Code For This Lesson. ( Conversion by Jean-Philippe Perois ) * DOWNLOAD Linux Code For This Lesson. ( Conversion by Richard Campbell ) * DOWNLOAD Irix Code For This Lesson. ( Conversion by Lakmal Gunasekara ) * DOWNLOAD Solaris Code For This Lesson. ( Conversion by Lakmal Gunasekara ) * DOWNLOAD Mac OS Code For This Lesson. ( Conversion by Anthony Parker ) * DOWNLOAD Power Basic Code For This Lesson. ( Conversion by Angus Law ) * DOWNLOAD BeOS Code For This Lesson. ( Conversion by Chris Herborth ) * DOWNLOAD Java Code For This Lesson. ( Conversion by Darren Hodges ) * DOWNLOAD Borland C++ Builder 4.0 Code For This Lesson. ( Conversion by Patrick Salmons ) * DOWNLOAD MingW32 & Allegro Code For This Lesson. ( Conversion by Peter Puck ) * DOWNLOAD Python Code For This Lesson. ( Conversion by John ) |
着色:Jeff Molofee(NeHe) 的 OPENGL 教程-第三課
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.