例一:绘制五角星
设五角星5个顶点分别为ABCDE,顶点到坐标轴原点距离为r,ABCDE各点用r表示,分别为
A(0,r);
B(-r*sin(2/5*Pi),r*cos(2/5*Pi));
C(-r*sin(Pi/5),-r*cos(Pi/5));
DE和CB关于Y轴对称。
确定5个顶点的坐标后,使用GL_LINE_LOOP函数,将5个点连接起来,顺序依次为ACEBD。
主要代码为:
1 void Star(void) 2 { 3 4 GLfloat r = 0.8f; 5 GLfloat PointA[2] = { 0, r }; 6 GLfloat PointB[2] = { -r*sin(0.4*Pi), r*cos(0.4*Pi) }; 7 GLfloat PointC[2] = { -r*sin(Pi / 5), -r*cos(Pi / 5) }; 8 GLfloat PointD[2] = { r*sin(Pi / 5), -r*cos(Pi / 5) }; 9 GLfloat PointE[2] = { r*sin(0.4*Pi), r*cos(0.4*Pi) }; 10 11 glClear(GL_COLOR_BUFFER_BIT); 12 13 glBegin(GL_LINE_LOOP); 14 glVertex2fv(PointA); 15 glVertex2fv(PointC); 16 glVertex2fv(PointE); 17 glVertex2fv(PointB); 18 glVertex2fv(PointD); 19 20 glEnd(); 21 22 glFinish(); 23 }
绘制成果如下:
例二:正弦函数绘制
先用GL_LINES,4个坐标点,将坐标轴绘制出来,再绘制出正弦函数。
1 void Sin(void) 2 { 3 4 const float x = 0.1f;//默认坐标值从—1到1,,所以为了绘制完全,设定一个缩放的因子x 5 glClear(GL_COLOR_BUFFER_BIT); 6 7 glBegin(GL_LINES); 8 glVertex2f(0, -1.0f); 9 glVertex2f(0, 1.0f); 10 glVertex2f(1.0f, 0); 11 glVertex2f(-1.0f, 0); 12 13 //glEnd; 14 15 glBegin(GL_LINE_STRIP); 16 for(float i = -10; i < 10; i+= 0.01 ){ 17 glVertex2f(i*x,0.5*sin(i)); 18 } 19 20 glEnd(); 21 22 glFinish(); 23 }
补充:
点的大小,线的粗细,实线虚线。
glPointSize(),和glLineWidth(),默认都为1个像素,可以设置点的大小,和线的粗细,(注:需在glBegin前设置好)
glEnable(GL_LINE_STIPPLE);//启用虚线
glDisable(GL_LINE_STIPPLE);//关闭虚线
glLineStipple(GLint factor, GLushort pattern);
pattern是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。