OpenGL基础图形的绘制

例一:绘制五角星

设五角星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个点将被画为虚的。

 

posted @ 2015-09-24 15:24  SeeKHit  阅读(509)  评论(0编辑  收藏  举报