#include <windows.h>
#include <GL/gl.h>
#include<GL/glu.h>
#include <GL/glaux.h>
#include <stdlib.h>
#include<math.h>
//清除屏幕,设置当前颜色为白色
//绘制一个线框模式的正方体
void CALLBACK display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,1.0,1.0);
glLoadIdentity();//装入单位矩阵
glTranslatef(0.0,0.0,10.0);//平移矩阵
glScalef(100,100,100);//模型变换
//画螺旋线
float x1=0,y1=1.0,x2,y2;
double r=0.1;
for(double i=0;i<100;i+=0.3,r+=0.003)
{
//glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();//装入单位矩阵
glTranslatef(-x1,-y1,-20.0);
//auxSolidSphere(r);
int num=40;
float b=r, a1=1.8*b, a2=0.9*b;
float step=2*b/num;
float y=-b,x=0.0;
glBegin(GL_LINE_LOOP);
for ( int j=0;j<num;j++)
{
glVertex2f(x,y);
y+=step;
x=sqrt((a2*a2)-(a2*y/b)*(a2*y/b));
}
y=b,x=0;
for (j=0;j<num;j++)
{
glVertex2f(x,y);
y-=step;
x=-sqrt((a1*a1)-(a1*y/b)*(a1*y/b));
}
glEnd();
x2=(float)(exp(0.05*i)*sin(i));
y2=(float)(exp(0.05*i)*cos(i));
/* glBegin(GL_LINE_STRIP);
glVertex3f(x1,y1,0.0);
glVertex3f(x2,y2,0.0);
glEnd();
*/
x1=x2;
y1=y2;
glFlush();
}
}
//进行必要的初始化工作
void myinit(void)
{
glShadeModel(GL_FLAT);
}
//在窗口第一次创建时以及每次改变窗口大小或移动位置时调用此函数
void CALLBACK myReshape(int w ,int h)
{
glMatrixMode(GL_PROJECTION);//设置矩阵模式为投影模式
glLoadIdentity();// 装入单位矩阵
glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0);//投影变换
glMatrixMode(GL_MODELVIEW);//返回模型视图
glViewport(0,0,w,h); //定义视口
}
//主循环
//给定窗口的初始大小,标题打开一个窗口
//设置为RGBA显示模式,并处理输入信息
void main(int argc, char ** argv)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGB);
auxInitPosition(0,0,800,800);
auxInitWindow(argv[0]);
myinit();
auxReshapeFunc(myReshape);
auxMainLoop(display);
}