已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
滁州学院计算机科学与技术系课程教案课程名称: 计算机图形学 授课教师: 杨斌 学习对象: 2008网络工程 任课时间: 2011年2月-2011月7日 滁州学院计算机科学与技术系2011年2月计算机图形学教学大纲(Computer Graphics)课程代码: 学时:36+16 学分: 一、 课程简介本大纲根据2009版应用型人才培养方案制订。(一)教学对象:计算机科学与技术、网络工程专业本科学生(二)开课学期:第六学期(三)课程类别:专业选修课(四)考试:考试(五)参考教材:Steve Cunningham. 计算机图形学M. 北京:机械工业出版社,2008. 主要参考书目:1 Dave Shreiner. OpenGL编程指南(第五版)M,北京:人民邮电出版社,2006.2 邓郑祥译OpenGL编程指南(第四版)M.北京:人民邮电出版社,2005.3 陆枫,何云峰计算机图形学基础(第2版)M.北京:电子工业出版社,2008. 本课程的先修课程是高等数学、线性代数、高级程序设计语言、数据结构。二、教学基本要求与内容安排(一)教学目的与要求通过本课程的学习,要求学生能够对计算机图形学的研究内容及其应用方向有一个全面的认识和了解,了解计算机图形学的研究内容及其与相关学科的关系,掌握一些基本的图形生成方法和图形显示的基本原理,掌握三维实体的基本表示方法、以及三维真实感图形显示方法等内容,为以后学习其他相关课程和从事计算机图形学方面的深入研究及应用打下坚实的基础。(二)教学内容安排教学内容教学要求教学方法重点()难点()学时分配备注讲课实验上机其他第一部分 绪论41 图形学基本概念B2 图形学发展历史C 3 图形学应用与研究前沿C 4图形学研究内容简介 C5 OpenGL的简介及历史C6 OpenGL 数据类型 A7 VC+6.0下运行OpenGL的配置 B第二部分 变换和投影 4 3 1 视图变换 A2 模型变换A3 投影变换 A4 正投影A 5 透视投影A6 程序实例B第三部分 几何图元的绘制2 21 1 点的绘制A2 线的绘制)A3 多边形的绘制A第四部分 坐标变换2311 平移变换、旋转变换和缩放变换A2 投影变换和视口变换B3 程序实例B第五部分 数学基础4 1 坐标系,四象限和八象限B2 点,直线和直线段B3 参数化曲线和曲面B4 点和直线的距离B5 向量的数乘运算B 6反射向量,变换B7点到平面的距离B8多面体和凸面B9极坐标、柱面坐标和球面坐标B10碰撞检测B第六部分 颜色及其混合 4 1 颜色的基本原理A2 混合的基本原理A3 程序实例B 第七部分 光照和着色处理4 421 光照处理A2 材质A 3 光源属性B 4 顶点法向量的计算A5 程序实例B第八部分 事件和交互式编程2 1 事件的定义B2 事件的实现A3 拾取的实现A第九部分 纹理映射441 纹理的定义B2 2D纹理映射, 3D纹理映射A3 纹理映射程序实例B(教学要求:A熟练掌握;B掌握;C了解)三、实验内容序号实验项目内 容 提 要实验学时实验类型每组人数实验要求1三维投影变换自定义一个三角形,实现正投影和透视投影。3设计1必做2基本图形绘制绘制点,线,多边形和曲面2验证1必做3几何变换已知某三角形的三顶点坐标为50.0,25.0,150.0,25.0,100.0,100.0。要求:(1)创建一个长宽分别为600、600的窗口,窗口的左上角位于屏幕坐标(100,100)处。(提示:请试着修改gluOrtho2D函数参数,使得绘制的三角形尽可能居中显示)(2)绘制一个由上述顶点所描绘的三角形,实现该三角形进行下列的几何变化:首先使三角形沿着其中心的x轴,y轴方向缩小50%;然后沿着初始中心旋转90度;最后沿着y轴平移100个单位。 3设计1必做4光照绘制OpenGL程序,显示一个圆环,点光源设在圆环的中心位置,通过键盘操作实现光源的移动,观察光源移动时圆环的显示效果。4设计1必做5纹理绘制一个几何图形,其表面帖上纹理,并使用点光源照射。4综合1必做制订人(签字): 杨斌 审核人(签字): 教 学 进 度 表 20102011 学年第二学期周 数 18 周 计划学时 52 学时讲 课 30 学时 课堂讨论 学时实验课 16 学时 习 题 课 4 学时其他环节 2 学时授课教师姓名杨斌职称 讲师 授课专业网络工程 班级2008级 课程名称 计算机图形学 教材名称 计算机图形学 出版社 机械工业出版社 周次日期周学时其中教学内容摘要(章节名称、讲述的内容提要、实验的名称、课堂讨论的题目等)讲课实验课习题课课堂讨论其他环节第一周2月21日至2月27 日22第一讲:绪论(一)。内容包括:图形学基本概念,图形学发展历史,图形学应用与研究前沿,图形学研究内容简介。第二周2月 28日至3月6日22 第二讲:绪论(二)。内容包括: OpenGL 数据类型,VC+6.0下运行OpenGL的配置。第三周3月7日 至3月 13日422第三讲:变换和投影 (一)。内容包括:视图变换,模型变换,投影变换。实验一:三维投影变换。第四周3月14日 至3月20 日22 第四讲:变换和投影 (二)。内容包括:正投影,透视投影,程序实例。第五周3月 21日至3月27 日422第五讲:几何图元的绘制。内容包括:点的绘制,线的绘制,多边形的绘制。实验一:三维投影变换。第六周3月28日 至4月3 日22 第六讲:坐标变换。内容包括:平移变换、旋转变换和缩放变换,投影变换和视口变换,程序实例。第七周4月4日 至4月10日422习题课,主要讲解几何图元的绘制和坐标变换这两讲的程序题。实验二:基本图形绘制。第八周4月11日 至4月 17日22第七讲:数学基础(一)。内容包括:坐标系,四象限和八象限;点,直线和直线段;参数化曲线和曲面;点和直线的距离;向量的数乘运算;反射向量,变换。第九周4月18日 至4月 24日422 第八讲:数学基础(二)。内容包括:点到平面的距离,多面体和凸面,极坐标、柱面坐标和球面坐标,碰撞检测。 实验三:几何变换。周次日期周学时其中教学内容摘要(章节名称、讲述的内容提要、实验的名称、课堂讨论的题目等)讲课实验课习题课课堂讨论其他环节第十周4月25日 至5月1日22第九讲:颜色及其混合(一)。内容包括: 设置几何物体的颜色,RGB立方体,亮度和色弱,颜色深度,颜色混合与通道,使用混合达到透明效果。第十一周5月2日至5月8日422第十讲:颜色及其混合(二)。内容包括:OpenG中的颜色,颜色定义,使用混合,代码实例。实验三:几何变换。第十二周5月9日至5月15 日22第十一讲:光照和着色处理(一)。内容包括:光照处理,环境光、漫反射光和镜面反射光,表面法向,材质,光源属性, 光源颜色, 位置光等。第十三周5月16日 至5月22 日422 第十二讲:光照和着色处理(二)。内容包括:计算每个顶点的法向,法向的解析计算,全局光照,局部光照和OpenGL,指定和定义光源,代码实例。实验四:光照。第十四周5月23日 至5月29日22习题课程,主要讲解光照和着色处理这两讲教材后面的程序题。第十五周5月30日 至6月5 日422第十三讲:事件和交互式编程。内容包括:事件的定义,事件的实现,拾取的实现实验四:光照。第十六周6月6至6月 12日22 第十四讲:纹理映射(一)。内容包括:纹理图,纹理坐标与空间坐标的对应关系,对象颜色与纹理图颜色的关系,场景图中的纹理映射,创建纹理图, 从图像创建纹理图。第十七周6月13至6月 19日422第十五讲:纹理映射(二)。OpenGL中的纹理映射, 纹理环境,纹理参数获取及定义纹理图,代码实例。实验五:纹理。第十八周6月20至6月 26日22复习课,回顾大纲要求的重要知识点。备注教研室主任签名: 系主任签名: 年 月 日 年 月 日说明:1本教学进度表由主讲教师负责填写,于每学期开学第一周内送交教师所在系,经领导审定、签字后备查。2此表一式三份,其中,任课教师一份,教师所在系一份,教务处一份。第一讲:绪论(一) 一、教学目标 1. 理解图形学基本概念2.了解图形学应用与研究前沿3.了解图形学研究内容 二、重点与难点分析1.重点: 2.难点:无三、教学内容与教学过程 自我介绍(4分钟) 姓名,联系方式,专业方向。介绍本学期课程的内容及安排(6分钟)介绍课程的学习目标、参考书及资料、课程教学目标和内容框架、学习方法、作业与实验、考核方式、上课时间与地点等情况,研究性学习的安排。强调本课程与相关课程的关系。成绩考核方式为:期末成绩+平时成绩,其中期末成绩占60%,平时成绩占40%,平时成绩为:作业成绩+出勤率+上机成绩。演示本次PPT课件,进入主题。 按顺序介绍以下内容(80分钟)教学提示:介绍计算机图形学课程的发展以及与其他课程之间的关系。计算机图形学及其相关概念定义:计算机图形学(Computer Graphics)是研究怎样利用计算机来显示、生成和处理图形的原理、方法和技术的一门学科。IEEE定义:Computer graphics is the art or science of producing graphical images with the aid of computer. 计算机图形学与传统理论关系 :计算几何,计算数学,微分几何,形态学,混沌学,小波理论。计算机图形学的研究对象图形:通常意义上的图形能够在人的视觉系统中形成视觉印象的客观对象都称为图形,包括自然景物、拍摄到的图片、用数学方法描述的图形等等计算机图形学上的图形从客观世界物体中抽象出来的带有颜色及形状信息的可见图形以及不可见的数学/几何描述。图形在计算机中的表示:点阵法是用具有颜色信息的点阵来(枚举)表示图形的一种方法,它强调图形由哪些点组成,并具有灰度或色彩。 参数法是以计算机中所记录图形的形状参数与属性参数来表示图形的一种方法。形状参数(几何要素)方程或分析表达式的系数,线段的端点坐标等属性参数(非几何要素)颜色、材质、线型等发展历史二十世纪50年代(酝酿期)60年代(萌芽期)70年代(发展期)80年代(普及期)90年代(深入发展)应用与研究前沿1图形用户界面介于人与计算机之间,人与机器的通信,人机界面(HCI):软件硬件发展:由指示灯和机械开关组成的操纵界面由终端和键盘组成的字符界面(80年代)由多种输入设备和光栅图形显示设备构成的图形用户界面(GUI)(90年代):PC,工作站,WIMP(W-windows、I-icons、M-menu、P-pointing devices)界面,所见即所得VR技术(发展方向)2计算机辅助设计与制造(CAD/CAM)3科学计算可视化(Scientific Visualization)海量的数据使得人们对数据的分析和处理变得越来越难,用图形来表示数据的迫切性与日俱增1986年,美国科学基金会(NSF)专门召开了一次研讨会,会上提出了“科学计算可视化(Visualization in Scientific Computing)”科学计算可视化广泛应用于医学、流体力学、有限元分析、气象分析当中4虚拟现实(Virtual Reality简称VR)虚拟现实是用计算机技术来生成一个逼真的三维视觉、听觉、触觉或嗅觉等感觉世界,让用户可以从自己的视点出发,利用自然的技能和某些设备对这一生成的虚拟世界客体进行浏览和交互考察。5真实感图形实时绘制物体网格模型的面片简化:对网格面片表示的模型,在一定误差的精度范围内,删除对结果图像贡献小的点、边、面,从而简化所绘制场景的复杂层度,加快图形绘制速度;基于图象的绘制(IBR,Image Based Rendering):不先建立几何模型;它直接从一系列已知的图象中生成未知视角的图象,适用于野外极其复杂场景的生成漫游6野外自然景物的模拟野外场景远远复杂于室内场景,绘制难度更大,方法更趋多样化,主要绘制山、水、云、树、草、火等等,绘制火的粒子系统(Particle System),基于生理模型的绘制植物的方法,绘制云的细胞自动机方法等。计算机图形学的研究内容在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。小结:总结本讲的主要内容作业与实验布置:书面作业:1.名词解释:图形、点阵法、参数法2.图形包括哪两方面的要素,在计算机中如何表示它们?3.阐述计算机图形学、数字图象处理和计算机视觉学科间的关系。4.试列举出几种图形学的软件标准?实验作业:无。四、教学后记 第二讲:绪论(二) 一、教学目标 1.了解OpenGL的简介及历史2. 熟练掌握OpenGL 数据类型 3.掌握VC+6.0下运行OpenGL库的配置二、重点与难点分析1.重点: 2.难点: 三、教学内容与教学过程 1.复习上讲的内容(5分钟) 2.演示本次PPT课件,进入主题。 教学设计:简要讲解OpenGL 的简介和历史(15分钟)重点讲解OpenGL的配置和数据类型(结合实例)(70分钟)以下依次展开讲解:简介OpenGL(Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。这个接口由近二百五十个不同的函数调用组成,用来从简单的图元绘制复杂的三维景象。在电子游戏工业里,它是颇普遍的,而另一种编程接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学视觉化程序和电子游戏开发。发展历史OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。1992年7月,SGI公司发布了OpenGL的1.0版本。OpenGL历经2.0,1.5,1.4,1.3,1.2,1.1,or 1.0多个版本。现在最新的是在2006年8月3日公布的OpenGL version 2.1。 OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些特别兴趣于建立一个统一的普遍可用的API的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox 、NVIDIA、SGI和Sun Microsystems (Microsoft曾是创立成员之一,但已于2003年3月退出)。一般来说,VC6和VS.NET里面就带有GL的基本库VC6:Microsoft Visual StudioVC98IncludeGLVS.NET.2005:Microsoft Visual Studio 8VCPlatformSDKIncludegl一般是Gl.h,Glaux.h,Glu.hLib里也有:OpenGL32.lib,GLu32.lib,GLaux.lib所以开发者在VC下可以使用#include / Header File For The OpenGL32 Library#include / Header File For The GLu32 Library#include / Header File For The Glaux LibraryGL的平台同时OpenGL也适应别的OS和语言在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。可跟据需要下载相关的开发包。 一些命名规则函数:OpenGL核心库(gl);OpenGL实用库(glu)对X窗口系统的OpenGL扩展(glX)举例:void glBegin(GLenum mode);void gluBeginCurve(GLUnurbs* nurb);void glXFreeContextEXT(Display * dpy, GLXContext ctx);GL_POINTS,GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIAN,GL_QUADS,GL_QUAD_STRIP数据类型名void glVertex3s(GLshort x, GLshort y, GLshort z);void glVertex3i(GLint x, GLint y, GLint z);void glVertex3f(GLfloat x, GLfloat y, GLfloat z);void glVertex3d(GLdouble x, GLdouble y, GLdouble z);设置Visual C/C+ 6.0Visual C/C+的工程有两个重要选项: Console (控制台) 和 Win32应用程序将会有两个窗口: 一个控制台窗口, 以及一个 OpenGL 窗口。选择 Win32 仍然可以让你在不需要关心Windows程序设计的情况下编写 GLUT 程序. 你需要做以下设置: 选择 Project - settings;选择 Link 选项卡;从 Category 中选择 Output;在 Entry-point synmbol 文本框中键入 mainCRTStartup。在没使用GLUT的情况下(手动添加link):在你文件头加上#include #include #include 进入Project菜单,选Settings项,弹出 Settings 对话框,选Link项,在 Libraries 栏目中加入OpenGL库:opengl32.lib glu32.lib glaux.libGLUTGLUT ( OpenGL Utility Toolkit ) 举例:在window XP下使用VC6安装GLUT下载glutdlls并解压复制glut32.dll和glut.dll到windowssystem32复制glut.h到.Microsoft Visual StudioVC98IncludeGL复制glut32.lib和glut.lib到Microsoft Visual StudioVC98Lib#include void renderScene(void) /绘制一个简单的二维的三角形 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); void main(int argc, char *argv) glutInit(&argc, argv); /初始化glutglutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); /设置窗口的模式深度缓存,单缓存,颜色模型glutInitWindowPosition(100,100); /设置窗口的位置glutInitWindowSize(320,320); /设置窗口的大小glutCreateWindow(“3D Tech- GLUT Tutorial”); /创建窗口并赋予titleglutDisplayFunc(renderScene);/调用renderScene把绘制传送到窗口 glutMainLoop(); /进入循环等待 通过定义 void glutReshapeFunc(void (*func)(int width, int height)来避免因窗口大小改变时图形的变形;通过定义 void glutIdleFunc(void (*func)(void); 使应用空闲时反复调用函数func。对于window的基本应用:mouse,keyboard,menu,sub window,font等glut里也提供了支持#includefloat angle = 0.0;void changeSize(int w, int h) if(h = 0)h = 1;float ratio = 1.0* w / h;glMatrixMode(GL_PROJECTION);glLoadIdentity();glViewport(0, 0, w, h);gluPerspective(45,ratio,1,1000);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0,0.0f,1.0f,0.0f);void renderScene(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();glRotatef(angle,0.0,1.0,0.0);glBegin(GL_TRIANGLES);glVertex3f(-0.5,-0.5,0.0);glVertex3f(0.5,0.0,0.0);glVertex3f(0.0,0.5,0.0);glEnd();glPopMatrix();angle+;glutSwapBuffers();void main(int argc, char *argv) glutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); /设为双缓冲区, 平滑动画需要 glutInitWindowPosition(100,100);glutInitWindowSize(320,320);glutCreateWindow(Lighthouse 3D - GLUT Tutorial);glutDisplayFunc(renderScene);glutIdleFunc(renderScene);glutReshapeFunc(changeSize);glutMainLoop()小结:总结本讲的主要内容作业与实验布置:书面作业:解释以下函数的作用 glMatrixMode(GL_PROJECTION);glLoadIdentity();glViewport(0, 0, w, h);gluPerspective(45,ratio,1,1000);glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0,0.0,5.0, 1.2);glutInitWindowPosition(100,100);glutInitWindowSize(320,320实验作业:无。四、教学后记第 三讲:变换和投影 (一)一、教学目标 1.掌握视图变换、模型变换和投影变换的含义2.熟练掌握三种变换的OpenGL 函数二、重点与难点分析1.重点: 2.难点:无三、教学过程的具体安排1.复习上讲的内容(10分钟),包括提问学生问题。2.开始本讲的内容 教学设计:(1) 讲解视图变换(27分钟) (2) 讲解模型变换(27分钟)(3) 讲解投影变换(27分钟)以上都结合程序实例讲解。以下依次展开讲解:视图变换1 视图变换( VIEW Transformation ):它类似将照相机指向物体,即确定视点(观察点)的位置和观察方向。一般用的函数为 glu 封装的函数: void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, - 观察点 GLdouble centrex, GLdouble centrey, GLdouble centrez, - 视线方向:从 eye 指向 centre GLdouble upx, GLdouble upy, GLdouble upz - 视图体自下而上的方向) 模型变换2 模型变换 (MODEL Transformation) :它确定模型的位置和方向,对模型进行旋转、平移和缩放。用到三个子函数: glTranslate*(x, y, z) 、 glRotate*(x, y, z) 、 glScale*(x, y, z) 。每个函数都会产生一个矩阵,并右乘当前矩阵。 投影变换3 投影变换( PROJECTION Transformation ):产生一个六面的视图体,把视图体以外的场景剪裁掉,把视图体内的物体、场景作为绘制对象,让“照相机拍摄”。两种投影方式,两个投影函数: glFrustum(left, right, bottom, top, near, far) , glOrtho(left, right, bottom, top, near, far ) 这两个函数的参数非常对称,都是构筑了一个六面体,形成可视范围。它们都产生一个矩阵,并左乘当前矩阵。(当然,还有 glu 的两个函数)。 教学提示 要理解整个过程,关键在理解当前变换矩阵 CTM ,(简称为 C )。它是一个状态概念,应用到 OpenGL 流水线中的每一个定点: P = C*P 。这条等式是对同一个点在两个坐标系体统之间进行转换,从右边的坐标系下的坐标( P )转换到左边的坐标系下的坐标( P )。而矩阵 C 是 4x4 的齐次坐标矩阵,它都蕴含着一个局部坐标系信息:以右边坐标系为参考坐标系统,左边坐标系的位置和方向。 用手工定义一个矩阵,如下(按 OpenGL 矩阵方式定义。与数学定义矩阵的方式转置): CTM16 = a0, a1, a2, a3,/ x 轴的方向向量 a4, a5, a6, a7,/ y 轴的方向向量 a8, a9, a10, a11,/ z 轴的方向向量 a12, a13, a14, a15/ 原点的位置 再来考察当前变换矩阵 CTM ,它是在 OpenGL 流水线中一个模型视图矩阵和一个投影矩阵的复合。 CTM = P*C*M 。(注意到上面提到的左乘右乘了吗?)程序示例#define NUM0.70710678118654746 GLfloat Tmat116 = NUM, NUM, 0.0, 0.0,-NUM, NUM, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0,0.0, 0.0, 0.0, 1.0; GLfloat Tmat216 = 1.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0,1.0, 0.0, 0.0, 1.0, ; void setupRC( void )glClearColor( 0.0f , 0.0f , 0.0f , 1.0f ); glShadeModel(GL_FLAT); void RenderScene( void ) printf( RenderScene n ); glClear(GL_COLOR_BUFFER_BIT); glColor3f( 0.0f , 1.0f , 1.0f );glMatrixMode(GL_MODELVIEW); glLoadIdentity();gluLookAt( 0.0 , 0.0 , 5.0 , /viewpoint 0.0 , 0.0 , 0.0 , / focuspoint 0.0 , 1.0 , 0.0 ); / upvector glutSolidCube( 0.5 ); /原点的参考位置 glMultMatrixf(Tmatr1); / 这个矩阵的动作和下面的两个变换是一样的。glMultMatrixf(Tmatr2);glutSolidCube( 1.0 ); glutSwapBuffers(); void ChangeSize( int w, int h) printf( ChangeSize n ); / 从这里看出,是先调用ChangeSize()的 GLfloatnRange = 10.0f ;if (h = 0 )h = 1 ;GLfloatfRatio = (GLfloat)w / (GLfloat)h; glMatrixMode(GL_PROJECTION);glLoadIdentity(); if (w = h)glOrtho( - nRange,nRange, - nRange / fRatio,nRange / fRatio, 1.0 ,nRange); else glOrtho( - nRange * fRatio,nRange * fRatio, - nRange,nRange, 1.0 ,nRange);glViewport( 0 , 0 ,w,h);glMatrixMode(GL_MODELVIEW);glLoadIdentity(); int main( int argc, char * argv) glutInit( & argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutInitWindowSize( 800 , 600 );glutCreateWindow( example ); glutReshapeFunc(ChangeSize);glutDisplayFunc(RenderScene); setupRC();glutMainLoop(); std:cout Helloworld! std:endl;return 0 ; 对glRotatef(45.0, 0.0, 0.0, 1.0) ,glTranslatef(3.0, 0.0, 0.0); 这两个变换,可以看成: glMultMatrixf(R); glMultMatrixf(T); R,T 都是右乘到 CTM : CTM = CTM * R * T 对模型变换的理解有两种: 、在全局固定坐标系下,对物体进行变换。这时候,我们要以相反的顺序来考虑代码中的变换函数了,它的实际过程是这样 P = CTM *( R*(T* p) 。 首先、对物体进行平移,平移到坐标( 3.0, 0.0, 0.0 )。然后,把物体相对原点绕轴旋转度。 、物体捆绑在局部坐标系下,所有的变换都是坐标系进行的。这时,我们用顺序来看这个变换。 glRotatef(45.0, 0.0, 0.0, 1.0) 产生一个齐次矩阵 R( 这可是代表一个局部坐标系哦 ),即局部坐标系 R 相对刚才开始的坐标系 I (单位矩阵)作了旋转变换,绕旋转了度。 glTranslatef(3.0, 0.0, 0.0) 产生一个齐次矩阵 T (也是代表了一个局部坐标系),相对 R 坐标系沿轴( R 系)平移了个单位,得到了自己的局部坐标系 T 。最后在这个局部坐标系 T 下画了 Cube 。 代码中的 Tmat = R * T ,它也是从 T 坐标系变换到 R 坐标系,再变换到最后的模型视图的世界坐标系。 小结:总结本讲知识点。作业与实验布置:书面作业:解释视图变换、模型变换和投影变换的联系和区别。实验作业:实验一:三维投影变换 内容:自定义一个三角形,实现正投影和透视投影。 四、教学后记第 四 讲:变换和投影 (二)一、教学目标 1.熟练掌握正投影和透视投影的含义2.会用利用两种投影编写相关的程序二、重点与难点分析1.重点: 2.难点: 三、教学内容与教学过程教学设计: 1.复习上讲的内容(10分钟),包括提问学生问题。2. 结合程序实例讲解正投影(40分钟)3. 结合程序实例讲解透视投影 (40分钟)以下是内容依次展开讲解:投影变换是一种很关键的图形变换,OpenGL中只提供了两种投影方式,一种是正投影,另一种是透视投影。不管是调用哪种投影函数,为了避免不必要的变换,其前面必须加上以下两句: glMAtrixMode (GL_PROJECTION);glLoadIdentity(); 事实上,投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。本节将详细讲述投影变换的概念以及用法。 正投影(Orthographic Projection) 正投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。 OpenGL正投影函数void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top, GLdouble near,GLdouble far) 它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行于Z轴,且视点朝向Z负轴。这意味着物体在视点前面时far和near都为负值,物体在视点后面时far和near都为正值。OpenGL正投影函数void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top) 它是一个特殊的正投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省值分别为-1.0和1.0,所有二维物体的Z坐标都为0.0。因此它的裁剪面是一个左下角点为(left,bottom)、右上角点为(right,top)的矩形。程序实例GLfloat gfNear = 1.0;/这里进行所有的绘图工作void SceneShow(GLvoid) glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION);glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, gfNear, -1.0); glPushMatrix(); DrawSmoothColorPyramid(0.5);glPopMatrix();glFlush(); Int Game_Main(void*parms = NULL, int num_parms = 0)DWORD dwS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 对新手心理辅导师的服务策略研究及其实施效果分析报告
- 咖啡店选址与产品开发经营计划
- 产品设计到市场推广全面解析智能硬件的运作
- 高档小区的个性化幕墙装修设计与工作计划
- 宠物美容师AI基础题
- 财政监管岗位面试准备手册
- 充电桩与便利店协同发展
- 环境设计中绿植与水体的景观造型研究
- 人力资源管理师三级岗位胜任力提升计划与实施方案
- 广汉禁毒迎检通知书
- 加油站季节性安全检查台账(每季度)
- 大学生创新创业基础(创新创业课程)完整全套教学课件
- 教师培训课件:《班会的设计与实施(小学)》
- 大学生职业生涯发展报告
- 【正版授权】 IEC 60811-203:2012 EN-FR Electric and optical fibre cables - Test methods for non-metallic materials - Part 203: General tests - Measurement of overall dimensions
- 《陆上风力发电机组钢混塔架施工与质量验收规范》
- 人民群众是历史的创造者
- 2024年温州工业与能源集团招聘笔试参考题库附带答案详解
- T-CPIA 0050-2023 T-CSTE 0215-2023 质量分级及“领跑者”评价要求光伏并网逆变器
- 广告学专业大学生职业规划
- GIS组合电器课件
评论
0/150
提交评论