//在linux下直接建个.c文档 把代码cp进去。然后保存 进入目录用 gcc -lglut -o 名字 名字.c编译用./名字 运行

 

#include <GL/glut.h>
#include <math.h>

GLfloat pi=3.141592654; //声明的圆周率
GLfloat xz=0.1,yz=0.1;  //xz、yz用于旋转以及颜色变换

//所有的你都可以改颜色搭配阿 大小搭配阿之类

//画依次呈现螺旋增大的点     (看到opengl开发宝典上一个例子然后把他改了)
void drawSpiralpoint(GLint n,GLfloat add,GLfloat initx,GLfloat inity, GLfloat initz)
{
 GLfloat dx,dy,dz,angle,sizes[2],step,curSize; //用于画点
 glGetFloatv(GL_POINT_SIZE_RANGE,sizes);
 glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);
 curSize=sizes[0];
 dz=initz;
 for(angle=0.0;angle<2*pi*n;angle+=0.1)
 {
  
  dx=initx*sin(angle);
  dy=inity*cos(angle);
  glPointSize(curSize);
  glBegin(GL_POINTS);
   //glColor3f(yz,xz,xz*yz);
   glVertex3f(dx,dy,dz);
  glEnd();
  dz+=add;
  curSize+=step;
 }
}

//角度换成弧度
GLfloat gethd(GLfloat jd)
{
 GLfloat hd;
 hd=(GLfloat)2.0*pi*(jd/360.0);
 return hd;
}

//画正五角星的函数
void drawFPS(GLfloat wjwb,GLfloat zxx,GLfloat zxy,GLfloat zxz)
{
 
 glBegin(GL_LINE_LOOP);
  glVertex3f(wjwb/2-wjwb/2+zxx,wjwb/2*tan(gethd(72))-wjwb/2*tan(gethd(54))+zxy,zxz);//v1
  glVertex3f(-wjwb/2+zxx,-wjwb/2*tan(gethd(54))+zxy,zxz);//v2
  glVertex3f(wjwb+wjwb*cos(gethd(72))-wjwb/2+zxx,wjwb*sin(gethd(72))-wjwb/2*tan(gethd(54))+zxy,zxz);//v3
  glVertex3f((-wjwb*cos(gethd(72)))-wjwb/2+zxx,wjwb*sin(gethd(72))-wjwb/2*tan(gethd(54))+zxy,zxz);//v4
  glVertex3f(wjwb-wjwb/2+zxx,0-wjwb/2*tan(gethd(54))+zxy,zxz);//v5
 glEnd();
}


//画依次呈现螺旋增大的五角星
void drawwjx(GLint n,GLfloat add,GLfloat initx,GLfloat inity, GLfloat initz)
{
 
 GLfloat dx,dy,dz,angle; //用于画点
 dz=initz;
 for(angle=0.0;angle<2*pi*n;angle+=0.1)
 {
  dx=initx*sin(angle);
  dy=inity*cos(angle);
  drawFPS(2,dx,dy,dz);//画五角星
  dz+=add;
 }
}

//绘图
void display()
{
 //清除缓存
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

 glRotatef(xz,1.0f,0.0f,0.0f);
 glRotatef(yz,0.0f,1.0f,0.0f); 

 glPushMatrix;
  glColor3f(1.0f,1.0f,1.0f); //设定画笔颜色
  //drawSpiralpoint(3,0.6,50.0,-50.0,-50.0); //画万恶的螺旋状的点
  drawwjx(3,0.6,50.0,-50.0,-50.0);  //画依次呈现螺旋增大的五角星
 glPopMatrix;

 
 
 if(yz>=1.0) yz=0.1;
 else yz+=0.01;
 if(xz>=1.0) xz=0.1;
 else xz+=0.01;
 glutSwapBuffers();
}

//一个时间的回调
void TimerFunc(GLint date)
{
 glutPostRedisplay();
 glutTimerFunc(50,TimerFunc,1);
}

//窗体大小变换
void Reshape(GLsizei w,GLsizei h)
{
 //要求H不能为0
 if(h<=0) h=1;
 glViewport(0,0,w,h);//设置视口大小
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glOrtho(-150,150,-150,150,-150,150);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

//程序入口点
int main(int ac,char** av)
{
 glutInit(&ac,av);
 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
 glutCreateWindow("lx");
 glClearColor(0.0,0.0,0.0,1.0);
 glutDisplayFunc(display);
 glutReshapeFunc(Reshape);
 glutTimerFunc(50, TimerFunc, 1);
 glutMainLoop();
return 0; 
}