函數(shù)原型:
void glBegin(GLenummode)
void glEnd(void)
參數(shù)說(shuō)明:
mode:創(chuàng)建圖元的類型??梢允且韵聰?shù)值
GL_POINTS:把每一個(gè)頂點(diǎn)作為一個(gè)點(diǎn)進(jìn)行處理,頂點(diǎn)n即定義了點(diǎn)n,共繪制N個(gè)點(diǎn)
GL_LINES:把每一個(gè)頂點(diǎn)作為一個(gè)獨(dú)立的線段,頂點(diǎn)2n-1和2n之間共定義了n條線段,總共繪制N/2條線段
GL_LINE_STRIP:繪制從第一個(gè)頂點(diǎn)到最后一個(gè)頂點(diǎn)依次相連的一組線段,第n和n+1個(gè)頂點(diǎn)定義了線段n,總共繪制n-1條線段
GL_LINE_LOOP:繪制從第一個(gè)頂點(diǎn)到最后一個(gè)頂點(diǎn)依次相連的一組線段,然后最后一個(gè)頂點(diǎn)和第一個(gè)頂點(diǎn)相連,第n和n+1個(gè)頂點(diǎn)定義了線段n,總共繪制n條線段
GL_TRIANGLES:把每個(gè)頂點(diǎn)作為一個(gè)獨(dú)立的三角形,頂點(diǎn)3n-2、3n-1和3n定義了第n個(gè)三角形,總共繪制N/3個(gè)三角形
GL_TRIANGLE_STRIP:繪制一組相連的三角形,對(duì)于奇數(shù)n,頂點(diǎn)n、n+1和n+2定義了第n個(gè)三角形;對(duì)于偶數(shù)n,頂點(diǎn)n+1、n和n+2定義了第n個(gè)三角形,總共繪制N-2個(gè)三角形
GL_TRIANGLE_FAN:繪制一組相連的三角形,三角形是由第一個(gè)頂點(diǎn)及其后給定的頂點(diǎn)確定,頂點(diǎn)1、n+1和n+2定義了第n個(gè)三角形,總共繪制N-2個(gè)三角形
GL_QUADS:繪制由四個(gè)頂點(diǎn)組成的一組單獨(dú)的四邊形。頂點(diǎn)4n-3、4n-2、4n-1和4n定義了第n個(gè)四邊形。總共繪制N/4個(gè)四邊形
GL_QUAD_STRIP:繪制一組相連的四邊形。每個(gè)四邊形是由一對(duì)頂點(diǎn)及其后給定的一對(duì)頂點(diǎn)共同確定的。頂點(diǎn)2n-1、2n、2n+2和2n+1定義了第n個(gè)四邊形,總共繪制N/2-1個(gè)四邊形
GL_POLYGON:繪制一個(gè)凸多邊形。頂點(diǎn)1到n定義了這個(gè)多邊形。
函數(shù)說(shuō)明:
glBegin和glEnd函數(shù)限定了一組或多組圖元的定點(diǎn)定義。
1.在glBegin()和glEnd()之間可調(diào)用的函數(shù)
函數(shù) 函數(shù)意義
glVertex*() 設(shè)置頂點(diǎn)坐標(biāo)
glColor*() 設(shè)置當(dāng)前顏色
glIndex*() 設(shè)置當(dāng)前顏色表
glNormal*() 設(shè)置法向坐標(biāo)
glEvalCoord*() 產(chǎn)生坐標(biāo)
glCallList(),glCallLists() 執(zhí)行顯示列表
glTexCoord*() 設(shè)置紋理坐標(biāo)
glEdgeFlag*() 控制邊界繪制
glMaterial*() 設(shè)置材質(zhì)
表7-2 在glBegin()和glEnd()之間可調(diào)用的函數(shù)
glVertex3f()表示了該函數(shù)屬于 gl庫(kù),參數(shù)是三個(gè)float型參數(shù)指針。我們用glVertex*()來(lái)表示這一類函數(shù)。
基本庫(kù)
2.幾何圖元類型和說(shuō)明
類型 說(shuō)明
GL_POINTS 單個(gè)頂點(diǎn)集
GL_LINES 多組雙頂點(diǎn)線段
GL_POLYGON 單個(gè)簡(jiǎn)單填充凸多邊形
GL_TRIANGLES 多組獨(dú)立填充三角形
GL_QUADS 多組獨(dú)立填充四邊形
GL_LINE_STRIP 不閉合折線
GL_LINE_LOOP 閉合折線
GL_TRIANGLE_STRIP 線型連續(xù)填充三角形串
GL_TRIANGLE_FAN 扇形連續(xù)填充三角形串
GL_QUAD_STRIP 連續(xù)填充四邊形串
glBegin()與glEnd()函數(shù)使用注意點(diǎn):
在OpenGL最初的定義中,幾何對(duì)象數(shù)據(jù)的輸入是通過(guò)調(diào)用glBegin()和glEnd()接口對(duì)來(lái)實(shí)現(xiàn)的。glBegin()的參數(shù)表示其下所接收的數(shù)據(jù)是何種類型,如點(diǎn),線段,三角型,扇形三角行,多邊形等等。
而如glTranslatef(), glScalef(), glRotatef()等接口的作用是對(duì)當(dāng)前模型空間進(jìn)行幾何轉(zhuǎn)換。如glTranslatef(1,2,3);表示把模型的世界坐標(biāo)原點(diǎn)從當(dāng)前位置(系統(tǒng)總認(rèn)為是(0,0,0))轉(zhuǎn)到起相對(duì)位置(1,2,3)。注意,OpenGL空間使用的是右手系的定義,與屏幕水平方向一致,并方向向右的是x軸;與屏幕方向垂直方向一致,并方向向上的是y軸;與屏幕屏幕垂直,方向向外的是z軸。
glTranslatef()等此類幾何轉(zhuǎn)換接口在glBegin()和glEnd()之間是無(wú)效的。因此,如果想對(duì)模型的位置進(jìn)行轉(zhuǎn)換,要在調(diào)用glBegin()和glEnd()接口對(duì)之前行處理。這是許多初學(xué)者特別容易犯錯(cuò)的地方,而且這個(gè)錯(cuò)誤不容易找出來(lái)。
例如,以下的代碼,并不會(huì)把模型的位置進(jìn)行轉(zhuǎn)移:
glBegin(GL_TRIANGLES)
glTranslatef(1,2,3);
render model......
glEnd()
而應(yīng)該這樣調(diào)用:
glTranslatef(1,2,3);
glBegin(GL_TRIANGLES)
render model......
glEnd()