#include <windows.h>
#include <GL/glut.h>//本来OpenGL程序一般还要包含<GL/gl.h>和<GL/glu.h>,
//但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。
#include <math.h>
#include<time.h> const GLfloat Pi = 3.1415926536;
const GLfloat R=0.8f;
const int n=;
static GLfloat angle=*Pi; float Mysecond(struct tm *ptr)
{
return ((Pi/)-(((float)ptr->tm_sec)/)**Pi);
} float Mymin(struct tm *ptr)
{
//return (Pi/2)-(((ptr->tm_min+(((float)ptr->tm_sec)/60))/60)*2*Pi);
return ((Pi/)-((ptr->tm_min+ptr->tm_sec/60.0)/)**Pi);
}; float Myhour(struct tm *ptr)
{
if(<ptr->tm_hour&&ptr->tm_hour<)
{
return ((Pi/)-((float)ptr->tm_hour+ptr->tm_min/60.0)/**Pi);
}else{
return ((Pi/)-((ptr->tm_hour-12.0+ptr->tm_min/60.0)/)**Pi);
}
};
void myDisplay(void) {
//glShadeModel(GL_SMOOTH);
//获取系统时间
struct tm *ptr;
time_t it;
it=time(NULL);
ptr=localtime(&it); glClear(GL_COLOR_BUFFER_BIT);//清除,GL_COLOR_BUFFER_BIT表示清除颜色
glEnable(GL_POINT_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); // Make round points, not square points
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); // Antialias the lines
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//钟盘
glColor3f(0.5,0.5,0.5);
glBegin(GL_POLYGON);
for(int i=;i<n;i++){
glVertex2f(R*cos(*Pi/n*i), R*sin(*Pi/n*i));
}
glEnd(); //刻度
glColor3f(1.0,1.0,1.0);
glPointSize(5.0f);
glBegin(GL_POINTS);
for(int j=;j<;j++)
{
glVertex2f(0.75*cos(*Pi/*j),0.75*sin(*Pi/*j));
}
glEnd(); //时针
glLineWidth(5.0f);
glColor3f(0.0,0.0,0.0); glBegin(GL_LINES);
glRotatef((angle/3600.0),0.0,0.0,1.0);
glVertex2f(0.0,0.0);
glVertex2f(cos(Myhour(ptr))*R*0.55,sin(Myhour(ptr))*R*0.55);
glEnd(); //分针
glLineWidth(4.0f);
glColor3f(0.0,0.0,0.0); glBegin(GL_LINES);
glRotatef((angle/60.0),0.0,0.0,1.0);
glVertex2f(0.0,0.0);
glVertex2f(cos(Mymin(ptr))*R*0.65,sin(Mymin(ptr))*R*0.65);
glEnd(); //秒针
glLineWidth(3.0f);
glColor3f(0.0,0.0,0.0); glBegin(GL_LINES);
glRotatef(angle,0.0,0.0,1.0);
glVertex2f(0.0,0.0);
glVertex2f(cos(Mysecond(ptr))*R*0.85,sin(Mysecond(ptr))*R*0.85);
glEnd();
glFlush();//glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。 } void myIdle(void)
{
angle-=((*Pi)/);
Sleep();
if(angle<0.0f){
angle=*Pi;
}
myDisplay();
} int main(int argc, char *argv[]) { glutInit(&argc, argv);//glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的GLUT_INDEX表示使用索引颜色。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲) glutInitWindowPosition(,);//设置窗口在屏幕中的位置. glutInitWindowSize(, );//设置窗口的大小 glutCreateWindow("时钟");//根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。 glutDisplayFunc(&myDisplay);//调用画图函数
glutIdleFunc(&myIdle); glutMainLoop();//进行一个消息循环。这个函数可以显示窗口,并且等待窗口关闭后才会返回 return ; }

说明:其实可以在绘制时针(分针,秒针)时就指定固定形状,由glRotatef(假定旋转参数为angle0x)来为其旋转到系统时间,之后"angle0x+=t"(其中t为各针对应转速)

OpenGL绘制简单的时钟(首发测试)的更多相关文章

  1. OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

    本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...

  2. html5--canvas绘制简单的时钟

    http://5227788.cn/static/time.html <!DOCTYPE html> <html lang="en"> <head&g ...

  3. OpenGL学习-------绘制简单的几何图形

    本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...

  4. 在MFC框架中使用OpenGL的简单实例

    引言 我们知道,在MFC框架中,用于绘图的接口是GDI.但GDI只能绘制简单的2D图形,要想制作精美的3D图形,一个可行的办法是使用OpenGL或者Direct3D等第三方库. 由于最近在给导师的一个 ...

  5. OpenGL绘制自由落体小球

    OpenGL绘制自由落体小球 一.    程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...

  6. CSS绘制简单图形

    究竟该用字体图标.图片图标.还是CSS画一个图标?我也不知道.各有千秋吧.本文将介绍如何用css绘制简单的图形,所有测试在chrome58.0完成,如果你不能得到正确结果请到caniuse查一查看看是 ...

  7. OpenGl 绘制一个立方体

    OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复 ...

  8. shape-自绘制简单图形

    shape 可以绘制简单的图形,颜色等.它主要就是应用于selector 的一些状态. 本文内容参考自http://www.cnblogs.com/cyanfei/archive/2012/07/27 ...

  9. [Modern OpenGL系列(三)]用OpenGL绘制一个三角形

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51347008 在上一篇文章中已经介绍了OpenGL窗口的创建.本文接着说如 ...

随机推荐

  1. grep 和 sed:linux经常使用工具 &amp; 基本正則表達式

    grep 见链接:http://www.cyberciti.biz/faq/grep-regular-expressions/ sed參考文章:http://www.thegeekstuff.com ...

  2. iOS 四种延时的方法

    - (void)initBlock{     //延时的方法     //1:GCD延时 此方式在能够在參数中选择运行的线程. 是一种非堵塞的运行方式,没有找到取消运行的方法.     double ...

  3. Java反射及依赖注入简单模拟

    一.编写Dao类 ? 1 2 3 4 5 6 7 8 9 10 11 package cn.com.songjy.annotation;   import java.util.Date;   publ ...

  4. Net Configuration Assistant和Net Manager的区别

    1.Net Configuration Assistant和Net Manager在oracle的配置工具中,Net Configuration Assistant(网络配置助手)和Net Manag ...

  5. (转)12款开源JavaScript库

    JavaScipt几乎是所有前端开发人员必会的编程语言,并且,随着各种移动APP的串红,JavaScript还可以用来开发移动应用.除此以外,为了丰富前端/移动开发,有不少开发者推出了各种基于Java ...

  6. 在一个RAC集群中最多支持多少节点

    How many nodes can one have in an HP-UX/Solaris/AIX/Windows/Linux cluster? Technically and since Ora ...

  7. oracle查询表信息

    oracle查询表信息(索引,外键,列等) oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下: 1.查询出所有的用户表 select * fro ...

  8. C++ typedef与const

    1.typedef 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间:  typedef     int        INT; ...

  9. 设计模式之UML类图

    在学设计模式的过程中经常碰到各式各样的UML类图.那些眼花缭乱的符号有什么含义呢? 类图含义 类图中的关系 从网上找来一张图作为实例 依赖关系:比如动物依赖氧气和水,这里如学生要依赖自行车.用虚线箭头 ...

  10. 浏览器文档播放Shockwave Flash 插件问题

    浏览器被提示shockwave flash crashed怎么办?在使用浏览器的时候经常被提示shockwave flash crashed,flash插件崩溃,网页就会出现一些无法显示的文件,下面绿 ...