第三課
     
  在上一課中, 我已經教你如何在畫面上顯示三角形和四邊形. 在這一課中, 我將教你如何加入兩種不同的上色方式, 對於三角形和四邊形. 平面上色使得四邊形只有一個實色. 平滑上色則會把三角形三個點 (頂點) 所指定的顏色進行混合, 而產生出好看的混合色.

使用上一課的程式碼, 我們再加入 DrawGLScene 程序中. 我會在下面重新改寫整個程序. 如果你計畫修改上一課, 你可以用下列的程式碼來取代 DrawGLScene 程序, 或是只要把下列的程式碼的部分, 是上一課所沒有的, 加入就可以了.
 
     
int DrawGLScene(GLvoid)						// Here's Where We Do All The Drawing
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear The Screen And The Depth Buffer
	glLoadIdentity();					// Reset The Current Modelview Matrix

	glTranslatef(-1.5f,0.0f,-6.0f);				// Left 1.5 Then Into Screen Six Units

	glBegin(GL_TRIANGLES);					// Begin Drawing Triangles
     
  如果你還記得在上一課中, 這一段的程式碼是用來繪製畫面中左半邊的三角形的. 下一行的程式碼則是我們第一次使用 glColor3f(r,g,b) 指令. 括號中的三個參數就是紅色, 綠色和藍色的強度值. 數值的範圍介於 0.0f 到 1.0f 之間. 它的用法就和我們用來清除畫面背景顏色的一樣.

我們把顏色設為紅色 (全紅, 沒有綠色藍色). 這一行程式碼的右邊就是第一個點 (三角形上面的點), 會被用目前的紅色來畫. 我們現在所畫的都會用紅色, 直到我們把顏色改為別的顏色為止.
 
     
		glColor3f(1.0f,0.0f,0.0f);			// Set The Color To Red
		glVertex3f( 0.0f, 1.0f, 0.0f);			// Move Up One Unit From Center (Top Point)
     
  我們已經把第一個點放到畫面上, 顏色也設為紅色. 現在我們放第二點之前要先把顏色改為綠色. 如此一來三角形左下角的第二個點就會被設為綠色.  
     
		glColor3f(0.0f,1.0f,0.0f);			// Set The Color To Green
		glVertex3f(-1.0f,-1.0f, 0.0f);			// Left And Down One Unit (Bottom Left)
     
  接著是第三個也是最後一個點. 在畫之前把它設為藍色. 這會是三角形右下角的點. 在 glEnd() 被發布後, 多邊形就會被填滿顏色. 但是因為它每一個點都有不同顏色, 而不是都相同的顏色, 顏色會被散佈在每個角落, 最終在中間的地方, 顏色就會混合在一起. 這就是平滑著色.  
     
		glColor3f(0.0f,0.0f,1.0f);			// Set The Color To Blue
		glVertex3f( 1.0f,-1.0f, 0.0f);			// Right And Down One Unit (Bottom Right)
	glEnd();						// Done Drawing A Triangle

	glTranslatef(3.0f,0.0f,0.0f);				// From Right Point Move 3 Units Right
     
  現在我們要畫一個實心藍色的正方形. 重點是要記住, 在設完顏色後, 任何的繪圖就會用這個顏色. 你所建的專案都會使用其中一種著色方法. 即使在每個東西都有貼圖材質的場景中, glColor3f 依然可以用來調整貼圖材質的顏色色調, 等等. 以後還有更多作用.

所以要用一種顏色畫方形的話, 我們所要做的就是只設定一次我們所想要的顏色 (在這個例子中就是藍色), 然後才畫出方形. 那麼藍色的色彩就會被用在每一個點上, 因為我們沒有要 OpenGL 在每個點上改變顏色. 最後的結果就會是... 一個藍色的方形.
 
     
	glColor3f(0.5f,0.5f,1.0f);				// Set The Color To Blue One Time Only
	glBegin(GL_QUADS);					// Start Drawing Quads
		glVertex3f(-1.0f, 1.0f, 0.0f);			// Left And Up 1 Unit (Top Left)
		glVertex3f( 1.0f, 1.0f, 0.0f);			// Right And Up 1 Unit (Top Right)
		glVertex3f( 1.0f,-1.0f, 0.0f);			// Right And Down One Unit (Bottom Right)
		glVertex3f(-1.0f,-1.0f, 0.0f);			// Left And Up One Unit (Bottom Left)
	glEnd();						// Done Drawing A Quad
	return TRUE;						// Keep Going
}
     
  最後改變切換視窗 / 全螢幕模式的程式碼, 如此一來視窗上面的標題就會正確顯示了.  
     
			if (keys[VK_F1])			// Is F1 Being Pressed?
			{
				keys[VK_F1]=FALSE;		// If So Make Key FALSE
				KillGLWindow();			// Kill Our Current Window
				fullscreen=!fullscreen;		// Toggle Fullscreen / Windowed Mode
				// Recreate Our OpenGL Window ( Modified )
				if (!CreateGLWindow("NeHe's Color Tutorial",640,480,16,fullscreen))
				{
					return 0;		// Quit If Window Was Not Created
				}
			}
     
  在這個課程中, 我已經試著很仔細的解釋了, 如何加入平面和平滑著色的多邊形. 玩著這個程式碼, 試著改變紅色, 綠色, 和藍色為其他的數值. 來看看會變成什麼顏色. 如果你有意見或是問題, 請寄電子郵件告訴我. 如果你認為我的註解不正確, 或者某些段落的程式可以再更好, 請讓我知道. 我想盡我最大努力作最好的 OpenGL 教學課程, 我很有興趣聽聽你們的反應.

Jeff Molofee (NeHe)

* 下載 Visual C++ 程式碼給本課程的.
* 下載 Delphi 程式碼給本課程的. ( Conversion by Peter De Jaegher )
* 下載 ASM 程式碼給本課程的. ( Conversion by Foolman )
* 下載 Visual Fortran 程式碼給本課程的. ( Conversion by Jean-Philippe Perois )
* 下載 Linux 程式碼給本課程的. ( Conversion by Richard Campbell )
* 下載 Irix 程式碼給本課程的. ( Conversion by Lakmal Gunasekara )
* 下載 Solaris 程式碼給本課程的. ( Conversion by Lakmal Gunasekara )
* 下載 Mac OS 程式碼給本課程的. ( Conversion by Anthony Parker )
* 下載 Power Basic 程式碼給本課程的. ( Conversion by Angus Law )
* 下載 BeOS 程式碼給本課程的. ( Conversion by Chris Herborth )
* 下載 Java 程式碼給本課程的. ( Conversion by Darren Hodges )
* 下載 Borland C++ Builder 4.0 程式碼給本課程的. ( Conversion by Patrick Salmons )
* 下載 MingW32 & Allegro 程式碼給本課程的. ( Conversion by Peter Puck )
* 下載 Python 程式碼給本課程的. ( Conversion by John )
 
     
 
Back To NeHe Productions!
回到 OpenGL 教學索引
中文版由 Macbear 翻譯