OpenGL绘制简单的时钟(首发测试)
#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绘制简单的时钟(首发测试)的更多相关文章
- OpenGL绘制简单场景,实现旋转缩放平移和灯光效果
本项目实现了用OpenGL绘制一个简单场景,包括正方体.球体和网格,实现了物体的旋转.缩放.平移和灯光效果.附有项目完整代码.有具体凝视.适合刚開始学习的人熟悉opengl使用. 开发情况 开发环境V ...
- html5--canvas绘制简单的时钟
http://5227788.cn/static/time.html <!DOCTYPE html> <html lang="en"> <head&g ...
- OpenGL学习-------绘制简单的几何图形
本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...
- 在MFC框架中使用OpenGL的简单实例
引言 我们知道,在MFC框架中,用于绘图的接口是GDI.但GDI只能绘制简单的2D图形,要想制作精美的3D图形,一个可行的办法是使用OpenGL或者Direct3D等第三方库. 由于最近在给导师的一个 ...
- OpenGL绘制自由落体小球
OpenGL绘制自由落体小球 一. 程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...
- CSS绘制简单图形
究竟该用字体图标.图片图标.还是CSS画一个图标?我也不知道.各有千秋吧.本文将介绍如何用css绘制简单的图形,所有测试在chrome58.0完成,如果你不能得到正确结果请到caniuse查一查看看是 ...
- OpenGl 绘制一个立方体
OpenGl 绘制一个立方体 为了绘制六个正方形,我们为每个正方形指定四个顶点,最终我们需要指定6*4=24个顶点.但是我们知道,一个立方体其实总共只有八个顶点,要指定24次,就意味着每个顶点其实重复 ...
- shape-自绘制简单图形
shape 可以绘制简单的图形,颜色等.它主要就是应用于selector 的一些状态. 本文内容参考自http://www.cnblogs.com/cyanfei/archive/2012/07/27 ...
- [Modern OpenGL系列(三)]用OpenGL绘制一个三角形
本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51347008 在上一篇文章中已经介绍了OpenGL窗口的创建.本文接着说如 ...
随机推荐
- 11gR2 RAC启用iptables导致节点宕机问题处理
通常,在安装数据库时,绝大多数都是要求把selinux及iptables关闭,然后再进行安装的.但是在运营商的系统中,很多安全的因素,需要将现网的数据库主机上的iptables开启的. 在开启ipta ...
- _itemFailedToPlayToEnd: { kind = 1; new = 2; old = 0; }
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVveW91MTMxNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- C语言高速入口系列(七)
C语言高速入口系列(七) C语言指针进阶 本章引言: 在前面第5节中我们对C语言的指针进行了初步的学习理解;作为C语言的灵魂, C指针肯定没那么简单,在这一节中,我们将会对指针进行进一步的学习,比方二 ...
- nyoj 523 亡命逃窜 【BFS】
亡命逃窜 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 从前有个叫hck的骑士,为了救我们漂亮的公主,潜入魔王的老巢,够英雄吧.只是英雄不是这么好当的.这个可怜的娃 ...
- VMware虚拟机与主机联通及配置上网
vmware版本:10.0.0 build-1295980,安装redhat enterprise linux 5.8 一.物理机与虚拟机联通,但不联网 1.虚拟网络VMnet1设置: 此时,物理主机 ...
- Jquery Mobile 记录
使用的是C#语言,.Net+Jquery Mobile 框架开发 1.使用水平组切换操作 <fieldset id="Tfdset1" data-role="con ...
- 02js高级Function
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- panel控件 换行
Panel1.Controls.Add(new LiteralControl("<BR/>"));
- JS参数使用带参数的方法
大家都知道,在JS之中,一个变量的生命周期不是以大括号为界限的,所以即使是使用在循环或判断中的变量,外部也可以使用.可如果我们在循环或变量中使用了方法,而且这个方法使用了循环中的变量,那么后面的代码是 ...
- php输出json中文显示编码-解决办法
$str = "中华人民共和国";$ar = array( "a" => "a0", "b" => &quo ...