《OpenGL編程基礎》第二章筆記1

第二章好長,內容好多,講的好泛。

我們暫時先把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);//設置視口
}


記住,這些填充都是暫時的,,太餓,我決定,去吃個飯,,




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章