//在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;
}