VC++6.0MFC怎么将所绘图形的平移与旋转平移,旋转,缩放,移动

VC++实现图形的旋转,平移,缩放
[问题点数:40分,结帖人LZ637]
VC++实现图形的旋转,平移,缩放
[问题点数:40分,结帖人LZ637]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年1月 VC/MFC大版内专家分月排行榜第二
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
匿名用户不能发表回复!|没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 5849 人关注过本帖
标题:求助:关于VC++6.0图形显示的头文件及库函数
等 级:新手上路
&&问题点数:0&&回复次数:4&&&
求助:关于VC++6.0图形显示的头文件及库函数
无论是文本屏幕界面,还是图形图象显示,VC++与TC都有很大差异。
在TC中能编译成功的程序,在VC++里就不可以编译。
应该是两者的头文件和库函数不一致。
由于VC++可以支持中文,所以想用VC++进行图形设计。
请问大家,怎么解决这个问题呀?!
搜索更多相关主题的帖子:
&&&&&&&&&&
等 级:贵宾
威 望:26
帖 子:956
专家分:18
DOS下的? 创建控制台平台的程序应该可以兼容,WIN32的话,全部用HDC,创建工程时,就可以直接用了,不需要再额外添加其它头文件
等 级:新手上路
回复 2# 的帖子
啊?~没听懂~
就是微软的VC++6.0呀,怎么创建文件?
他的库函数和TC一样么?
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
创建时选“控制台程序(Win32 Console Application)”就可以用C语言的在DOS模式下的绘图库graphics.h
如果要用GDI绘图,可以选MFC AppWizard或Win32 Application。具体参见wingdi.h或MSDN
天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
来 自:武汉
等 级:论坛游民
帖 子:63
专家分:71
不过还是不够详细啊
把简单做到纯粹,自然有生活的成就。
游戏开发吧诚邀各位的驻足!
版权所有,并保留所有权利。
Powered by , Processed in 0.033695 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights Reserved您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
计算机图形学试验指导书.doc 61页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
《计算机图形学》
实 验 指 导 书
傅由甲 卢宇 编
重庆理工大学计算机科学与工程学院
2008年10月
1 OpenGL与三维图形 1
1.1 OpenGL介绍 1
1.2 OpenGL函数的语法 3
1.3 OpenGL是状态机 4
1.4 OpenGL相关的函数库 4
1.5 OpenGL的缓冲区 4
2 Microsoft Visual C++ 6.0 MFC编程基础 6
2.1 MFC事件驱动简介 6
2.2 MFC事件驱动编程 6
2.3 在VC下实现OpenGL程序的编译 12
Windows操作系统图形开发基础 13
一、实验要求和目的 13
二、相关知识提要 13
三、实验内容及步骤 15
四、实验习题 18
基本光栅图形生成 19
一、实验要求和目的 19
二、相关知识提要 19
三、实验内容及题目 22
图形变换 24
一、实验要求和目的 24
二、相关知识提要 24
三、实验内容及步骤 26
四、实验习题 27
实验四 交互式绘图技术 28
一、实验要求和目的 28
二、实验内容及步骤 28
三、实验习题 33
实验五 光照处理 34
一、实验要求和目的 34
二、相关知识提要 34
三、实验内容及步骤 37
四、实验习题 40
实验六 纹理映射 41
一、实验要求和目的 41
二、相关知识提要 41
三、实验内容及步骤 44
四、实验习题 45
实验七 曲面生成 46
一、实验要求和目的 46
二、相关知识提要 46
三、实验内容及步骤 49
四、实验习题 54
综合实验(供优秀学生选做) 55
一、实验要求和目的 55
二、实验内容 55
三、实验步骤 55
1 OpenGL与三维图形
1.1 OpenGL介绍
我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,必须能在三维空间描绘这些物体。最近几年计算机图形学的发展使得三维表现技术得以形成,这些三维表现技术使我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization) 技术。OpenGL已被认为是高性能图形和交互式视景处理的标准,目前包括ATT公司UNIX软件实验室、IBM公司、DEC公司、SUN公司、HP公司、Microsoft公司和SGI公司在内的几家在计算机市场占领导地位的大公司都采用了OpenGL图形标准。值得一提的是,由于Microsoft公司在Windows NTWindows97及后续版本中提供OpenGL图形标准,OpenGL在微机中广泛应用,人们可以在微机上实现三维图形应用,如CAD设计、仿真模拟、三维游戏等。OpenGL实际上是一种图形与硬件的接口。它包括了10多个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互。为了实现一个完整功能的图形处理系统,设计一个与OpenGL相关的系统结构为:其最底层是图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,第五层为应用软件。
由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,OpenGL应用程序具有广泛的移植性。因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。
OpenGL作为一个与硬件独立的图形接口,它不提供与硬件密切相关的设备操作函数,同时,它也不提供描述类似于飞机、汽车、分子形状等复杂形体的图形操作函数。用户必须从点、线、面等最基本的图形单元开始构造自己的三维模型。
OpenGL提供了以下的对三维物体的绘制方式:
绘图方式(wireframe)--这种方式仅绘制三维物体的网格轮廓线深度优先绘图方式(depth_cued)--用方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗些反走样绘图方式(antialiased)--用方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐平面消隐绘图方式(flat_shade)--对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理光滑消隐绘图方式(smooth_shade)--对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实加阴影和纹理的绘图方式(shadows,textures)--在模型表面贴上纹理甚至于加上光照阴影,使得三维景观象照片一样运动模糊的绘图方式(motion-blured)--模拟物体运动时人眼观察所感觉的动感现象大气环境效果(atmosphere-effects)--在三维景观中加入如雾等大气环境效果,使人身临其境深度域效果(depth-of-effects)--类似于照相
正在加载中,请稍后...当前位置: >>
计算机图形学实习报告 3 陈秋磊
实习报告实习名称: 班 学 姓 级: 号: 名:计算机图形学实习 10012 班 3 陈秋磊 5栋 机房实习地点: 实习指导教师:付仲良实习时间:2012 年 6 月 25 日至 7 月 1 日遥感信息工程学院 目录一、实习目的与意义 ....................................................................................................................................... 4 二、实习主要内容 ........................................................................................................................................... 4 1、AutoCAD 软件操作 ..................................................................................................................................... 4 (1)简单图形绘制 ................................................................................................................................. 4 (2)图形的基本编辑 ............................................................................................................................. 4 (3)文字及填充 ..................................................................................................................................... 4 (4)三维图形绘制 ................................................................................................................................. 4 2、基于 VC6.0 下的计算机图形学程序编写 .................................................................................................. 4 (1)画直线、画多边形、画圆、画字符 ............................................................................................. 4 (2)对多边形进行填充 ......................................................................................................................... 4 (3)图形裁剪 ......................................................................................................................................... 4 (4)图形的几何变换 ............................................................................................................................. 4 (5)三维图形的消隐及着色 ................................................................................................................. 4 三、实习的主要过程 ....................................................................................................................................... 4 第一部分 AutoCAD 软件操作 ......................................................................................................................... 4 (1)简单图形绘制 ................................................................................................................................. 5 (2)图形的基本编辑 ............................................................................................................................. 7 (3)文字及填充 ..................................................................................................................................... 9 (4)三维图形绘制 ............................................................................................................................... 12 第二部分 基于 VC6.0 下的计算机图形学程序编写 .................................................................................... 16 (1)配置 ............................................................................................................................................... 16 (2)画直线、画多边形、画圆、画字符 ........................................................................................... 17 (3)对多边形进行填充 ....................................................................................................................... 19 (4)图形裁剪 ....................................................................................................................................... 202 (5)图形的几何变换 ........................................................................................................................... 20 (6)三维图形的消隐及着色 ............................................................................................................... 21 四、实习的主要体会 ..................................................................................................................................... 22 成绩评定 ......................................................................................................................................................... 253 一、实习目的与意义这次计算机图形学实习是在机房实习,我们所采用的是 CAD 和 VC6.0 的软件来进行实习, 通过 CAD 制作二维和三维的模型,通过 VC 编程实现一些图像的变化。通过对 AutoCAD2004 与 VC 系统的应用实 习,熟悉其的基本功能及操作特点,掌握基本的制作过程。通过本次实习,学生应能熟练使用 AutoCAD 软件、建立初步面向对象编程的基本概念、以及学会使用 VC 编程语言。二、实习主要内容1、AutoCAD 软件操作(1)简单图形绘制 (2)图形的基本编辑 (3)文字及填充 (4)三维图形绘制2、基于 VC6.0 下的计算机图形学程序编写(1)画直线、画多边形、画圆、画字符 (2)对多边形进行填充 (3)图形裁剪 (4)图形的几何变换 (5)三维图形的消隐及着色三、实习的主要过程第一部分 AutoCAD 软件操作AutoCAD 软件能处理相当多的图像,广泛应用于土木建筑等。我们在绘图之前,首先 要对软件进行配置。通过这些配置来实现工具栏之类的快捷运用。4 (1)简单图形绘制 所有的图形都是用简单图形绘制组合修改而成,头一天我们由熟悉软件的启动和设置开 始,按照指导书上的指示,采用边完成简单图形组合边学习各种命令的方式熟悉软件的各种 基本画图功能,如 POINT(点)、LINE(线)、CIRCLE(圆)、ARC(圆弧)、DONUT(圆 环)、RECTANGLE(矩形)、POLYLINE(多段线)的绘制。 由于指导书说明相当详细, 还有例子来说明。所以我们要做仅仅是这图形应该怎么构成。下面是几个例子: 例子 一: 基本绘图环境设置的方法及步骤 (1) 设置幅面 (2) 使幅面充满屏幕 在里面我们也可以采用相对坐标和极坐标来实现简单定 位,这样避免了计算的麻烦。这样就能方便的实现复杂图形的简单实现。 例子二: 我们通过 PLINE 来直接实现轮廓的绘制,在绘图的时候只需要绘制一半,通过 MIRROR 来实现对称的复制例子 三:5 我们的任务画右边所示的图形,用 PLINE 的命令,能做到画圆弧,在画完外 部轮廓 之,画上两个圆就完成了图形。 上述图形也能进行四分之一的镜像方法来节省工作量。 例子 四: 重新设置幅面 绘制所示的图形,圆环外圆直径为 140,内圆直径 为 120 绘制五角形的时候我们采用端点捕捉来实现。我们 在画完五边形后端点捕捉划线。 删除五边形 用 ERASE 命令删除五边形。 绘制圆环(如图 3-1c 所示) 区域填充 用 SOLID 命令填充五角形区域。 命名并存盘 例子 五:我们在画如图所示的图形时,我们要通过添加辅助线来实现的图形的简单绘制。通过 辅助线和极坐标的角度绘制,我们能很快完成图形。 其他 例子:6 (2)图形的基本编辑 我们在绘制复杂图形的时候要采用一些较为复杂些的方式。下面同样举例说明: 例子 一: 设置绘图界限 240×180。 绘制图形 将点类型设置为 2(PDMODE),在四个圆心处画点 用 CIRCLE 命令分别以 ApBp Cp D 为圆心画圆 重复操作绘制出另外的圆 BpCp D。 用 CIRCLE-TTR 形式绘出圆 1p2p 3p4 重复操作绘制出另外的圆 2p 3p4。 用 TRIM 命令剪切圆的多余部分线段完成圆的剪切 重复操作完成圆 2p3p4p ApBp Cp D 的剪切。 用 CIRCLE 命令分别以 ApBp C 为圆心画直径为 20 的圆。 用 ERASE 命令删除圆心点 例子 二:7 在绘制上述图形时,我们通过对指导书上的例子进行研究 ,分析图形标注的含义 ,毕 竟,上面的很多标注是给已经被剪切掉了的图形的,所以我们的任务是将本来剪切掉的图 形还有辅助线复原,只有复原以后我们才能简单作图。 最终将图像完美呈现,学会了利用 多个相切的圆来绘制曲线, 使用 TRIM 命令实现辅助线和辅助圆的消除 。通过本次练习熟练 掌握辅助线和辅助圆的绘制和消除。 例子 三:我们在绘制如图所示的 铣刀平面图时,发现很多零件都是有对称关系的,可以恰当选 择对称抽,利用辅助线进行镜像变换,可大大加快作图速度。 我们也能采用旋转的方式来 绘制图形。在绘制这平面图时,我们大家琢磨了一些时候才发现这些问题。 例子 四: 用 LINE 命令绘制对称轴线过程略。 用 PLINE 命令绘制对称轴线上半部分轮廓线 (倒角不画出 )过程略。 倒角 将左端倒角 将右端倒角:用相同方法将右端倒角。8 补线 将左端和右端倒角补竖线。 用 MIRROR 镜像命令制作另一半图形 用 PLINE 命令绘制腰圆图形 在图形以外绘制键槽的腰圆图形。 用 COPY 命令复制键槽腰圆图形 用 MOVE 命令平移腰圆图形 其他 例子:(3)文字及填充 我们在绘制图形的通时应该对图形进行标注。标注能帮我们检验是否和设计图上的图 形一致,通过标注我们能判断图形绘制成功与否。在标注的时候,我们应该学会建立图层 来分层对图形标注。因此我们在绘制前就应该想好图形应该有几个图层。一般我们有 Obj, Hatch,Dim 等图层。下面是几个实例: 例子 一: 设置图层、颜色、线型及线型比例 (1) 图层的设置 通过 Command: Layer(Ddlmodes、LA) ↓、Format→Layer…或在 Object Properties(实体 特性)工具条上,单击 Layers 图标按钮,调出 Layer Properties Manager(图层特性管理器)对话 框。 单击 New 按钮,在对话框中央图层列表框中,在 Name 中输入层名 “细实线”;单击 Continu-ous 项,在弹出的 Linetype Manager 对话框中为图层设置线型;单击 White 项,在弹 出的 Select Color 对话框中为图层设置颜色;单击 Default 项,在弹出的 LineweightSettings 对话框中为图层设置线宽。9 重复操作,建立粗实线、点划线、虚线、剖面、文字等图层。 根据需要可设置图层的不同状态。 (2) 设置线型比例 Command:Ltscale(LTS) ↓ 提示:LTSCALE Enter new linetype scale factor&当前值&:10↓ 也可以利用 Linetype Manager 对话框 Details 选项,“Global scale factor&编辑框设置全局 线型比例。 将主视图改为全剖视图 (1) 绘制主视图和俯视图 在绘图过程中.当绘制不同线型的线段时,应及时进行图层的转换。 绘图过程略。 (2) 将主视图改为剖视图 将虚线改为粗实线有以下 几种方法: 1)改变虚线所在的图层为粗实线图层。 2) 用 CHANGE 命令。 3) 用 PROPERTIES 命令。 4) 用 MATCH PROP(MA)命令或通过下拉菜单 Modify→Match Properties。 5) 在 Standard Toolbar 工具条中,单击 Match Properties 图标按钮。 (3) 图案填充 1) 调用 BHATCH 命令,此时在屏幕上弹出 Boundary Hatch(图案填充 )对话框。 2) 图案填充设置,在 Boundary Hatch(图案填充)对话框的 Quick 选项对话框中,在 Type 选择框内选择 Predefined 图案填充类型,在 Pattern 选择框内选择 ANSI31。 3) 在 Boundary Hatch(图案填充)对话框的 Advanced 选项对话框中,在图案填充方式, 即 Island detection style(岛检测类型)中,选择 Normal(普通)填充方式。 4) 选择填充边界,单击 Pick Points 按钮,选择图案填充区域内一点确定填充区域边 界,此时屏幕出现提示: Select internal point:(用光标在要进行图案填充的封闭区域内点取一点 )10 Select internal point:(继续用光标在要进行图案填充的封闭区域内点取一点 ) ……(继续选择图案填充区域 ) Select internal point:↓(结束图案填充区域选择,返回对话框形式 ) 填充区域边界变为虚线显示。 5)填充图案预览,单击 Boundary Hatch (图案填充)对话框中左下角的 Preview 按钮,对 话框消失,屏幕上显示在填充区域内的填充图案,此时填充图案边界以虚线形式显示。并 在命令提示行显示提示: &Hit enter or right―click to return to the dialog)(按回车键或单击鼠标键可返回到对话框 ) 6)完成图案填充。单击 Boundary Hatch (图案填充)对话框中的 OK 键,完成图案填充操 作。其他 例子:11 例子 二:我们在对上述图形进行标注的时候,我们采用的是在 DDIM 中进行设置。箭头大小 3 文字大小 3 引线 12 半径加引线等参数。在最后的时候我们要把它设为当前。 其他 例子:(4)三维图形绘制 三维图形的绘制对我们是一个很大的考验。因为三维图形绘制的时候需要我们又很强 大的立体感官。我们一般是采用的是四个相等视图,即分别为俯视图,西南等轴,主视图 和左视图。我们绘制的时候要选好视图和自己的视角。首先分析图形的时候我们要三维立 体的对设计图里面的标注进行想象和计算。我们在拼接的时候要学会使用 HIDE 进行消隐, 一点点的消隐。三维的标注也很重要,我们在绘制的时候要想要标注的图层。 下面是几个 例子:12 例子 一: 绘制灯座、灯炳、灯泡的轮廓图 1.打开一张新的图形文件,在前视图中用【多段线】命令绘制灯座、灯柄和灯泡的轮 廓图。 在命令行中分别输入“Surftab1”和“Surftab2”,把当前的 surftab 的值都设置为 “45”。这里设置的是线条的密度。 3.单击【曲面】 工具栏中的 【旋转曲面】按钮闽,分别选取轮廓线和旋转轴,旋转角 度为 180‘,结果生成如图 16-5 所示的表面模型。 绘制支柱 4.在前视图中,用 【多段线】工具绘制出支柱的路径,把当前的坐标系绕 Y 轴旋转 90’,用画圆工具绘制出支柱的截面 。 5.单击【实体】 工具栏中的 【拉伸】铵钮,对支柱截面沿着所绘制的路径进行放样 。 绘制灯罩 6.在顶视图中绘制两个半径分别为“ 12”和“6”的同心圆,并使用【移动】工具选择 半径为 12 的大圆,沿 Z 轴方向移动 12 个绘图单位。 7.单击【曲面】 工具栏中的 【直纹曲面】按钮,选择所绘制的上下截面,结果生成灯 罩的曲面模型。 台灯的组装 8.使用【视图】菜单中【视口】命令在当前视图中创建 3 个视口,分别代表顶视图、 前视图和西南等轴侧视图。 9.对照 4 个视口中的图形,把台灯各部件移动至合适位置,组装结果如图所示。13 例子 二: 1.创建新图,设置图形界限为“ (0,0),()”,使用【全部缩放】工具把绘 图区最大化显示。 2.把当前的【对象捕捉】模式设置为端点捕捉模式和中点捕捉模式,执行【矩形】命 令,根据图 4-9 所示的尺寸绘制桌腿截面和茶几面。 3.使用【偏移】工具,选择茶几面,向外偏移“ 10”个绘图单位。 4.使用【复制】工具,复制桌腿截面,其中基点为桌腿截面的任一端点,第二位秽点 坐标为“@0,0,450”。 5.重复使用【复制】工具,复制桌面,其中基点为桌面的任一端点,第二位移点坐标 为“ @0,0, 10”。 6.把当前视图转变为“西南等轴测视图”,使用画线命令,配合端点捕捉模式绘制桌 腿边棱,结果如图 4-9 所示。 7.使用两次【镜像】命令复制其他三条桌腿。其他 例子:14 15 第二部分 基于 VC6.0 下的计算机图形学程序编写(1)配置 创建工程 一个 VC 应用程序包含了一系列支持程序和资源,建立一个 VC 应用程序称为建立 一个 “工程”,一个工程建立在一个工作区中。下面是建立一个工程项目的步骤: 1、打开 Visual C++6.0 软件,依次点击“文件”、“新建”。 2、在“工程”标签下选“ MFC AppWizard(exe)”;在“位置”窗口下点击“?”按 键,选择一个合适的目录;在“工程”窗口下输入自己的学号,点击“确定”按键。 3、根据需求选择创建文档的类型。 4、出现的窗口中,显示了前面的所有选择,如果对选择不满意,可按“取消”。 菜单修改 我们首先要对菜单进行修改, 用鼠标右键点击菜单中的空 格,在出 现的下拉菜单中点 击最后一项“属性”,出现 “Menu Item Properties”窗口;在窗口中“标 题”栏输入 “图形生成”,建立主菜单项“图形生成”。 我们将菜单修改如图:鼠标坐标显示 我们通过指导书上的说明,进行了如图的鼠标坐标显示的算法:16 (2)画直线、画多边形、画圆、画字符 直线 :直线分为 DDA 直线(又称数值微分法直线)、中点直 线。 DDA 直线的程序实现如下:首先编写菜单响应函数,对 MenuID 和 PressNum 两个变量 赋初值;接下来建立相应的鼠标响应程序框架, DDA 直线要求第一次点鼠标左键确定起始 点,第二次点鼠标左键确定直线终止点,并画出直线,中间利用橡皮筋技术实时显示直线 的形状,完成直线绘画后,还要将橡皮筋旧线擦除。 中点画线算法实现过程和 DDA 算法大致相同,但是其思想更加合理,更有利于硬件实 现,提高了算法效率,其程序来源于源码中,程序实现同 DDA 大同小异,DOC.cpp 中核心 算法不同而已,是用交点与中点差比较得判定。 其算法的中心思想相同,即在坐标系的网格 中,确定起始点后,再根据其不同的判断方法,取得离直线最近的像素点予以着色,用离 散的点表示出所要直线。算法是才用指导书上的全程指导。所以没太大难度。 多边 形: 对于 N 边形,可用鼠标左键在窗口中确定前 N-1 个点,其中第一点被记录,最 后按鼠标右键,其第 N-1 个点自动与第 1 个点连接使多边形闭合。程序实现和直线的原理相 同。 曲线 :曲线分为 Brezier 曲线、 B 样条曲线和 Hermite 曲线。均是由鼠标左键确定主要拐 点,按右键确定选点已完成并进行曲线绘制,双击左键消除十字丝完成曲线绘制。 Bezier 曲线是由 一群控制点决定的。一段曲线的次数 与控制 点的点数 密切相关,人们 常常使用三次曲线,那么一段曲线的控制点的点数为 4。实际 应用中,一 条 Bezier 曲线是 由多段 Bezier 曲线 首尾相连而成。与之相应,一群控制点划分 成多组控制点,每一组控制 一段曲线的形状。为了使每一段曲线平滑地连接起来 ,要求前一 组最后一个控制点与后一 组第一个控制点相同(即共用一个点), 同时要求 前一组倒数第二个控制点、最后一个控制17 点(即后一组第一个 控制点)、后一组第二个控制点等三个控制 点在一条直线上。如果要求 给出的控制点在相邻的组之间都能满足这种要求,那么控制点的 布点工作将受到极大的限 制。这种要求不仅难以满足,而且灵活性被极大地削弱 。解决 的办法是计算 得出连接点, 即 用前一组的倒数第二点和 后一组的第二点连线的中点作为 相邻两段 曲线控制点的终点和 起点。 Bezier 曲线的操 作这样安排:用鼠标左键进行控制点选点, 右键结束选控制点,显示 一条 Bezier 曲线; 再按左键选取一个控制点进行移动修改, 右键结束一个控制点修改;当 所有的修改完成以后,双击左键生成一条正式的 Bezier 曲线。 因此首次布点和修改控制点 位置,对鼠标的操作要求不同,必须区分开。 圆: 圆分为 Bresenham 圆、正负法圆。 Bresenham 圆的程序实现如下: 由鼠标左键确定圆心,再定一点,使其与第一点的连线 长度成为半径进行圆的绘制。 先为 Bresenham 圆添加菜单响应函数确定 MenuID,然后画圆 的 OnLButtonDown()响应:用鼠标确定圆心,再移动鼠标确定半径。在确定半径时,随着鼠 标的移动,一个圆随着鼠标的移动半径发生变化。然后调用 Bresanham 算法完成圆的绘 制。Bresenham 圆的编程实现如下:首先编写菜单响应函数,对 MenuID 和 PressNum 两个变 量赋初值;接下来建立相应的鼠标响应程序框架, Bresenham 圆要求第一次点鼠标左键确定 圆心,第二次点鼠标左键确定圆上一点,并由此确定半径,画出完整的圆;然后再在 Doc.h 头文件中声明必要变量和函数,并在 Doc.cpp 中完成 Bresenham 圆的生成函数。 正负画圆法的编程实现与 Bresenham 圆的相类似。 字符 :字符的表示有点阵表示和矢量表示两种。点阵表示指每个字符都有若干个点表 示,矢量表示记录的是笔画信息。可先通过调用 MFC 对话框对字的字体、粗细、大小进行 调整,再点击文本,输入文本位置的其实 坐标以及文本内容,相应文本内容则可出现在指 定位置。直线正负法圆Bezier 曲线18 字符 (3)对多边形进行填充颜色设置线宽设置种子填充,边缘填充和扫描线填充算法 都是在多边形基础上 。 种子填充的原理 是从堆栈中取出一粒表示区域内部的种子, 从种子点出 发,沿扫描线 分 别向左向右边填充边 寻找边界点;通过左右两 边的边界点确定扫描线上的填充区 域范 围;根据该范围在上下相邻的两条扫描线上寻找新的未填充区 域,每个区域中选一粒种子 压入堆栈。这是一个最基本的填充步骤,整个区域的填充过程 就是这个步骤的 反复循环使 用。 边缘填充实质是 以边缘与扫描线的交点为起点以“异或”的 方式向右边最远点画点。 如果一个像素经过偶数次异或画点,将还原为背景颜色;而经 过奇数次异或画点的像素将 显示画点颜色与背景颜色 经过异或运算混合的颜色。所有的边缘 都处理完后,多边形内部 像素肯定经过了奇数次异或画点,因而显示画点颜色与背景颜色异或运 算混合颜色;多边 形外部像素肯定经过了偶数次异或画点,因而还原 为背景颜色 。 扫描线填充算法运用了复杂的数据结构,且在填充过程中需要反复排序,编程难度较 大。 VC 类库中的函数 CDC::Polygon( )实现了扫描线填充算法功能。实际上我们所学的 计算机 图形学所有算法都能通过引用 VC 类库提供的函数(或函数组合)加以实现。 三种算法中,种子填充算法的填充效果 时间耗费多, 有些象素会入栈多次,降低算法 效率;栈结构占空间。递归执行,算法简单,但效率不高,区域内每一象素都引起一次递 归,进出栈,费时费内存。边缘填充算法程序和数据结构都很简单,对于复杂图形,每一 象素可能被访问多次,但由于涉及到对帧缓冲器中大量元素的多次赋值,影响了算法的效 率。扫描线算法效率高,但数据结构复杂,编程难度大,填充的过程中需要反复排序,对 各种表的维持和排序开销太大,适合软件实现而不适合硬件实现。19 种子填充 (4)图形裁剪边缘填充扫描线填充图形裁剪包括 Cohen-Sutherland 算法、中点分割算法、梁友 栋算法、多边形裁剪和圆裁 剪。 Cohen-Sutherland 算法将窗口平面划分成九个区域,每个区 域给予不同的编码。根据 线段端点落入不同的区域,给予线段端点不同的编码。基于线 段端点编码,算法给出了一 整 套裁剪的方法。在裁剪 过程中,窗口的参数需要多次使用,线段端点需要多次编码,编 码的 计算需要多次与某些常 数相“与”。为了 方便,将窗口 参数和几个常数定义为几个常 数符号, 将端点编码用一个函数实现。为了将精力集中在裁剪的实现上,事 先规定一个窗 口。操作时, 任意输入直线 段,用该窗口对直线 段进行裁剪。 多边形裁剪不同 于直线裁剪,是用窗口对一个多边形 进行裁剪, 其结果还是一个多边 形。 多边形常用一个记录顶点的数组表示,最终的裁剪结果 仍存放在数组中。本节采用 Sutherland-Hodgman 算法对多边形进行裁剪, 该算法依次使用窗口四 条边对多边形进行裁 剪。四条边的裁剪原理相同 ,但参数略有不同,它们是编程实现的重点。为了使程序结构 合 理、易读,将边的裁剪 部分用一个函数实现。 圆裁剪与直线裁剪和多边形裁剪都不一样,直线裁剪完还是直线,多边形裁剪完还是 多边形,而圆裁剪完便有可能不再是圆,所以我们需要修改圆的生成算法,让其能够自主 判断是否在矩形框内,若是,则绘出该点像素,若不是,则不绘 。多边形裁剪 (5)图形的几何变换圆裁剪Cohen-Sutherland 算法图形的几何变换 分为平移、旋转、缩放和对称变换功能。 实现了在我们 点击图标后, 屏幕中出现一个小正方形,单击鼠标左键,再根据橡皮筋拉伸,后单击鼠标右键以确定平20 移量、旋转角度、缩放比例或对称 轴来进行图像的几何变换。 但是我的程序在旋转的时候 进行了变化,使用了对话框输入角度变化值来实现旋转。 算法优点是效率高,操作直观简洁。缺点是不能对任意图形进行变换, 仅仅有一个演 示作用。平移旋转缩放 (6)三维图形的消隐及着色对称我们在一些源码的前提下进行了三维的消隐和光照处理。在源码的帮助下,程序能实 现三维旋转和小球的光照变化。代码基本来自源码。消隐21光照处理 三维四、实习的主要体会第一周是 CAD 实习, 这一周的实习对于我们而言受益匪浅。 通过这次的实习我们在绘 制图形的方面产生了极大兴趣。我们以前在进行测绘的数据处理最后成图的时候用过 CAD,但是那个时候我们仅仅是把几个点连起来画个方块,没有像现在这样非常精细的工 作。在经过了这次的实习后,我发现原来很多的东西的三维设计我们也可以完成了。我们 深深的了解到了 CAD 的广泛适用性,不仅仅是简简单单的测绘绘图,还有那些奇妙的三维 绘制。这些功能都吸引着我去慢慢挖掘它们。CAD 简单明了的操作也很让我喜欢,不论是 前期的配置,还是后期的设置图层,图幅,还有标注等等都有很明显的提示,我们要做的 仅仅是记得指令之后,按照提示来选择。 这次的实习方式很合适,我们在练习完毕一个例子后在自己独立思考下面的习题应该 怎么做。这样激发我们的学习性,让我们变得想去了解,结合前面的实例我们还是能完成 这些难题的。这样既锻炼了我们独立思考的能力也让我们对 CAD 更加的熟悉。 我们在开始的时候完全是看着指导书在打,但是在简单的尝试后我们也能理解一些代 码的作用。比如我们在经过几次练习就能发现使用相对坐标( @)来定位划线的时候相当省 事方便。我们在划线的时候,最后可以合并成为多线段以便于后面的选取复制。在绘制圆 弧的时候我们可以自己选择方 法,到底是用 PLINE 的直线命令来绘制还是用几个圆来剪 切。在绘制图形的时候我们要学会使用辅助线,充分用好构造线来帮助我们。我们在配置 的时候把一些常用的比如 UCS 等工具栏放在我们熟悉的地方以便于我们使用。在绘制一些 很大的图形有较多零件的时候,我们能使用块来方便绘制。在绘图之前设置好我们需要的 图层来方便我们看清图像。在屏幕下有很多工具,我们可以选择端点捕捉或者中点捕捉等 等工具。在三维图形的最后,我们能用三维动态观察器来看图像是否共面。22 指导书在循序渐进的教导我们使用 CAD 的同时,我们也发现, CAD 绘制是一项很小心 的工作,我们不能有任何含糊,因为我们能用标注来进行检验。 不会有任何模棱两可的事 情发生,所以这要求我们在绘制的时候能够仔细的审阅设计图。在摸索中解决我们一开始 不能看懂的问题。比如还原辅助线之类的工作,只有慢慢的去开动我们的脑筋才能提高自 己的绘制效率。所谓熟能生巧也是有道理的,我们现在在看到一张图像时能首先想到这张 图像需要的辅助线。 经过这这次的实习,我看到了 CAD 的强悍之处,即便我们还只是掌握了一点点皮毛也 让我们有很大收益。我们在这一周忙碌又充实的一周中,掌握了 CAD 的基本知识,我们也 能巧妙的使用镜像,旋转 ,阵列等来实现节省工作量加快效率。这次实习也让我们明白了 磨刀不误砍柴工的道理。我们在拿到一张设计图的时候,第一时间是分析,分析需要几个 图层,分析画布大小,分析整体结构,分析需要哪些辅助线,分析细节部分的完成。只有 在分析完毕之后,我们才能更加有效率的去完成任务。我们在完成任务的同时也学会了真 正的知识,实践是硬道理。 我们在 CAD 实习的时候还是有一些经验了,下面说说这些好的习惯: 1、绘图之前设置画布大小一定要适当,这样能有效应用我们的电脑屏幕,毕竟我们屏 幕大小是有限的。 2、设置图层的时候,我们要设置好线型比例,因为我们每个图像的大小都不一样,所 以不同大小的线型比例看起来的视觉效果完全不一样。 3、在绘制的过程中,灵活运用阵列和旋转,对于很大对称图形有较大帮助。 4、在修改时候,我们能关闭一些不需要的图层,能使画面更加简洁。 以上就是我在实习过程中碰到的一些主要问题,当然在以后的实习过程中还是会碰到 一些问题,这就要求我们在实践过程中自己体会。 这次的实习总体还是让人满意的,但是由于在三维部分没有花费太多时间,所以不够 熟练也不够效率,在最后绘制三维成果时候还是花费了太多时间,最后也没有完成。所以 还必须在以后好好提高。第二周是 VC6.0 的计算机图形学的编程实习。 这次的编程实习和数字图像处理的实习完全不同,计算机图形学的编程是自己绘图, 而数字图像处理的编程是通过程序改变已有图像。 这次实习我们将平时学到的理论知识充分应用在了实习中。 在本次实习中让我对计算 机图形学有了一个更深的理解。通过了实践才能好好永久掌握这些知识。老师给我的实习 指导书相当的详细,所以我们在实习的时候,基本上是按照这实习指导书的步骤进行着。 有着前面几次实习,我们对于 VC6.0 也很熟悉,所以在实习的时候,对于 MFC 等很容易上23 手。我们主要涉及的是计算 机图形学的一些算法,来根据实习指导书给的算法实现比如 DDA 直线等的绘制。我们水平有限,所以很大程度上依赖于实习指导书,通过上面给的算 法来实现程序的实现。 在这次实习中我的编程能力, 还是有所提高的。 这次实习我们虽然依赖于实习指导 书,但是还是有自己想一些错误出现的原因,也能通过自己的想法弄一些源码上去。实习 指导书有时候也是有错误的。 以我们现在的水平也只能以课本或实习指导书上的算法或者代码为基础进行相应的修 改来实现。其余的功能实现则有些无法下手,耗费了大量的时间进行尝试 ,这时与同学之 间的交流,向老师询问咨询等 。经过各种探讨和摸索, 我编程的动手能力大大提高 ,明白 了很多比如:颜色设置,线宽等。三维图形的处理我们通过源码实现了,但是对于整个算 法还是一头雾水,所以还希望在以后能多多接触这些。 这次实习也发现了自己许多的不足 ,在很大程度上还是编程做的不够多,不够熟练。 只有多做多想才能熟能生巧。 通过实习,从而发现自己的不足,从而反馈到学习中去,达 到提高的效果。在充分磨炼自己 , 这都是我的收益 。 在这次实习中还是有很大的收益的。不仅仅是动手能力,更是一些编程习惯。 本次实习, 激发了我对于程序的向往。当你编写出一个能完美运行的程序 时,内心的开心无以言表。 这次实习,也让我更加深刻理解了 计算机图形学 里面的一些名词实际的意义,比如 消隐等 等。这些东西都让我在专业知识上能加深理解。可以说,这次实习,让我们对 计算机图形 学由理论上那比较飘渺的东西变成了触手可及并且为之骄傲的程序。在最后,我想在这里还是要感谢老师在这两礼拜的实习耐心的讲解。我们也麻烦了老 师许多,甚至有很多在老师看来很简单的问题。老师依旧很细心的为我们讲解,让我们在 这实习之中真正的学会了 计算机图形学的编程。在实习中,有不会的地方,我们几个同学 一起探讨着问题出现的原因,不断的弥补自己的缺陷,不断完善自我的学习,在交流合作 中有团队合作的概念,以便于未来的学习与工作。 无论是实习 CAD 还是编程都让我觉得知 识永无止境,学好计算机图形学 更是一种需求,这次实习,必然会在我的专业道路上印象 深刻。24 成绩评定项目 文字正确、语句通顺,内容充实、详略得当(10 分) 原理叙述清楚(10 分) 算法设计正确(20 分) 过程清楚、步骤详细(20 分) 对实验结果分析恰当、能分析算法的优点和不足, 并叙述正确(20 分) 成果验收答辩讲叙清楚、回答问题正确(20 分) 发现有拷贝、雷同、抄袭(视情况扣大于 30 分) 总成绩 教师签名 得分25
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 图形的平移 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信