#include<glut.h>
#include<stdlib.h>
#include<math.h>
const GLdouble twopi = 6.283185;
GLubyte label[]={'1','2','3','4','5',
'6','7','8','9','1','0','1','1','1','2'};
void init (void)
{
glClearColor(1.0,1.0,1.0,0.0);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,600.0,0.0,500.0);
}
//------------------------------
void clock(void)
{
glClear (GL_COLOR_BUFFER_BIT);
GLint r=500/4;
//----------------------------------内部颜色
glColor3f(0.9,0.9,0.9);
glBegin(GL_TRIANGLE_FAN);
// glVertex2f(300,250);
for(int i=0;i<1000000;i++)
{
GLdouble t=i*twopi/1000000;
glVertex2i(300-r*cos(t),250+r*sin(t));
}
glEnd();
//---------------------------------------------------------外部框
glColor3f(0.0,0.0,0.0);
glLineWidth(8.0);
glBegin(GL_LINE_LOOP);
for(i=0;i<1000000;i++)
{
GLdouble t=i*twopi/10000;
glVertex2f(300+r * cos(t),250+r * sin(t));
}
glEnd();
//----------------------------------------------------------点
glColor3f(0.0,0.0,0.0);
glPointSize(3.5);
glBegin(GL_POINTS);
for(i=0;i<12;i++)
{
GLdouble t=i*twopi/12;
glVertex2i(300+(r-10)*cos(t),250+(r-10)*sin(t));
}
glPointSize(4.5);
glVertex2i(300,250);
glEnd();
//---------------------------小点
glPointSize(1.5);
glBegin(GL_POINTS);
for(i=0;i<60;i++)
{
GLdouble t=i*twopi/60;
glVertex2i(300+(r-10)*cos(t),250+(r-10)*sin(t));
}
glEnd();
//--------------------------------------------------------------文字
glColor3f(0.0,0.0,0.0);
GLint k=0;
for(i=2;i>=-6;i--)
{
GLdouble t=i*twopi/12;
glRasterPos2i(297+(r-23)*cos(t),246+(r-23)*sin(t));
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,label[k]);
k++;
}
//--------
for(i=-7;i>=-9;i--)
{
GLdouble t=i*twopi/12;
glRasterPos2i(297+(r-23)*cos(t),246+(r-23)*sin(t));
for(GLint j=k;j<k+2;j++)
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,label[j]);
k+=2;
}
//-------------------------------------------------------------------时针
glColor3f(0.0,0.0,0.0);
glLineWidth(1.0);
glBegin(GL_LINES);
GLdouble t=-twopi/3;
glVertex2i(300,250);
glVertex2i(300+(r-30)*cos(t),250+(r-30)*sin(t));
glEnd();
//----------
glColor3f(0.0,0.0,0.0);
glLineWidth(2.5);
glBegin(GL_LINES);
t=twopi/12.1;
glVertex2i(300,250);
glVertex2i(300+(r-40)*cos(t),250+(r-40)*sin(t));
glEnd();
glColor3f(0.0,0.0,0.0);
glLineWidth(4.0);
glBegin(GL_LINES);
t=twopi/2.42;
glVertex2i(300,250);
glVertex2i(300+(r-55)*cos(t),250+(r-55)*sin(t));
glEnd();
glFlush();
}
//------------------------------
void main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(600,500);
glutCreateWindow("实验一:自由发挥");
init();
glutDisplayFunc(clock);
glutMainLoop();
}
openGL / 绘制钟表
最新推荐文章于 2023-11-14 21:01:51 发布