计算机图形学OpenGL第三版教案_第1页
计算机图形学OpenGL第三版教案_第2页
计算机图形学OpenGL第三版教案_第3页
计算机图形学OpenGL第三版教案_第4页
计算机图形学OpenGL第三版教案_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机图形学教案2016年3月22日目录.个人授课守则.课程概貌.课程教学总体目标与要求.课程教学方式总体设计.课程板书总体设计.主页面板书设计.课程教学进度安排.课时备课教案第1次课第2次课第3次课第4次课第5次课第6次课第7次课第8次课第9次课第10次课第11次课第12次课.课程综合性实验设计.英语参考词.平时考勤与成绩记载汇总表计算机图形学教案陆济湘2015年12月 第三版1个人授课守则为人师表身体力行做阳光下纯净的代表,做黑夜中引路的烛光,布 局平凡,杜绝市偿,求真求新,坦然一生。不求大富大贵,大红大紫,惟求平安康健,无愧 我心。授业传道教书育人给学生一方无污的净土,一片创意的天空,一

2、座 智慧的树林,一泓真理的泉水,一把求知的钥匙。不但授人以鱼,更应授人以渔,还应授人以海。答疑解惑恪尽职守课堂知识讲解力求做到复杂问题简单化,抽象问 题形象化,枯燥问题生动化,切实帮助学生理解课程 知识。力争深入浅出,决不故弄玄虚以示深奥。2课程概貌课程 名称计算机图形学课程 学时48课程学分课程专业选修课授课 方式课堂讲 授+实 验考核方式闭卷考试授课 专业数学jd1301,信计 1301-02授课 班级授课教师陆济湘学时 分配讲课40学时上机辅导8学时起止 周数1-10 周学生班长课程 教材计算机图形学(OpenGD第三版教材 主编出版单位清华大学 出版社课堂 讲授 章P第一章计算机图形学

3、力 第一早OpenGL绘制火 第三章绘图工具 第四章向量工具 第五章物体交换 第六章网格建模 第七章三维观察 第八章几何体真实感1 第九章光栅显示工具 第十章曲线和曲面设1 第章颜色理论 第十二章光线跟踪既述 .门宣染+学在程计述节 自或课设讲章课程 重点 章P课程 难点 章1主要 经专 书目3课程教学总体目标与要求课程教学总体目标本书以两条主线贯穿其中,一条是向读者介绍基本的计算机图形学理论知识,另一条是在介绍图形学理论知识的同时,向读者条理清晰地说明怎样用OpenGL命令来实现计算机图形的基本要素。这种互为补充的安排能使读者更容易理解相应的理论和编程。在介绍计算机图形学理论时,本书着重于实

4、践性强、实用性广的理论,让读者能够在理解理论知识的同时用OpenGL编写实用的应用程序,而不是让读者去实现诸如 OpenGL 一类的底层图形库,这是有别于其他计算机图形学教程的特点之o因此,本书采用理论与实践相结合的方式讲解计算机图形学理论和OpenGL图形编程实践,通过将二者有机地融合在一起,使读者既掌握了计算机图形学理论知 识,又掌握了编程实践理论的方法。这也是本书的一个重要目标:使读者在OpenGL编程时不再感到“孤立”,相互融合讲解的计算机图形学理论和OpenGL编程方法一起指导读者编写出更强大、更有效的应用程序。课程教学要求的基础,实用OpenGL编程示例C语言编写,并且全部本书所讲

5、内容是进行计算机图形学应用编程(如游戏编程等) 性强而又容易理解,它们都是经过精心选择的。书中包括大量的 和效果图,所选实例具有很强的代表性,程序代码全部采用在Visual C+6.0环境下调试通过,便于读者对计算机图形学理论和OpenGL编程概念的理解。本书只要求读者有一定的C语言基础和数学知识,适合作为相关专业计算机图形学的教材或辅助教材,还可以作为OpenGL编程以及计算机游戏编程等培训班的理想教材,对那些对OpenGL编程和计算机图形学感兴趣的读者来说是一本不可多得的详尽的参考用书。4课程教学方式总体设计课程教学改革重点通过全面分析课程教学内容,针对本课程涉及面广,实践性强的主要特点,

6、 结合当前学生实践环节薄弱、概念不强等教学难点,应将教学改革重点放在丰富教 学方式上。首次课注意点首次课对强化学生的课程学习兴趣与学习信心十分关键,需交待清楚课程特点、教纲、考核方式、课堂要求、实验等教学概况,用温和平稳的过度方式引导学生走 进课堂。设计教学切入点找准各章节教学切入点,随堂结合各章节讲述内容中存在瓶颈问题和突破方向,补充教学内容,选择恰当的教学手段实现教材与课堂讲授间的无缝链接,促进学生 主动学习。课堂教学方式设计启发式教学为主,实例式教学为辅。力求生动讲述,做到复杂问题简单化,抽象问题形象化,枯燥问题生动化,深 入浅出,不故弄玄虚以示深奥。结合工程实例,采用讨论方式将有关概念

7、以有趣的 提问引出,调动学生思维积极性,营造活跃互动的课堂氛围,提高学生的学习兴趣 与学习信心。主次分明,详略得当。重点与难点章节只是点辅以多种教学手段详讲、讲透;次重点章节知识点讲清 楚;一般内容章节教学重心为引导学生读懂教材相关知识点。语言生动、力求讲授个性化。采用PowerPoint2007上课,注意以讲为主,切忌将讲课变成“念课”。讲授时力求语言生动,用词得当。课件设计原则原创性原则应根据开课任务不同的学时分配和不同的学生类型及特点,针对性设计课件,并随教学过程出项的问题反馈及时修改课件,加之本课程可选课件资源几乎为零, 故本课程课件必须原创。系统性原则课件应完整放映课程讲授体系,体现

8、面向对象语言基本理论和相关概念应有的严谨性和系统性,突出和统一正在讲授的章节标识,保留每节内容2级以上标题,便于学生笔记。类板书原则课件应按传统黑板板书方式设计,姑且称为“电子黑板”。页面上切不可堆砌大量文字段落,仅丰富图片、绘图等传统黑板不好表达的多媒体信息即可。动画性原则课件文字按最接近手写的方式动画,绘图过程、分段制造过程等内容按步骤动画解决传统教学中绘图、建造工艺过程表述抽象、学生难以理解等教学瓶颈问题, 帮助学生较好的理解讲授内容。美观性原则精心设计,力求美观与实用完美结合。课件整体风格统一,制作精美,从细节 上体现讲授者的严谨学风,潜移默化的言传身教。课程资源建设原创设计课程学习网

9、站,设立电子黑板、 全程教学录像等丰富的网络教学资源,有效帮助学生拓展学习空间,便于课后复习巩固。5课程板书总体设计设计课程导航页首页设课程导航页,总览全课程内容设计章首页每章设一开始页面,明确本章内容 *计算机图形学(0口例GL版)木章内容课程前介学时教学要求考查雅式教材主讲:陆济湘什么是计算机图形学计算机图形学的应用计尊机生成图像的方法常用的图形显示设备交互设备 设计节首页每节设一开始页面,明确本节内容主页面分区设计主页面分标题、侧边、主内容三区1.3计算机图形学中制作图 像的基本元素幽数的调用内容包括:图元OponG国制简介图亓属性计算机绘制的图像是由图元翅成T 播:点,我.折我.文本.

10、填充区域,光阚像.* 4调用前先说明函数原型士在调用建螭谶由可生 或福庄文件开法所有函数之箭,接如下形式蹒:美型际卡衿妗漫用余数生:含弟吊工明的格第表;,调用形式函数名(实逑列表)、 TOC o 1-5 h z 嵌套调用gM-山t词事. *融.通fl调用:.函数直排或闾按谢用自身,上设计节内容每节设具体实例页面,加深本节印象设计早末页每章设一结束页面,布置学生任务作业当一种技示器有600800像素的分辨 率,每个像素能显示65000种颜色, 刷新率是每秒60次时,每秒钟有多少比特传送给显示设番?计算机绘制的图像是由什么组成的? 种有效的分类是什么?6主页面板书设计主页面分区页面主要分为章节标题

11、区、主内容区、侧边前内容目录区三大部分页面布局主页面内图片文字等布局 匀称。页面背景全课程页面背景一致,避 免杂乱。统一选用深蓝色背景,以 反突出文字和图片等前端内 容。函整的声明函数是曲阳对象程序段汁中的菱.本抽象单兀.是对功能的抽象函数声明的语法格式美早标记吁函镇扁 /:式苦番表,若无普戈.耳voi、 是辞旧始*加内岸 变H*寿命和可更 性国里千誓誓需句序划族的返回地址 当前现场主调耳中瓯埔 返回亚地侧边目录区侧边前述内容目录区记录本页前面所述节的一、二、三级标题,以方 使学生温习或补课堂笔记。页面主文字色彩及大小文字色彩明亮,大小适中, 风格统一。章节标题金黄色,黑体,36 号字;一级标

12、题白色,黑体,24号字;二级标题及正文白 色,黑体,字号视页面布局在选才? 2024号字间选择,不宜再小,以方便后排学生笔记。关键词和英文单词用与主文字不同的颜色标明关键词和英文单词。7课程教学进程安排教学周一二三四五六七八九十十一十二十三学时数4444444646466进程线道图第章第四章第七章第一早第三章第五章用八早第八章章-般章节次重点章节重点章节科目寸算机图形学 _总学时讲课实践专业班数学 jd1301,信计 1301-0248408周次课次授课内容学 时实验、习题、大作 业内容学时一计算机图形学概述21、vc6.0安装,建 立控制台工程, OpenGL?配置,运 行简单OpenGL程

13、 序2一计算机图形学控制台应用程序创建,OpenGL配置,简单程序讲解2二三OpenG欧图入门,窗口编程和窗口 绘图,OpenGLI本图形儿素函数4三四OpenGL中的直线绘制,OpenGLt鼠标和键盘的交互,绘制Sierpinski 垫片,绘制函数曲线42、绘制 Sierpinski 垫片,绘制函数 曲线和参数曲线2五六世界窗口和视口,裁剪线算法, 正多边形、圆和圆弧的绘制,参 数曲线的绘制6七八图形学中的向量工具,点积,叉积, 重要几何对象的表示,求两个线段 的交点,直线和平囿求交及裁男, 多边形求交问题6九 十物体几何变换初步,三维仿射变 换,坐标系变换63绘制逻辑图和 混沌的模拟,实

14、现Cohen-Sutherland 裁剪算法2十二在程序中使用仿射变换,使用OpenGL制三维场景6十三多边形实体网格建模,多面体和拉 伸形体44利用三维仿 射变换绘制三维 切乐28课时备课教案第1次课时间地点授课 章节第1章绪论么是计算机图形学 1.2计算机图形学的应用算机生成图像的方法 1.4常用的图形显示设备互设备授课 方式课堂讲授教学4让后、 事项教学 目标使学生了解课程特点、教纲、考核方式、课堂要求、实验等教学概况,初步理解和掌握计算机图形学发展进程以及注意事项。教学 重点.计算机生成图像的方法.计算机图形学开发过程教学 难点教学 设计.本次课为首次课,对强化学生的课程学习兴趣与学习

15、信心十分关键,应交 待清楚本课程特点、教纲、考核方式、课堂要求、实验、教学资源等课堂教学 概况,以认识几个新学生的温和点名方式过渡,引导学生走进课程。.从现实生活出发,充分让学生了解回向对象的思想。.补充计算机图形学基本概念和背景知识,以实例计算机图形学研究内容和 研究方法,并以此为切入点导出程序开发流程。.结合工程实际,采用典型案例说明当前开发模式的设计思路和应用侧重点 不同所衍生的不同开发模式,启发学生多方位思维,激发创新意识。.详讲计算机图形学基本概念、特点以及相关内容。教学 切入从计算机程序设计谛言的发展以及面向对象方法入手,帮助学生认识和理 解面向对象的思想。拓展 内容.计算机图形学

16、基本概念.计算机图形学背景.计算机图形学开发实例教学 内容教具 使用PPT课件课堂 练习课后 思考 与习 题课堂反馈随堂记录第2次课时间地点授课章节第一早vc opengl编程指导例子写图形程序习OpenGL程序的基本组成授课 方式课堂讲授教学6注意事项教学 目标本章让学生开始编写图形程序,包括用OpenGL编程和开发几个完整曲线绘制程序(包括矛名的 Sierpinski垫圈).本章讨论了用OpeoGL绘制基本兀素(如折线和多边形)的方法和如何在程序中交互地使用鼠标和键盘。最后的实例分析会给一些有趣的编段题目。它们能让学生对如何编写图形程序有更加清晰的感觉。其中的一 个典型实例分析是建立一个用

17、子初始化OpenGL和打心个 OpenGL绘制窗口的类。教学 重点1如何在程序中交互地使用鼠标和键盘2 .开发几个完整曲线绘制程序教学 难点如何在程序中交互地使用鼠标和键盘教学 设计教学 切入从C+基本概述入手, 少 少加沃对 C+的了斛。拓展 内容教学 内容 2.1生成图像初步通过练习(编写和测试各种/、同图 形的程序)可以很快掌握计算机图形 学。先从简单的任务开始,一旦掌握, 就试着变变花样,看看有哪些变化,试 着进一步绘制更复杂的场景。最好的学 习办法是认真、仔细地学习每行代码或 等式。当你这么做时,就能理解每个新 概念。每个图形程序都以一些初始化工 作为开始,由此建立程序所需要的显示

18、模型和坐标系。glutReshapeFunc(myReshape);glutMouseFunc(myMouse);glutKeyboardFunc(myKeyboard);myInit(); 必要的其他初始化工作glutMainLoop(); / 进入循环 2.2OpenGL的基本图形元素2,1.1设备无关的编程和 OpenGL2.1.2窗口的编程绘制三个点:glBegin(GL_POINTS);OpenGL程序可以在不同的图形环境胆智靠和运 即它是与设备无关的编程. Op电nGL是一个开源 尺. 1 (V.http:/www.opengl.argT OpenGI 被称为应用程序接口(API)

19、 *这个接口是程序t 以调用的例程.先从OpenGL绘制筒单的二维物 始,然后学习绘制三维图形.事件驱动编程:事件包拈单击鼠标.按F犍盘上 按键,或者照新调整窗口的大小.程序员将程序 织成IH调函数的集合.这些回调函数一有事件发 就机行.即什么彻不做r等待事件发生a事件发 后再做指定的事.OponGL有一个GLUT库.它J 打开窗口.管理菜用和处理事件等.注册回调函数:有一种方法将静种类型的事件与 求的回调函数关联起来.这个方法歙之为注册回 函数.程序中用到的每一个事件类型都我须用切 函数注册,读I可调函数的名字和定义由程室员系下面是使用 GLUT库,名为 myMouse的回 调函数例子,它方

20、便地注册了与鼠标关联 的事件:glutMouseFunc ( myMouse ); glutMouseFunc是GLUT库的固有函数,但 是回调函数 myMouse是程序员定义的,并 由程序员编写代码,处理每个可能感兴趣 的鼠标动作。glVertex2i(100, 50);glVertex2i(100, 130);glVertex2i(150, 130);glEnd();或者用浮点值代替整数值:glBegin(GL_POINTS);glVertex2d(100.0, 50.0);glVertex2d(100.0, 130.0);4种主要的 OpenGL库:1)基本GL库,OpenGL库的基础。

21、它提供OpenGL的基本函数。每个 OpenGL函数都 以字符GL开头。GLUT库:GL实用工具包。它用来打开 窗口,开发和管理菜单,以及管理事件等。GLU库:GL实用库,它提供高级例程, 处理矩阵操作和绘制二次曲面如球和圆柱 体;GLUI库:用户接口库,提供控制工具和 菜单。glutDisplayFunc (myDisplay):重绘窗口调 用myDisplay回调函数;glutReshapeFun (myReshape):对屏幕窗口 的形状进行调整;void main()glutDisplayFunc(myDisplay); / 注册重绘函glVertex2d(150.0, 130.0);

22、221几个点从绘制的例子点丛是由大幡点组成的某科图案*卜闻白儿个点从2.2.2 Sierpinski (塞平斯基)垫片glutReshapeFunc(myReshape); / 注册改变窗口形状函数初始值P(0),在for循环外面GLintPoint point = Tindex; / 初始值例r,一老3中式餐经制也留沙帚用叶 81.聿诉=覃E棺iZriW 工棋 兄3回 毕毒E . N鼻T眼憎A =/ fti方向 WttKAw 9墓方向晌*他事四I,glutMouseFunc(myMouse); / 注册鼠标动作函数glutMotionFunc(myMouse); / 注册鼠标移动函数glut

23、KeyboardFunc(myKeyboard); / 注册键 盘动作函数/可能初始化其他工作glutMainLoop(); /进入主循环等待事件发213如何打开一个窗口画图glutlnrt:该函故初始化工具包glutDisplayMode(GLUT_SIIMGLE | GLUT_RGE 分配单个总示矍存glWniMindowSiG40,480):该函数指定屏南 始尺寸,宽640像素,而480像素“glute reate Window ( my first attempt1 ): 散打开并显示屏暮窗口吗,并显不标题.代码如下;void main(int argc, char* argv)glu

24、tInit(&argc, argv);/初始化工具包glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB);/设显示模式glutInitWindowSize(640,480);/设置窗口大小glutInitWindowPosition(100, 150);/设置窗口在屏幕上的位置glutCreateWindow(my first attempt);/打开屏幕窗口/注册回调函数drawDot(point.x, point.y); /画初始点for(int i = 0; i ln Ck);GkHwNe tunc i ,-in:任盘k=4b:,啊sc y t DgWPF

