《计算机图形学实验指导书--xhp》由会员分享,可在线阅读,更多相关《计算机图形学实验指导书--xhp(56页珍藏版)》请在金锄头文库上搜索。
1、计算机图形学实验指导书软件学院软件理论系2013年2月22日前 言随着计算机科学与技术的迅猛发展,特别是大规模集成电路和超大规模集成电路技术的飞速发展,计算机已经成为一种高速、费用低的生成图形的有效工具。计算机图形学作为利用计算机生成图形的技术,已经越来越广泛地在各个领域得到应用。随着计算机图形学应用领域的拓宽和应用水平的提高,人们越来越重视对该项技术的研究和利用。当今,计算机图形学已经成为了计算机科学技术领域的一个重要研究方向,并被广泛的应用于科学计算、工程设计、医药、工业、艺术、娱乐业、广告业、教育与培训、商业和政府部门等。鉴于计算机图形学的重要性和应用的广泛性,计算机科学与技术专业将其设
2、置为专业必选的选修课。它主要是研究用计算机及其图形设备来输入、表示、变换、运算和输出图形的原理、算法及系统。通过对本课程的学习,使学生对计算机图形学有一个完整的了解,并为进行计算机图形学应用和研究打下扎实基础。为了让学生深入理解各种图形算法和相关理论知识,贯彻学生学习知识是为了应用知识、应用就要追求创新应用的思想和意识,设计了8个实验。通过实验,使学生更加深入的理解计算机图形系统的工作机理和基本图形生成和处理算法。实现语言为Turbo C 、Visual C+ 6.0、OpenGl,或其它学生掌握的高级语言。这些实验是对学生的一种多全面训练。它着眼于原理与应用的结合,使学生学会如何把书上学到的
3、知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。在实验过程中,能够培养学生的自学能力、团队协作能力、解决问题能力、软件开发能力等多种能力。目 录实验要求及实验报告规范1实验一 交互式绘图技术的实现2实验二 直线、圆弧及椭圆弧的生成算法5实验三 多边形的区域填充7实验四 二维几何变换9实验五 裁剪算法10实验六 三维图形变换11实验七 曲线与曲面12实验八 真实感图形绘制14参考文献15附录A C程序绘图基础16附录B Visual C+图形程序设计23一、实验目的23二、实验任务(需要课外学时8学时)23三、基础知识和
4、实验步骤23(一) Visual C+ 6.0应用程序开发方法23(二) 图形设备接口和图形程序设计26(三)鼠标编程36(四)菜单程序设计42四、实验总结46附录C OpenGL图形程序设计472 - 实验要求及实验报告规范一、实验的性质、目的和任务本实验是与本专业课计算机图形学相配套的,通过计算机图形学实验教学,引导学生由浅入深地掌握计算机图形学理论与相关算法,具有一定实践体会和相关的编程能力及图形处理的能力,为毕业设计和毕业后从事计算机绘图、计算机辅助设计、辅助教学、辅助工程、图形处理等打下基础。本实验教学主要内容是要求学生编程实现各种图形的绘制,强化学生的程序设计能力和程序调试能力,使
5、学生巩固所学各种图形的生成算法的理论知识。二、实验基本要求实验基本要求:本实验教学的基本要求是: 实验课前,学生必须预习实验指导书中的实验内容,了解本次实验的目的、要求、原理、算法、步骤等,准备好实验的程序设计算法描述与关键分析内容; 准备好程序和测试数据,上机调试、运行; 完成每个实验后进行结果对比分析,完成实验报告。实验内容要求:(1) 认真分析题目的条件和要求,复习相关理论知识,选择适当的解决方案和算法;(2) 编写上机实验程序,作好上机前的准备工作;(3) 上机调试程序,绘制图形,验证算法的正确性;(4) 分析和解释运行结果;(5) 程序调试完后,须由实验辅导教师在机器上检查运行结果;
6、(6) 按照要求书写每次实验的实验报告。 (7) 要求独立完成上述各项。三、实验环境实验设备:计算机实验使用的语言:C或Visual C+、OpenGL四、考核与报告(1) 本课程的评分方法是考查,实验作为平时成绩占学期期末总成绩的30%。(2) 每个实验完成后必须完成相应的实验报告。实验成绩组成为:实验报告占40;按照教学计划的实验,现场编程序,演示计算结果占50;创新占10。五、实验报告格式实验报告在书写过程中应该将以下问题写清楚1、 实验目的:2、 实验要求:3、 实验内容:4、 实验题目: 5、 设计原理与思想: 6、 对应程序:7、 实验结果(输出图形)及其分析: 8、 计算中出现的
7、问题,解决方法及体会:实验一 交互式绘图技术的实现一、实验目的1、掌握各种交互式绘图技术及其原理;2、掌握Visual C+集成编程环境的使用,图形设备接口和常用图形程序设计、鼠标编程、画刷与画笔以及菜单设计等,能够利用Visual C+实现各种交互式绘图技术;3、了解OpenGL的基本操作及其库函数,能够通过OpenGL库函数实现各种交互式绘图技术。二、实验要求1、用Visual C+设计一个简易的交互式绘图软件,能够实现铅笔绘图,以及直线、圆等基本图形的绘制;2、能够实现橡皮筋画线或圆、拾取、拖动、撤销和重做等交互式技术;3、能够用OpenGL函数库实现橡皮筋技术和拾取操作。三、算法提示(
8、一)铅笔绘图的实现:1、建一个MFC AppWizard(exe)工程(具体操作见附录B),新增“绘图”菜单,并在该菜单下添加子菜单“铅笔”;2、向视图类中添加1个菜单消息响应函数和3个鼠标消息响应函数,并输入时间处理程序代码。(1)新增成员变量: public: int drawMode; /画图模式,1表示铅笔 int isDrag; /鼠标是否是拖动,1表示拖动,0表示移动 CPoint p0; /铅笔的起点(2)初始化变量:CMy11View:CMy11View()/ TODO: add construction code here drawMode=0; isDrag=0;(3)在消
9、息响应函数中添加代码void CMy11View:OnPen()/“铅笔”菜单响应函数/ TODO: Add your command handler code here drawMode=1; /设置为铅笔模式void CMy11View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default isDrag=1; /设置为拖动 p0=point; /记下起点CView:OnLButtonDown(nFlags, point);void CMy
10、11View:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default isDrag=0; /设置为移动CView:OnLButtonUp(nFlags, point);void CMy11View:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if(isDrag & drawMode=1) /
11、如果是鼠标拖动,且是铅笔模式 CDC* pdc=GetDC(); pdc-MoveTo(p0); pdc-LineTo(point); p0=point; ReleaseDC(pdc); CView:OnMouseMove(nFlags, point);(4)编译运行程序,验证运行结果。(二)橡皮筋画直线的实现(1)并在“绘图”菜单下再添加子菜单“直线”,添加“直线”菜单响应函数,并编写代码void CMy11View:OnLine() /“直线”菜单响应函数/ TODO: Add your command handler code heredrawMode=2; /设置为绘制直线模式(2)新
12、增成员变量CPoint p1;(3)修改OnLButtonDown以及OnMouseMove函数的代码:void CMy11View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultisDrag=1;p0=point;p1=point;CView:OnLButtonDown(nFlags, point);void CMy11View:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add yo
13、ur message handler code here and/or call defaultif(isDrag) /鼠标拖动CDC* pdc=GetDC();switch (drawMode)case 1:pdc-MoveTo(p0); pdc-LineTo(point);p0=point;break; /铅笔绘图case 2: pdc-SetROP2(R2_NOTXORPEN); /采用异或模式绘图 pdc-MoveTo(p0); pdc-LineTo(p1); /擦除原直线 pdc-MoveTo(p0); pdc-LineTo(point);p1=point;break; /橡皮筋画直
14、线ReleaseDC(pdc);CView:OnMouseMove(nFlags, point);(4)编译运行程序,验证运行结果。(三)OpenGL中橡皮筋技术与拾取操作的实现,见教材62-70页。四、实验结果、分析和总结1对程序进行分析和比较,你还能提出哪些改进和扩充?例如:其他交互式绘图技术的实现。2总结从本次实验中学到了那些知识点或者有哪些感受?实验二 直线、圆弧及椭圆弧的生成算法一、实验目的1、几种直线生成算法的比较,特别掌握用Bresenham直线生成算法。2、几种圆弧生成算法的比较,掌握Bresenham圆弧生成算法。3、几种椭圆弧生成算法的比较,掌握Bresenham椭圆弧生成算法。4、掌握线型与线宽处理技术。二