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类似。