glBegin函數還提供了以下幾個參數來畫出凸多邊形。所謂凸多邊形,是指它要滿足如下性質:把該多邊形任意一邊向兩方無限延長成為一條直線後,其他各邊均在此直線的同側。
(1)GL_POLYGON,這個參數用後面的頂點列表畫出一個凸多邊形。
例子代碼:
void display(void){glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON);glVertex2f(-0.5, -0.5); //點P1,左下角glVertex2f(-0.5, 0.5); //點P2,左上方glVertex2f(0.5, 0.5); //點P3,右上方 glVertex2f(0.5, -0.5); //點P4,右下角glEnd();glFlush(); }
運行效果如1所示:(紅色文字為我所加,不是實際運行效果,下同)
圖1 內部填充為白色的矩形
預設情況下,opengl在畫多邊形時,會自動用指定顏色(預設為白色)填充其內部。如果想只顯示多邊形的邊線而不填充其內部,可以在glBegin函數之前加上一句
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 這個語句的作用告訴opengl只畫出邊框,但不填充內部。運行效果如下:
圖 2 矩形線框
本節中後面的例子都設定為線框模式,不再贅述。
(2)GL_TRIANGLES ,將每3個頂點為一組畫出一個三角形,如果剩餘的頂點個數不足3個則忽略。運行效果如下所示:
(3)GL_TRIANGLES_STRIP 於GL_LINE_STRIP類似,畫出頂點列表中所有由任意連續三點所組成的三角形。在本例裡即依次畫出三角形P1P2P3, P2P3P4 運行效果如下所示。
(4)GL_TRIANGLE_FAN
所有三角形都以第一點為頂點,另外兩個頂點為連續頂點。即畫出P1P2P3,P1P3P4。效果如下所示:
(5) GL_QUADS:每4個頂點為一組畫出一個四邊形。如果剩餘點數不足4個,則忽略。
(6) GL_QUAD_STRIP:每兩個頂點為一組,任意連續的兩組畫出一個四邊形。如果有8個點為P1到P8,則最後畫出3個4邊形:
P1P2P3P4,
P3P4P5P6,
P5P6P7P8。
opengl還提供了一個直接畫矩形的函數系列
glRect[sifd],中括弧裡的字元代表參數類型
s:short 短整型
i:integet 整型
f:float浮點型
d:double 雙精確度型。
例如下面的代碼畫出一個矩形框,左下角為(-0.5,-0.5),右上方為(0.5, 0.5)
void display(void){ glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glRectf(-0.5f,-0.5f,0.5f,0.5f);glFlush(); }
效果和上面的圖2類似。