25、Tflsi A i + B, C,tunc 勒;gfertex2(a|A # 目.C rune 1+ );glutDisplayFunc(myDisplay);教具PPT课件使用课堂 练习课后 思考 与习 题复习第二章,预习第三章思考:2-12-17、2-21、2-22、 2-25-2-27上机题:2-19 2-20 2-28 2-30 2-31、2-33实验二课堂反馈随堂记录第3次课时间地点授课 章节第一阜vc opengl编程指导例子发绘制点、直线、折线和多边形的基本图形工具会用鼠标和键盘控制程序授课 方式课堂讲授教学6注意事项教学 目标本章让学生开始编写图形程序,包括用OpenGL编程和

26、开发几个完整曲线绘制程序(包括矛名的 Sierpinski垫圈).本章讨论了用 OpeoGL绘制基本兀素(如折线 和多边形)的方法和如何在程序中交互地使用鼠标和键盘。最后的实例分析会给一些有趣的编段题目。它们能让学生对如何编写图形程序有更加清晰的感觉。其中的一 个典型实例分析是建立一个用子初始化OpenGL和打心个 OpenGL绘制窗口的类。教学1如何在程序中交互地使用鼠标和键盘重点2 .开发几个完整曲线绘制程序教学如何在程序中交互地使用鼠标和键盘难点教学 设计教学、从C+基本概述入手,一步一步加深对 C+的了解切入 拓展 内容教学内容penGL中的直线绘制绘制线段glBegin(GL_LIN

27、ES); / use constant GL_LINES hereglVertex2i(40, 100);glVertex2i(202, 96);glEnd();或者编写一个函数void drawLineInt(GLint x1, GLint y1, GLintx2, GLint y2)glBegin(GL_LINES);glVertex2i(x1, y1);glVertex2i(x2, y2);glEnd();绘制折线和多边形折线就是一系列头尾相连的线段的集合, 也称为线带。glBegin(GL_LINE_STRIP);/ draw an open polylineglVertex2i(20

28、,10);glVertex2i(50,10);而 state 的值可能为:GLUT_UP或 GLUT_DOWNox和y为事件发生时鼠标的位置。用鼠标绘制点当用户每次按下鼠标时,就会在屏幕窗口上鼠标所在的位置绘制出一个点。由于鼠标位置的y值是距离屏幕顶端的像素值,故不在(x, y),而是 在 (x,screenHeight - y)上绘制,其中 screenHeight为屏幕的高度。void myMouse(int button, int state, int x, int y) if(button = GLUT_LEFT_BUTTON& state = GLUT_DOWN)drawDot(x,

29、 screenHeight -y);else if(button = GLUT_RIGHT_BUTTON & state =GLUT_DOWN) exit(-1);2.4.2用鼠标指定一个矩形想让用户画尺寸大小由鼠标输入的长方形。用户在两个点上单击鼠标,指定边校正矩形的两个角点,就可以画出矩形。用户右键点击鼠标 即可清屏。glVertex2i(50,80);glEnd();glFlush();绘制多边形,只需要用GL_LINE_LOO布换 GL_LINE_STRIPBRT,即是闭合的。f(x) = 300 - 100 cos(2p x/100) + 30 cos(4p x/100) + 6 c

30、os(6p x/100) glBegin(GL_LINE_STRIP);for(x = 0; x = 300; x += 3)glVertex2d(A * x + B, C * f(x) + D);glEnd();glFlush;72 32娃制件毡在交件中的折空*处0H号机CMngai*Bift |以_2.1 血ire史口.皿仁 文科ana.gt:京晨手后加*H1看 4 H蜒f用热点书 nit nT 拓他加夏 中制1附m HE 134 E 12 6 m-精后槽国菱牌 工狗晤K条漆的壬一+启 3M幅 32皿 114 ju m3才4% It心 .再中moveTo和lineTo函数实现为: GLin

31、tPoint CP; 全局位置变量/void moveto(GLint x, GLint y) ( CPx = x; CPy = y; / 更新 CP )II void lineto(GLint x, GLint y) ( glBegin(GL_LINES); II 绘制曲线 glVertex2i(CPx, CPy);glVertex2i(x, y);II使用鼠标指定一个矩形(static GLintPoint corner2;static int numCorners = 0; II initial value is 0 if(button = GLUT_LEFT_BUTTON & stat

32、e = GLUT_DOWN)(cornernumCorners.x = x;cornernumCorners.y = screenHeight - y; II flip y coordinatenumCorners+; II have another point if(numCorners = 2)(glRecti(corner0.x, corner0.y, corner1.x, corner1.y);numCorners = 0; II back to 0 corners)else if(button = GLUT_RIGHT_BUTTON & state =GLUT_DOWN)glClea

33、r(GL_COLOR_BUFFER_BIT); II clear the windowglFlush();)2.4.3用鼠标控制Sierpinski垫片使用户用鼠标指定初始三角形的三个顶点,并置于数组corners中,代码为static GLintPoint corners3;static int numCorners = 0;if(button = GLUT_LEFT_BUTTON & state = GLUT_DOWN)(cornernumCorners.x = x;cornernumCorners.y = screenHeight - y; II flip y coordinateif(

34、+numCorners = 3)(Sierpinski(corners); II draw the gasket numCorners = 0; II back to 0 corners )鼠标移动鼠标移动会产生一个鼠标事件:glutMotionFunc(myMovedMouse);注册函数 myMovedMouse(int x, int y);有两个 参数,即事件发生时鼠标所在的位置。glutPassiveMotionFunc(myPassiveMotion);这个函数是没有按下鼠标按钮的情况下,鼠标在窗口内移动时调用。该函数可以绘制并显示橡皮矩形:随着用户移动鼠标,矩形将相应地 变大或变小

35、。glEnd();glFlush();CPx = x; C卬=y; / 更新 CP)鼠标和键盘的交互当用户按下或释放鼠标按钮、移动鼠标或 者松开或按下键盘时,就会产生一个相关 事件。程序员可以用每类事件注册一个回 调函数glutMouseFunc(myMouse)利用按下或者鼠标按钮时发生事件来注册myMouse()glutMotionFunc(myMovedMouse)利用鼠标移动注册函数myMovedMouse()glutKeyboardFunc(myKeyboard)利用按下或者松开键盘按键时注册函数myKeyBoard()用鼠标交互注册一个函数到 glutMouseFunc (myMo

36、use), myMouse ()的名字可以任意,有四个参数:void myMouse(int button, int state, int x, int y);button 的值如下:GLUT_LEFT_BUTTONGLUT_MIDDLE_BUTTON,或GLUT_RIGHT_BUTTON下面的程序是用户单击鼠标建立矩形的一个 角点,然后不按下鼠标时移动鼠标,调用 myPassiveMotion(int x, int y),这决定了矩形的 第二个角点。glutPostRedisplay()调用 myDisplay ()函数。代码见见计算机图形学课件计算机图形学(Opengl版第三版)书源代码w

37、ord版 221-threeDots.doc键盘交互按下键盘上的某个按键时就会产生一个键盘事件,并放入消息队列。回调函数myKeyboard ()通过 glutKeyboardFunc(myKeyboard)来注册这种事件,该函数的原型为:voidmyKeyboard(unsigned int key, int x, int y);key值就是键的ASCII值,x和y为鼠标所 在的位置。实例代码为:void myKeyboard(unsigned char theKey, int mouseX, int mouseY)GLint x = mouseX;GLint y = screenHeigh

38、t - mouseY; /反转y的值 switch(theKey)case p:drawDot(x, y); / draw a dot at the mousepositionbreak;case GLUT_KEY_LEFT: List+last.x = x; / add a pointList last.y = y;break;case E:exit(-1); /terminate the programdefault:break; / do nothing)教具PPT课件使用课后 思考 与习 题复习第二章,预习第三章思考:2-12-17、2-21、2-22、 2-25-2-27上机题:2-

39、19 2-20 2-28、2-30 2-31、2-33实验二课堂反馈随堂 记录第4次课时间地点授课 章节第3章更多的绘图工具绍视口和裁剪发选择窗口和视口的方法,以达到最佳视觉效果述参数定义的曲线,并理解它们的绘制技术建世界坐标系中绘图的工具授课 方式课堂讲授教学时数4注息事项教学 目标本章主要讲解窗口到视口变换的主要思想,以及在显示器上放图片和确定图片 大小的方法。具体讨论了以下内容:如何自我管理程序窗口和视口,而把细节留给 OpenGL处理的方法。编放、摇动镜头等后趣的效果和简单的图像动画;复杂的基 于多边形的图像、园和弧的绘制:二维扣三维曲线的参数化表示方法。教学 重点开发选择窗口和视口的

40、方法,以达到最佳视觉效果教学开发选择窗口和视口的方法,以达到最佳视觉效果难点教学设计.简单回顾上次课程的内容,复述上次课程结尾处内容,加深学生对上次课 的印象,无缝过渡到本次课程。.通过对函数的定义,函数声明语法规则逐步了解函数的结构类型。.编写简单函数实例,以实例引导学生掌握函数的声明及调用。.接着讲述各种函数调用形式。让学生充分接受新知识。教学切入先通过讲述函数的声明和调用规则列举实例,然后解构函数,从实例中学习函数的用法,以此为切入点讲清 OpenGL函数的使用,引导学生由点及面,举 一反三。拓展OpenGL函数的各种调用方法内容 3.1概述例子3.2.2 sinc函数回顾教学内容屏幕坐

41、标系: screenWidth-1 , screenHeight-1 有一个视口。x方向从0到 y方向从0到 它是设备坐标系,世界坐标系:笛卡尔坐标系,逻辑 坐标系。 3.2世界窗口和视口信号处理中非常重要的函数sinc,它的定义为:当 x! =0,且 sin (0) =1要绘制的曲线如图,/setWindowvoid setWindow(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top)glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(left, right, bot

42、tom,top);/setViewportvoid setViewport(GLint left, GLint right, GLint bottom, GLint top)/ define our own function to specify the viewport, as explained laterglViewport(left, bottom, right - left, top - bottom);void myDisplay(void) / plot the sinc function, using world coordinatesglClear( GL_COLOR_BUF

43、FER_BIT );for(/ draw the plotglMatrixMode(GL_MODELVIEW);glLoadIdentity();glBegin(GL_LINE_STRIP);GLfloat x = -4.0; x 4.0; x += 0.1)比如限定x交二4乳4单小加/ (pi * x);glVertex2f(x, sin(pi * x)用setWindow ()来建立世界窗 口 ,使用setViewport ()来建立视 口。通过设置一个世界窗口和一个视口,并建立它们之间 的一个合适的映射,可以完成适当 的缩放和平移。窗口是在世界坐标 系,而视口是屏幕坐标系。绘制sinc的

44、代码见计算机图形学课件计算机图形学(Opengl版第三版)书源代码word版第三章代码.doc12.1加JM 口的期曹福耀僦赢鹰臊飘耀产y=ATifC 到:匕工1* 口其占A BGJfi日圣千法不哲A,B培啦嚎杞物电帆iiC礼叶蒙它U.岫野I瓶睛蠹湍储加财物叫豹娟聘时机可&常那喋谡酷展津%拨心由右下用的等式电 A = 180,0 = 40, UtM网 窗Lt里现口的西茶 9i= IBC I* 44 w=240y+U相遛鼻口 (10.0,10.0,4.0,6.0)W 这个 电u大现口南园牲舲玄噎比吗? 善ft# 成长曲一个刈工$一个 为154设立窗口到视口的映射OpenGL使得窗口到视口的 变换

45、很容易。OpenGL通过一系列 变换完成所需要的映射,自动传送 到每个顶点,它还自动裁剪掉对象 在世界窗口之外的部分。对于二维 绘图来说,世界窗口由函数 gluOrtho2D()设定,它的原型是:glEnd();glFlush();在main函数中调用如下:setWindow(-5.0, 5.0, -0.3, 1.0);setViewport(0, 640, 0, 480);例323绘制文件中的折线因幅版湍婵望款带思犍加例相需野是)*例产24用悬龙图形平铺狮制画口tWindow(a 640 0,仇 480.0); ii 左右下上forfint i = 0; i 5; K+J If 对于他一用f

46、or(inti = 0j5; J+)/ 对于罅一行glViftwport(i * 64, j - 44; &4, 44); W寞描drawPolylineFilef tdino.dai ; 绘M或龙 详切代码见1浒和机图形学课件如1即 计明机阴形学OpEnql版第三版) E源代码word版库三串代码.08 3.3裁剪线裁典是图形学的一个基本任势,用于保持对象在给定 区域外的部分不被绘出.在OpenGL的环境卜,每个 对象都会被一个特殊的算法自动裁剪到世界窗口.由于。penGL为用户进行了裁剪,但裁剪器所使用的 想法,是非常是本的.3,3.1如何裁剪一条线CohemSuthEland威典器计算端

47、点为p1和p2的线段 的哪部分位于世界窗1口内,井返回那个部分的端式.开发T函数:clipSegmenKpl, p2, window) 受两个二维的点,以及一个对齐的矩形.3,3.2 CDhervSutherland裁寻算法 施能平凡佬号戚军凡护单,干中右p在宙n徜齐卜./右卜为T.而 而下为儿 PftSfteATTTF; 如IP度由I1星面,|P的端眄为TTTT;如粤P由团门时下啊,不在吉口的左R访九电,P的端店内FFFT,右图1示丁*冲可悌的区域.出E射惮的机手.平凡片Sj-tFJTffi ;?FFFF:等即油箱添甘菁不it乎。未擀:潭1雌统讯需中3.3.2 Cohen-Sutherlan

