資源簡介
利用OpenGL 實現時鐘的繪制,要求具有秒針,分針和時針的運動效果,并實現系統時間的調用

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#define?PI?3.1415926
GLfloat?hourminsec;
void?GetTime() //調用系統時間
{??
????time_t?tt?=?time(NULL);??
????tm?*t?=?localtime(&tt);??
????hour?=?t->tm_hour;??
min?=?t->tm_min;??
????sec?=?t->tm_sec;??
}?
void?Display(void)?
{
glClear(GL_COLOR_BUFFER_BIT?|?GL_DEPTH_BUFFER_BIT);?
glLineWidth(5);
GLfloat?iangle;???
GLint?circle_points?=?360;??
GLint?circle_point?=?60;??????
glBegin(GL_LINE_LOOP); //畫時鐘外圈
for?(i?=?0;?i? {?????
angle?=?2*PI*i/circle_points;??????
glVertex2f(100*cos(angle)?100*sin(angle));??
}??????
glEnd();
glBegin(GL_LINE_LOOP); //畫原點
for?(i?=?0;?i? {?????
angle?=?2*PI*i/circle_points;?????
glVertex2f(cos(angle)?sin(angle));??
}??????
glEnd();
glMatrixMode(GL_MODELVIEW);??
glLoadIdentity();?????
??? glPointSize(1);??????
glBegin(GL_POINTS); //分針刻度
for?(i?=?0;?i? {?????
angle?=?2*PI*i/circle_point;??????
glVertex2f(95*cos(angle)?95*sin(angle));??
}??????
glEnd();
glMatrixMode(GL_MODELVIEW);??
glLoadIdentity();?
??? glPointSize(5);??????????????????
??? glBegin(GL_POINTS); //時針刻度
for?(i?=?0;?i?12;?i++)?
{?????
angle?=?2*PI*i/12;??????
glVertex2f(95*cos(angle)?95*sin(angle));??
}??????
glEnd();
GetTime();
glMatrixMode(GL_MODELVIEW);??
glLoadIdentity();?
??? glColor3f(1.f1.f0.f); //畫秒針??
glPushMatrix();
?? glRotatef(sec/60*360?0.0f?0.0f?-1.0f);?
glTranslatef(0.0f?-10.0f?0.0f);
glBegin(GL_TRIANGLES);?
?? glVertex3f(0?100?0);??
glVertex3f(-1?0?0);??
glVertex3f(1?0?0);
glEnd();
glPopMatrix();
?? glColor3f(1.0f0.0f0.0f); //畫分針
glPushMatrix();??
??? glRotatef(min/60*360+sec/60*360/60?0.0f?0.0f?-1.0f);??
glTranslatef(0.0f?-10.0f?0.0f);
glBegin(GL_TRIANGLES);?
?? glVertex3f(0?80?0);??
glVertex3f(-1?0?0);??
glVertex3f(1?0?0);??
glEnd();??
glPopMatrix();
glColor3f(0.f0.f1.f); //畫時針
glPushMatrix();
?? glRotatef(hour/12*360+min/60*360/12+sec/60/60*360/12?0.0f?0.0f?-1.0f);??
glTranslatef(0.0f?-10.0f?0.0f);?
glBegin(GL_TRIANGLES);??
glVertex3f(0?60?0);??
glVertex3f(-1?0?0);??
glVertex3f(1?0?0);??
glEnd();??
glPopMatrix();
glutSwapBuffers();
}??
void?Init()?
{???
glEnable(GL_DEPTH_TEST);
?? glClearColor(0.0f?0.0f?0.0f?1.0f?);??
}?
void?GLTimer(int?value)?
{ ??????
glutPostRedisplay();??????
glutTimerFunc(1000?GLTimer?1);?
}??
void?Reshape(int?w?int?h)?
{??????
GLfloat?nRange?=?100.0f;?
if(h?==?0)
h?=?1;?
glViewport(0?0?w?h);?
glMatrixMode(GL_PROJECTION);?????
glLoadIdentity();?
?????? if?(w?<=?h)?
?????????? glOrtho?(-nRange?nRange?-nRange*h/w?nRange*h/w?nRange*2.0f?-nRange*2.0f);??????
else?
?????????? glOrtho?(-nRange*w/h?nRange*w/h?-nRange?nRange?nRange*2.0f?-nRange*2.0f);?
?????? glMatrixMode(GL_MODE
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3421??2015-05-05?14:04??時鐘繪制\時鐘.cpp
?????文件??????33792??2015-05-05?10:59??時鐘繪制\時鐘.exe
?????文件??????58062??2015-05-05?11:59??時鐘繪制\時鐘.PNG
?????目錄??????????0??2015-05-10?23:14??時鐘繪制
-----------?---------??----------?-----??----
????????????????95275????????????????????4
- 上一篇:關于PCI9054的信號引腳說明
- 下一篇:運動的自行車OpenGL
評論
共有 條評論