- -应付下实验吧

#include<cstdio>

#include<time.h>
#include<math.h>
#include <GL/glut.h>
//sleep ,gluttimefunc
struct tm* localTime;
int hour, minute, second;
double pi=3.1415926;

void gettime(){//读取时间到全局变量
time_t curTime;
time(&curTime);
localTime = localtime(&curTime);
hour=localTime->tm_hour;
minute=localTime->tm_min;
second=localTime->tm_sec;
}

void display_watch()//绘制钟表
{
    
    //可见到的坐标系为x,y轴线[-1,1]的正方形区域

glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_LINE_SMOOTH);
    
    double r=0.8,r2=0.7,rat=0,ww=7,tim=360;
    double rr1=0.4,rr2=0.64,rr3=0.75,w1=10,w2=8,w3=4;

glColor3f(0.0,1.0,0.4);    
    glBegin(GL_POLYGON);//绘制钟外层圆形
    for(int q=1;q<=tim;q++){
        glVertex3f(r*cos(rat),r*sin(rat),0);
        rat+=pi/tim*2;
    }
    glEnd();

glColor3f(0.0,0.8,0.7);
    glBegin(GL_POLYGON);//绘制钟内层圆形
    for(int q=1;q<=tim;q++){
        glVertex3f(r2*cos(rat),r2*sin(rat),0);
        rat+=pi/tim*2;
    }
    glEnd();

glLineWidth(ww);//修改线宽,绘制刻度
    glColor3f(0.0,0.1,0.1);
    glBegin(GL_LINES);
    for(int q=1;q<=12;q++){
        glVertex3f((r2-0.1)*cos(rat),(r2-0.1)*sin(rat),0);
        glVertex3f(r*cos(rat),r*sin(rat),0);
        rat+=pi/6;
    }
    glEnd();

rat=pi/2-pi*2/12*(hour+minute/60.0);//改变线宽,绘制时针
    glLineWidth(w1);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_LINES);
        glVertex3f(0,0,0);
        glVertex3f(rr1*cos(rat),rr1*sin(rat),0);
    glEnd();

rat=pi/2-pi*2*(minute/60.0+second/60.0/60);//改变线宽,绘制分针
    glLineWidth(w2);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_LINES);
        glVertex3f(0,0,0);
        glVertex3f(rr2*cos(rat),rr2*sin(rat),0);
    glEnd();

rat=pi/2-pi*2*(second/60.0);//改变线宽,绘制秒针
    glLineWidth(w3);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_LINES);
        glVertex3f(0,0,0);
        glVertex3f(rr3*cos(rat),rr3*sin(rat),0);
    glEnd();

//printf("%d %d %d\n",hour,minute,second);
    glutSwapBuffers();
    
}

void idle(void)//读取时间到全局变量,重绘钟表
{
    
    gettime();
    glutPostRedisplay();
}

int main(int argc, char* argv[])
{
    
    glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB);
    glutInitWindowSize(666, 666);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("watch");
    
    glutDisplayFunc(display_watch);

//利用idle操作更新时钟
    glutIdleFunc(idle);

glutMainLoop();
        
   
    return 0;
}

opengl绘制钟表相关推荐

  1. 如何用 OpenGL 绘制雪花?

    作者 | 许向武 责编 | 张红月 出品 | CSDN博客 看冬奥才知道,阿勒泰不但是中国的"雪都",还是"人类滑雪起源地".这个说法是否成立,姑且不论,阿勒泰 ...

  2. 使用OpenGL绘制圆环体(Torus)

    本篇介绍一下使用OpenGL绘制圆环体的方法.程序是在C#和OpenTK环境下编译的. 代码: /// <summary> /// 绘制圆环体 /// </summary> / ...

  3. 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )

    文章目录 一.绘制三角形 二.三角形绘制顺序 1.绘制正面 2.三个点逆时针方向排列 3.三个点顺时针方向排列 4.设置点的正面方向 三.绘制多个三角形 四.相关资源 一.绘制三角形 三角形绘制即绘制 ...

  4. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )

    文章目录 一.绘制单个点 二.绘制多个点 三.相关资源 在上一篇博客 [OpenGL]十.OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | ...

  5. 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

    文章目录 一.初始化 OpenGL 矩阵 1.设置投影矩阵 2.设置模型视图矩阵 二.绘制点 1.清除缓冲区 2.设置当前颜色值 3.设置绘制点的大小 4.绘制点 5.将缓冲区绘制到前台 三.部分代码 ...

  6. 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )

    文章目录 一.OpenGL 状态机概念 二.OpenGL 矩阵概念 上一篇博客 [OpenGL]八.初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗 ...

  7. OpenGL绘制二个不同颜色的三角形的实例

    OpenGL绘制二个不同颜色的三角形 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include & ...

  8. OpenGL绘制带有索引的矩形的实例

    OpenGL绘制带有索引的矩形 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include < ...

  9. OpenGL绘制一个三角形的实例

    OpenGL绘制一个橘黄色的三角形 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include &l ...

最新文章

  1. 正式迁移博客到osc
  2. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
  3. MySQL【案例讲解】分组函数
  4. Oracle E-Business Suite 12.1.1 Rapid Clone
  5. Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了
  6. (转)Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏
  7. 【十六】Jmeter:目录介绍
  8. 安卓开发 给控件左边右边下边添加阴影_使用鸿蒙开发一款TV版的小游戏
  9. 100多本炒股电子书网盘自由下载!
  10. 【推荐】男篮之恨,以cxk可解?
  11. Traceback (most recent call last):
  12. 大数据解决方案:解决T+0问题
  13. 外文翻译原文附在后面_本周作业是翻译外文文献摘要,电子版,回复到作业中,提交附件,格式按照外文文献翻译模版,先中文再附上英文原文,只需要摘要_学小易找答案...
  14. 兀键和6键怎么判断_如何判断分子或离子中的大π键
  15. Unity学习笔记:Animator、Animator Controller、Animation Cilp之间的关系、以及Blend Tree的用法;
  16. Python使用腾讯云-短信服务发送手机短信
  17. 让VBOX支持USB
  18. 秋夜长,怎奈碎念悠怅
  19. 项目一:SORM基本框架之基本思路
  20. hnust 最小生成树

热门文章

  1. 回归预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络多输入单输出回归预测
  2. 208核、6TB内存!阿里云发布全球最强云服务器:挑战摩尔定律极限
  3. 家居行业供应链管理系统解决方案
  4. 大地测量学/普通测量学
  5. css实现div水平、垂直都能充满整个屏幕
  6. 找回XShell保存过的密码
  7. 设计一种可全向移动的球形机器人
  8. IEEE1588精密时钟(PTP网络时钟服务器)在数字化变电站时钟同步方面的应用
  9. 不忘初心,智和网管平台在国产化的道路上砥砺前行
  10. 先进先出-FCFS-调度算法-C语言实现