48、d 裁剪算法没有平凡接受或平凡拒绝时的截断Cohen-Sutherland算法使用一个分治的策略。如 果线段不是被平凡接受和平凡拒绝,则它会被窗 口的某一个边界分成两个部分。其中一个部分在 窗口之外,这部分会被丢掉。另一部分有被看到 的潜在可能性,因此整个过程将对四个窗口边界 的下一个重复进行,采用下面的策略:do形成p1, p2的码字;if (平凡接受)return 1;if (平凡拒绝)return 0;将线段在下一个窗口边界处截断; 舍去在外面的部分;)while(1);这个算法最多四次循环就会终止。只保留线段在 先前窗口边界测试中幸存的部分,只有四个这样 的边界。如右图,点 P1的坐标

49、需要重新计算。它的x坐标是W.right,即窗口的右边界,它的 y坐标需 要用图中d的值调整到P1.y得到。e =p1.x- W.rightdelx = p2.x - p1.x; dely = p2.y - p1.y;故可确定d,就可以得到新的P1.y:p1.y += (W.right - p1.x) * dely / delx只有当线段平行边界线时,delx才为0,而此时线段位于窗口之外,故这种情况在没有平凡接受或平凡拒绝时的截断 出现。void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);

50、即左右下上视口的设定通过glViewport()函数,它的原型是:void glViewport(GLint x, GLint y, GLint width, GLint height);相当于设置左下角(x, y)和 右上角(x + width, y + height).即左下角和宽高。我们用setWindow ()函数设 置窗口,用setViewport ()函数设 置视口 ;/ setWindow即窗口的左右下上void setWindow(float left, float right, float bottom, float top)(glMatrixMode(GL_PROJECTI

51、ON);glLoadIdentity();gluOrtho2D(left, right, bottom, top);)/ setViewport即视口的左右下上void setViewport(float left, float right, float bottom, float top)(glViewport(left, bottom, right - left, top - bottom);)教具使用PPT课件课后 思考 与习 题复习第三章3-2, 3-8, 3-11课堂反馈随堂 记录第5次课时间地点授课章节第3章更多的绘图工具剪建世界坐标系中绘图的工具授课 方式课堂讲授教学时数4注息事

