APP下载

“计算机图形学”教改实践

2010-12-31杨长强郑永果

计算机教育 2010年24期


  摘要:分析计算机图形学教学过程中出现的问题,提出改进的教学方法,包括案例教学、在课堂教学中应用OpenGL、为不同层次的学生制定不同的开发环境和要求,开发教学演示软件等,教学效果显著。
  关键词:计算机图形学;教学改革;教学演示软件
  
  计算机图形学是计算机应用的重要分支之一,其主要内容是用计算机表示、生成、处理和显示图形[1-2]。我院计算机图形学课程的培养目标是:学习图形的计算机生成算法,处理方法和显示流程;进一步培养学生的程序开发能力;对计算机图形学的主要分支和发展动向有一定的了解。
  1教学过程中存在的问题
  在计算机图形学教学中,如果按照传统的教学方法在课堂上讲解图形的各种生成算法、处理技术和显示过程,必然涉及到大量的公式推导,并要求有比较强的空间想象能力,同学们学习比较困难,兴趣不高,教学效果很差[3-4]。通过课下与同学们进行交流,笔者发现他们对计算机图形学这门课程缺乏足够的认识,不了解计算机图形学在计算机科学中所处的位置,不知道如何使用课堂上学习过的各种算法。仔细分析上述问题,笔者认为其中的重要原因是理论教学与实践严重脱节。为了改变这种状况,提高教学效果,我们改进了教学方法。
  
  2教学方法的改进
  2.1课堂教学中引入应用实例
  随着计算机软、硬件的飞速发展,计算机图形在我们的周围已经得到了广泛的应用,如广告设计、家庭装饰设计、网站制作、娱乐领域的各种游戏制作、电影后期处理等。于是在每堂课教学前,有意识的搜集一些与本节课程内容相关的应用实例,在教学过程中将这些实例引入课堂,既可以提高同学对本节课内容应用的认识,又可以提高他们的学习兴趣。例如在教授图形变换一节时,首先打开几个图形应用软件(如AutoCAD2000、3DS MAX等),演示其中的平移命令、比例命令、旋转命令等几个与平移变换、比例变换、旋转变换相关的操作,然后启发同学们思考这些命令在计算机中是如何实现的。这样,同学们在兴趣的引导下,仔细分析了各种变换的推导过程,理解了这些变换的作用。课堂的举例甚至可以涉及到当前流行游戏(如反恐精英、魔兽等),引导他们理解场景在计算机中是如何变换的,游戏中角色的走动是如何实现的,等等。同学们明白游戏的制作原理的同时,还学会了计算机图形学的理论知识,也深刻地体会到计算机图形学在现实应用中的重要作用。
  2.2课堂教学中引入相关OpenGL函数
  计算机图形学几乎所有的章节都有对应的OpenGL实现函数,将OpenGL引入课堂,不但可以帮助同学们理解课堂上的理论知识,还可以让同学们掌握具体的开发手段。计算机图形学中二维图元的生成算法一般可以用传统的教学方法解释清楚,对于图形变换、投影、三维实体表示、曲线曲面、光照模型与真实感图形绘制等图形学教学内容,仅利用课堂讲解很难产生好的教学效果,因为这部分内容涉及较多的数学推导,并且要求同学们要有较好的空间想象能力,以便理解由数学推导得出的实际空间结果,同学们掌握起来难度较大。将OpenGL引入课堂后,我们可以利用其相关的函数将数学推导的中间结果和最终结果展示出来,帮助同学们理解相关的理论推导。同时可以使同学们掌握一定的OpenGL知识,提高其开发能力。
  例如,在教授投影变换一节时,由于该节涉及到多种投影变换,课堂上首先要解释清楚各种投影变换的本质区别,接下来要推导各种投影的投影坐标计算公式,这些推导涉及到大量的矩阵运算,并且很难想象出其最终的空间结果,很容易使同学们产生枯燥的情绪。我们在教学过程中,利用OpenGL程序实现各种投影变换的空间结果,帮助同学们理解各种变换。比如,在讲解平行投影与透视投影的概念区别时,在OpenGL中分别由gluPerspective()与glOrtho() 两个函数生成图1的结果帮助同学们理解相关概念。
  对于较难理解的灭点的演示可以利用函数glRotate()实现,结果如图2所示。
  对于不太好想象出投影结果的正轴测投影,利用glOrtho()生成平行投影环境,然后设置gluLookAt()函数中的参数,使之生成出各种投影所要求的投影面,就可以产生出我们需要的投影结果。图3为等轴测、等二测和等三测的投影结果。其中等二测和等三测结果并不唯一。
  在课堂上演示具体的程序及其运行结果,既可以帮助同学们理解相关的概念,又提高了他们的程序开发能力和学习主动性。
  2.3为各种层次的学生提供不同的开发环境
  单纯要求同学们掌握理论知识并不是教学的最终目的,如果同学们能够实现这些算法,不但能够加深对算法的理解,还能够培养同学们的开发能力,使他们能够更加自信地走向社会。所以充分利用好计算机图形学自带的实验课时,对加强课程理论理解和学生能力培养有着很重要的作用。
  在实验课上,由于专业的不同,同学们的编程能力差别很大,信息班有的同学可以用VC++进行算法实现,数学班有的同学甚至还没有C语言编程的经验,这给实验课的安排带来了一定的难度。对此,我们采用的解决方法是首先确保底线,使同学们至少可以先进行算法实现。为此,我们统一提供了初始化好的绘图环境和DEMO程序,这样初次编程的同学可以直接进入该环境中进行算法的编写与调试,当这些初次编程的同学们可以编写和运行自己的程序时,无疑
  
  使他们的能力培养进入了一个新的起点。对于已经有相当程序开发能力的同学,在要求他们完成算法实现的基础上,引导他们自学OpenGL,给他们介绍一些高级的开发手段,比如VC++结合OpenGL进行产品开发等,为他们的开发能力进一步发展指明方向。这样的安排使得各个层次同学的能力培养和学习热情得到很大的提高。
  2.4制作教学演示系统[5]
  虽然针对各个算法在课堂上进行单独的程序演示有其独特的优势,但这种教学方法首先要求教师本人有一定的开发能力,并且由于多媒体教室并不专用,程序的运行环境得不到保证。为了进一步提高教学效果,我们在学校教务处和学院的支持下进行了《计算机图形学教学演示系统》的开发,该系统包含了计算机图形学这门课程大部分基本算法,并且可以方便添加新的算法实现代码。
  由于该系统主要用来进行辅助教学,因此它必须与教学实践相适应。此系统以可见点模拟象素,以分步形式完成算法,算法实现过程中变量的变化也在对话框中给出。系统界面及直线生成算法、填充算法和几何变换的实现示例见图4。
  3结语
  通过教学改革,同学们不但深入理解课堂上教授的算法,还积极查阅其他教材的相关算法,有的同学甚至对某些算法给出自己的改进想法。给笔者印象很深的是在实现直线的逐点比较生成算法时,几位数学班的同学提出,如果将“从起点到终点进行比较”改为“从起点和终点同时向中点进行比较”,算法效率将提高一倍,在此基础上增加步长,则可以进一步提高效率。同学们的思路对笔者也产生了很大的启发。通过和同学们的讨论,达到了“教学相长”的效果。实验课上同学们通过自己的理论知识和开发手段,陆续完成了自由曲线、填充与裁剪等内容的各种算法的实现。新教学方法的实施,提高了课堂教学效果,为达到课程的培养目标提供了有力的保障。
  
  参考文献:
  [1]