OpenGL时钟显示

本文显示一个时钟,代码基于NeHe框架之上。

图上传不了,主要思想是在DrawGLScene里获取当前系统时间,绘制一个圆和各个时针。

简单说一下实现方法。

1,#include <math.h><time.h>,因为要用到sinf和cosf函数,还要获取系统时间。

2,定义PI为3.1415926536f,定义全局变量hour, min, sec(小时,分,秒)。

3,定义几个函数,如下:

/* * GetTime * 获取当前时间 */ void GetTime() { time_t tt = time(NULL); struct tm *t = localtime(&tt); hour = t->tm_hour; min = t->tm_min; sec = t->tm_sec; }

/* * DrawCircle * 画一个圆,半径r,圆由n个线段组成 */ int DrawCircle(float r, int n) { int i = 0; float t = 2 * PI / n; float x, y; // 圆框 glColor3f(0.0f, 1.0f, 0.0f); glBegin(GL_LINE_LOOP); for (i=0; i<n; i++) { x = r * sinf(t * i); y = r * cosf(t * i); glVertex2f(x, y); } glEnd(); // 正点 t = 2 * PI / 12; glBegin(GL_LINES); for (i=0; i<12; i++) { x = r * sinf(t * i); y = r * cosf(t * i); glVertex2f(x, y); // 3点、6点、9点、12点,线段长点 if (i % 3 == 0) glVertex2f(0.9f * x, 0.9f * y); else glVertex2f(0.95f * x, 0.95f * y); } glEnd(); return 1; }

/* * DrawPointer * 根据长度和角度画线段 */ void DrawPointer(float len, float a) { float x, y; x = len * sinf(a); y = len * cosf(a); glBegin(GL_LINES); glVertex2f(0.0f, 0.0f); glVertex2f(x, y); glEnd(); } /* * DrawPointers * 根据半径画秒针、分针和时针 */ void DrawPointers(float r) { float a; // 角度 // 秒针 a = 2 * PI / 60 * sec; glColor3f(1.0f, 0.0f, 0.0f); DrawPointer(0.8f * r, a); // 分针 a = 2 * PI / 60 * min; glColor3f(1.0f, 0.0f, 1.0f); DrawPointer(0.6f * r, a); // 时针 a = 2 * PI / 12 * hour; glColor3f(1.0f, 1.0f, 0.0f); DrawPointer(0.4f * r, a); }

4,在DrawGLScene里调用上面几个函数即可:

glTranslatef(0.0f, 0.0f, -6.0f);
 GetTime();
 DrawCircle(1.8f, 360);// 半径为1.8f
 DrawPointers(1.8f);

 

圆是由一组线段组成,线段越多,圆越精确。每条线段由2个点组成,点的坐标由半径和角度(与x轴正向夹角)决定。

源码http://download.csdn.net/source/1975142

你可能感兴趣的:(框架,struct,null,360,float)