52、项教学 目标本章主要讲解窗口到视口变换的主要思想,以及在显示器上放图片和确定图片 大小的方法。具体讨论了以下内容:如何自我管理程序窗口和视口,而把细节留给 OpenGL处理的方法。编放、摇动镜头等后趣的效果和简单的图像动画;复杂的基 于多边形的图像、园和弧的绘制:二维扣三维曲线的参数化表示方法。教学 重点开发选择窗口和视口的方法,以达到最佳视觉效果教学 难点开发选择窗口和视口的方法,以达到最佳视觉效果教学 设计5,简单回顾上次课程的内容,复述上次课程结尾处内容,加深学生对上次课 的印象,无缝过渡到本次课程。6,通过对函数的定义,函数声明语法规则逐步了解函数的结构类型。7,编写简单函数实例,以实

53、例引导学生掌握函数的声明及调用。8,接着讲述各种函数调用形式。让学生充分接受新知识。教学 切入先通过讲述函数的声明和调用规则列举实例,然后解构函数,从实例中学习函数的用法,以此为切入点讲清 OpenGL函数的使用,引导学生由点及面,举 一反三。拓展 内容OpenGL函数的各种调用方法教学 内容剪线3.3.3 开发 Canvas在世界坐标系工作是后意义 的,基本形体裁剪和映射从世界窗 口到视窗口。但是这种转换需要适 当地管理。有许多交互要素(点, 矩形,映射等),我们应当封装它 们并限制程序员访问它们避免细 小的错误。我们应当确保/、同部分 能适当地初始化。使用类。我们开发了一个 Canvas,

