计算机图形与OpenGL学习二(输出图元3:OpenGL的多边形填充函数)
OpenGL的多边形填充函数部分
注:以下所描述的代码都不是完整代码,只是核心代码。
【填充函数概述】
① glBegin()到glEnd()之间的一组点描述多边形。
② 多边形内部默认填充当前设定颜色的单色,也可填充图案
③ glBegin()中可使用6个不同的符号常量,以改变填充方式
④ 填充区必须指定为凸多边形。
⑤ 前向面和后相面,可以分别设定填充颜色和其他属性。
⑥ 矩形填充区可使用glRect*(x1,y1,x2,y2);更方便的操作
【填充函数实际操作】
【矩形函数的使用】
格式:glRect*(x1,y1,x2,y2);(x1,y1)与(x2,y2)为对角线上两个点
实例:
int p1[]= {200,100};
int p2[] = {50,250};
glRectiv(p1, p2);
结果:
【多边形填充函数的使用】
①使用GL_POLYGON命令,可以显示单个多边形。该多边形由一组点,按逆时针次序构造,每一点用(x,y)坐标值表示。
实例:
int p1[]= {80,10};
int p2[] = {210,10};
int p3[] = {270,150};
int p4[] = {210,280 };
int p5[] = {80, 280};
int p6[] = {20,150};
glBegin(GL_POLYGON);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
glEnd();
结果:
②使用GL_TRIANGLES命令进行三角形填充
实例:
int p1[]= {80,10};
int p2[] = {210,10};
int p3[] = {270,150};
int p4[] = {210,280 };
int p5[] = {80, 280};
int p6[] = {20,150};
glBegin(GL_TRIANGLES);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);//前三个点形成一个三角形
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);//后三个点形成一个三角形
glEnd();结果:
③使用GL_TRIANGLE_STRIP画相连的三角形
int p1[]= {80,10};
int p2[] = {210,10};
int p3[] = {270,150};
int p4[] = {210,280 };
int p5[] = {80, 280};
int p6[] = {20,150};
glBegin(GL_TRIANGLE_STRIP);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
glEnd();
(p1,p2,p3)组成以三角形->(p2,p3p,4)->(p3->p4->p5)…..
N个顶点的集合可以形成N-2个三角形带
④使用GL_TRIANGLE_FAN构造“扇形”三角区
以第一个列出的顶点为每一个三角形的共享顶点。
连接次序为(p1,p2,p3)->(p1,p3,p4)->(p1,p4,p5)….
int p1[]= {80,10};
int p2[] = {210,10};
int p3[] = {270,150};
int p4[] = {210,280 };
int p5[] = {80, 280};
int p6[] = {20,150};
glBegin(GL_TRIANGLE_FAN);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
glEnd();
⑤使用GL_QUADS进行四边形填充
依次从顶点中选择四个顶点,逆时针顺序连接成一个四边形。
实例:
int p1[] = { 20, 200 };
int p2[] = { 40, 20 };
int p3[] = { 120, 20 };
int p4[] = { 100, 170 };
int p5[] = { 180, 180 };
int p6[] = { 180, 40 };
int p7[] = { 250, 10 };
int p8[] = { 240, 280 };
glBegin(GL_QUADS);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glVertex2iv(p6);
glVertex2iv(p7);
glVertex2iv(p8);
glEnd();
结果:
⑥使用GL_QUAD_STRIP构造连接四边形
先先指定两个顶点后,每个四边形再用两个顶点指定,依次进行。
实例:
int p1[] = { 20, 200 };
int p2[] = { 40, 20 };
int p3[] = { 120, 20 };
int p4[] = { 100, 170 };
int p5[] = { 180, 180 };
int p6[] = { 180, 40 };
int p7[] = { 250, 10 };
int p8[] = { 240, 280 };
glBegin(GL_QUAD_STRIP);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p4);
glVertex2iv(p3);
glVertex2iv(p5);
glVertex2iv(p6);
glVertex2iv(p8);
glVertex2iv(p7);
glEnd();
结果: