资源简介
利用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 < circle_points; i++)
{
angle = 2*PI*i/circle_points;
glVertex2f(100*cos(angle) 100*sin(angle));
}
glEnd();
glBegin(GL_LINE_LOOP); //画原点
for (i = 0; i < circle_points; 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 < circle_point; 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
相关资源
- 运动的自行车OpenGL
- opengl几个经典程序
- Foundations Of 3D Computer Graphics (高清P
- OpenGL图形绘制.doc
- glut.lib glut32.lib opengl.lib opengl32.lib gl
- openGl绘制茶壶纹理
- opengl math3d
- opengl实现的光线跟踪
- 利用OpenGL实现屏幕坐标与世界坐标的
- OpenGL画花瓶,可以填充,选择颜色 代
- 基于OpenGL的B样条曲线曲面的绘制
- 基于OpenGL虚拟校园漫游系统的设计与
- 用OPENGL读取MS3D文件
- OpenGL安装文件及安装方法
- openGL Matrix类的实现,包括和四元数、
- OPENGL五角星
- opengl雪花代码
- OpenGL的B样条、贝塞尔曲线和贝塞尔曲
- opengl\\雷达三维成像和雷达视觉
- 用opengl编写的一个小游戏
- openGL 模拟太阳系行星自转公转
- 读取DXF文件并在OpenGL中显示.
- 用VC opengl 绘制的一个房屋轮廓
- opengl类库大全glaux.lib;glu.lib;glu32.lib;
- OpenGL实现的3D魔方
- OPenGL中绘制茶杯模型
- 刚学的OpenGL画五角星
- Qt自定义继承QOpenGLWidget的类进行绘图
- 读取obj文件含顶点法线,2013编译通过
- OpenGL画树的代码
评论
共有 条评论