54、它提供了一个方便的绘 制画布可以绘制线段,多边形等。 它提供了一个简单的方法来创建 需要的屏幕窗口,并创建一个世界 窗口和视口,它确保世界窗口能较 好地映射到视口。它也提供了 moveTo ()和 LineTo ()函数, 许多程序员找到了合适的代码,如 “龟形”图形。有许多方式来定义Canvas:我彳门使用 OpenGL,利 用所有的OpenGL方法。但在某例使用Canvas类Canvas cvs(640, 480, try out Canvas); 创建全 局的canvas对象void display(void)(cvs.clearScreen(); / clear screencvs.s

55、etWindow(-10.0, 10.0, -10.0, 10.0);/ 左右卜上cvs.setViewport(10, 460, 10, 460);cvs.moveTo(0, -10.0); / draw a linecvs.lineTo(0, 10.0);RealRect box( -2.0, 2.0, -1.0, 1.0); / 构造一个盒子box.draw(); / 绘制盒子.)/void main(void)(/ the window has already been opened in the Canvas constructorcvs.setBackgroundC010r(1.0

56、,1.0,1.0);/background is whitecvs.setColor(0.0, 0.0, 0.0); / set drawing color glutDisplayFunc(display);glutMainLoop();)例子335创建一个在一个钩子的基硼图案上的图脂, !唱图案峭干右图.代的知 L, 1JfJ L Is He hngth od the shwl,gr讣方向上排II 一条找turrKanfle) rif轮鬲 Kan部 itnQfi *= Inern*n1; !i 揖母lUT(N).kcHL, It 皿网 forwircHL, 1); lum 网.肥说段匕科吩我

