第二章好長,內容好多,講的好泛。
我們暫時先把main函數拋開不看,簡單看看我們如何在display()和myReshape函數中加班。。
首先,這個函數是一個被回調的函數,沒有返回值。因爲,glutDisplayFunc()函數會把它的返回值忽略掉。
然後,我們何如開始填充一下這個display()函數:
1 OpenGL根據點來畫圖。
所有點都包含在glBegin(int mode) 和 glEnd()函數之間。
glBegin函數的參數mode 指明要畫的是什麼,可以是點GL_POINTS,可以是線GL_LINES,可以是多邊形GL_POLYGON等等。具體請自行查閱
glBegin(GL_TRIANGLES);//畫三角形
glVertex2f(-1.0,-1.0);//設置第一個頂點的座標爲(-1.0,-1.0)
glVertex2f(1.0,-1.0);//設置第二個頂點的座標爲(0.0,-1.0)
glVertex2f(0.0,1.0);//設置第三個頂點的座標爲(-0.5,1.0)
glEnd();//三角形結束
當然,如果你希望他是有顏色的:
glBegin(GL_TRIANGLES);//開始畫三角形
glColor3f(1.0,0.0,0.0);//設置第一個頂點爲紅色
glVertex2f(-1.0,-1.0);
glColor3f(0.0,1.0,0.0);//設置第二個頂點爲綠色
glVertex2f(1.0,-1.0);
glColor3f(0.0,0.0,1.0);//設置第三個頂點爲藍色
glVertex2f(0.0,1.0);
glEnd();//三角形結束
說明一下glVertex2f()函數:
從函數名來看,他來自gl庫(gl前綴),描述了一個頂點(Vertex),需要傳入兩個float參數(2f).
再來看看參數,我傳入的是1.0個-1.0的組合,完整程序編譯運行後,三角形的三個頂點都是頂在窗口邊上的(如果沒有改變默認透視,視口,也沒有剪裁的話)
這說明,默認情況下,窗口中心未原點,窗口四個頂點的位置分別是(-1, -1), (-1, 1), (1, 1), (1, -1)。
好的,display函數暫時填充如下
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);//buffer設置爲顏色可寫
glBegin(GL_TRIANGLES);//開始畫三角形
glColor3f(1.0,0.0,0.0);//設置第一個頂點爲紅色
glVertex2f(-1.0,-1.0);//設置第一個頂點的座標爲(-1.0,-1.0)
glColor3f(0.0,1.0,0.0);//設置第二個頂點爲綠色
glVertex2f(1.0,-1.0);//設置第二個頂點的座標爲(0.0,-1.0)
glColor3f(0.0,0.0,1.0);//設置第三個頂點爲藍色
glVertex2f(0.0,1.0);//設置第三個頂點的座標爲(-0.5,1.0)
glEnd();//三角形結束
glFlush();//強制OpenGL將結果呈現到屏幕上。
}
接着,我們填充一下myReshape函數
說說視口glViewPort(Glint x, Glint y, Glint w, Glint h)函數
視口是什麼,來類比一下gluCreateWindow()函數就明白了。gluCreateWindow函數是在屏幕上畫出一個窗口,用來顯示我們的花花草草。
那麼同樣的道理,glViewPort()就是在窗口中再摳一片地,專門用來顯示我們的某次加班成果,,
可以在窗口中定義不同的視口,以顯示我們卓越的加班成果。
參數x,y定義了視口的左下角座標。w,h定義了視口寬和高。
myReshape函數也暫時填充如下
void myReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);//設置視口
}
記住,這些填充都是暫時的,,太餓,我決定,去吃個飯,,