付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东南大学计算机图形学实验名: 学号:08011322姓评定成绩: 审阅教师:一. 实验目的与内容1、学习用 OpenGL 制作简单的动画2、学习使缓冲技术绘图3、让画出的钟表图具有动画效果二. 基本实验原理这次课程作业,做一个钟表出来。为了使这个钟表可以真正的“动”起来,实时显示时间,不仅需要画出钟表,还需要运用到 OpenGL 中的双缓冲。当 A 缓冲区显示时,B缓冲区正在绘制图形。当B 绘制完毕时,就交换缓冲区,此时B 显示,而 A 就进行绘画。从而实现平滑地显示每一帧地显示,观众就看不到没有完成的画面。计算机的在交换缓冲区的时候,速度很快,所以一般用户是觉察不到的。为了能让的程序能够使缓
2、冲需要改变 main 函数中 glutInitDisplayMode()函数的参数,把 GLUT_SINGLE 改为 GLUT_DOUBLE,表示以前是单缓冲(single)。现在要使缓冲(double)了,在OpenGL 中,并没有提供交换缓冲这个函数,因为有些硬件不支持这个特性。对于不同的操作系统,有不同的方法。使用的 GLUT 辅助库,帮解决了这个问题,只用调用 glutSwapBuffers();函数所以再把 Draw 函数中的 glFlush()函数换成glutSwapBuffers()就可以了。这个时候编译运行,会同样的出现钟表,画面并没有动起来,因为 Draw 函数只调用了一次。
3、在 main 函数中使用 glutIdleFunc(&Update)函数,可以设置一个回调函数 Update。设置了以后,Update 便会在循环中不断地被调用,直到有窗口消息产生。这里暂时不管窗口消息是什么,只需要知道 Update 正不断被调用。Update 函数:void Update()time_t structtime (rawtime;tm * timeinfo; &rawtime );timeinfo = localtime ( &rawtime ); h=timeinfo-tm_hour;m=timeinfo-tm_min; s=timeinfo-tm_sec;gluttRed
4、isplay();gluttRedisplay 函数,就和它的名字一样,它发送了一个消息给 glut 窗口,告诉它重新绘制一下画面,结果就是 Draw 函数会被调用。这时再编译运行一次,发现同样可以显示画面。其实这个时候,画面是在不断地更新的,只是感觉不出来而已。需要注意的是,与指针读数相关的的h、m、s 三个参数必须设置为全局变量,让其在其他函数中也可以被使用。三. 方案实现与测试程序完整代码如下:#include #include #include #include#defin 3.1415926float h,m,s; void Draw()i;float R,TR,PR,h_Angle
5、,m_Angle,s_Angle,count,h_Length,m_Length,s_Length; R=0.5;TR=R-0.04; PR=R-0.08;glClear(GL_COLOR_BUFFER_BIT); glLineWidth(5); glBegin(GL_LINE_LOOP);for (i=0; i100; i+)glVertex2f(R*cos(2*PI/100*i),R*sin(2*PI/100*i);glEnd();glLineWidth(2);/画表盘for (i=0; i12; i+)glBegin(GL_LINES);glVertex2f(PR*sin(2*PI/12
6、*i),PR*cos(2*PI/12*i); glVertex2f(R*sin(2*PI/12*i),R*cos(2*PI/12*i);glEnd();glLineWidth(1);for (i=0; i60; i+)glBegin(GL_LINES);glVertex2f(TR*sin(2*PI/60*i),TR*cos(2*PI/60*i); glVertex2f(R*sin(2*PI/60*i),R*cos(2*PI/60*i);glEnd();glLineWidth(0.5);/画长、短刻度h_Length=0.2; m_Length=0.3; s_Length=0.4; count=
7、60; s_Angle=s/count; count*=60; m_Angle=(m*60+s)/count; count*=12;h_Angle=(h*60*60+m*60+s)/count; glLineWidth(1); glBegin(GL_LINES);glVertex2f(0.0f,0.0f);/计算每一时刻下时、分、秒针的角度glVertex2f(s_Length*sin(2*PI*s_Angle),s_Length*cos(2*PI*s_Angle);glEnd();glLineWidth(5); glBegin(GL_LINES);glVertex2f(0.0f,0.0f);
8、/画秒针glVertex2f(h_Length*sin(2*PI*h_Angle),h_Length*cos(2*PI*h_Angle);glEnd();glLineWidth(3); glBegin(GL_LINES);glVertex2f(0.0f,0.0f);/画分针glVertex2f(m_Length*sin(2*PI*m_Angle),m_Length*cos(2*PI*m_Angle);glEnd();glLineWidth(1);/画时针glBegin(GL_POLYGON); for (i=0; itm_hour; m=timeinfo-tm_min;s=timeinfo-tm_sec;gluttRedisplay();/不停地本地时间main(argc, char *argv)glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);glutInitWindowition(100, 10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB15/T 3969-2025斜插钢丝网架现浇内置保温剪力墙技术标准
- DB32/T 4840-2024大球盖菇菌种生产技术规程
- T/CACM 016.59-2026经方临床应用指南 黄芪桂枝五物汤
- T/CAAMTB 121-2023质量分级及“领跑者”评价要求 轻型货车
- 公共财务试题及答案展示
- 支气管重点试题及答案解析
- 肝脏穿刺拔高试题及规范答案
- T/CAATB 005-2024矿用防堵自清洁筛网
- 2026年秋招:福建高速公路集团笔试题及答案
- 酒店公共关系实务 教案
- 高中一年级信息技术1.3信息及其特征教学设计
- 审核凭证到底在验什么:会计凭证审核实务与内控穿透指南
- 秋季初一新生家长会课件
- 2026中国养蚯蚓行业市场现状供需分析及投资评估规划分析研究报告
- 初中物理九年级全一册《变阻器:原理、构造与电路控制》教学设计
- 7 培养德智体美劳全面发展的社会主义建设者和接班人 探究积累(课件)
- 《建筑施工安全》门窗安装专项安全培训
- 新版2026浙教版小学信息科技四年级上册(全册)-教学设计
- 2026年上海高三三模高考数学模拟预测试卷(含答案详解)
- 疾控中心实验室项目初步设计
- 2026年统战部公务员面试模拟题库
评论
0/150
提交评论