57、加杜j二助中.ffl工工6折睛构母学鹏口婚led我*曾】flcl31餐制热知的logoJ.3.?阳宇符申奇争龄制蛇(曲)KltirtleF WRfefwMKil:触内tim 伯属生时41而附UN专FLFLFif %FL FLFLFHFLFLFIFR.电事再产注制婚用:33上绘制监十一拽常由134门同:型段,号常耐占青岛礼,甲骐某日* 便重曲市两川FBW布档上学有帆阳两 3.4正多边形、圆和圆弧正多边形图形学中经常绘制的一种形状是有n条边的正多边形。一个多边形是正的,如果它是简单的, 而且所有的边相等, 所有的内角相等。我们称有n 条边的正多边形为正n边形,常见的例子是正四边形(正方形),正八边

58、形等等。如果正n边形有很多条边,则这个正n边形看 上去会像一个圆。 事实上这是绘制圆的方法。 正n 边形的n个顶点位于一个圆上,即所谓的正 n边 形的外接圆,其位置容易被计算。正n边形的变种基于正n边形顶点,可以绘制有趣的变种。a.正7边形 b. 一个星形c. 一个7花环例子3.4.1花环和黄金5花环花环是每个顶点和其他顶点相连的正n边形。绘制花环很容易:只要将每一个点和其他顶点 相连。绘制花环的代码见第三章代码.doc:右图为5花环和它的无穷嵌套-五边形和 五角星3.4我们描述了一个完全不同的实 现方法,我们提供了很多的工具。 尤其是实现了 Cohen Sutherland! 剪器。3.3.

59、4 一些有用的支持类在Canva酢口其他类中提供一些 共有的数据类型是方便的。我们定 义了 5个类。提供了构造函数和其 他函数处理每一种类型的对象。一 些类提供了绘制函数使得它容易 绘制类的实例。一些方法在类声明 时就实现,其他的方法在练习中要 求实现。类Point2: 一个实数坐标 系的点类Aclass Point2public:Point2() x = y = 0.0f; / constructor1Point2(float xx, float yy) x =xx; y = yy; / constructor2void set(float xx, float yy) x = xx; y =

60、 yy;float getX() return x; float getY() return y; voiddraw(void) glBegin(GL_POINTS); / draw this pointglVertex2f(Glfloat)x, (Glfloat)y);glEnd();private:float x, y;类class IntRect: 一个整数坐标 系的矩形类。class IntRectpublic:IntRect() l = 0; r = 100; b = 0; t = 100;/ constructors 左右 下上例子3.4.2基于两个同心多边形的图形右图显示了一些由

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论