(计算机应用技术专业论文)动漫图形编辑器的开发.pdf_第1页
(计算机应用技术专业论文)动漫图形编辑器的开发.pdf_第2页
(计算机应用技术专业论文)动漫图形编辑器的开发.pdf_第3页
(计算机应用技术专业论文)动漫图形编辑器的开发.pdf_第4页
(计算机应用技术专业论文)动漫图形编辑器的开发.pdf_第5页
已阅读5页,还剩63页未读 继续免费阅读

(计算机应用技术专业论文)动漫图形编辑器的开发.pdf.pdf 免费下载

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

文档简介

武汉理工大学硕士学位论文 摘要 本文基于面向对象的思想给出了图形系统的各种模型,主要讨论了图形类 库,通用图形编辑系统,以及动画制作技术,针对动漫设计中各种基本图元的 数据描述的数据结构进行了定义,也对各种图元的结构层次和基本操作给出了 定义。该图形编辑系统是结合通用图元编辑系统和动漫制作技术,设计的一个 专为动画编辑来研究的专用图形编辑器。 从2 0 世纪6 0 年代以来,人们就开始使用计算机来绘图。随着个人计算机 的普及与图形图像技术的发展,计算机图形学已经广泛应用于动画制作的各个 领域,从绘制基础的图形到高级的渲染图形,图形学技术都起到了不可或缺的 作用。与传统的手工制图相比,使用计算机绘图可以减少重复的操作,节约了 很大的人力和物力,从而降低成本,提高生产效率。而本次课题的研究则主要 研究了如何实现矢量化制图,并进行编辑。 本文先介绍了与绘图相关的图形学的知识与技术,并对这个绘图系统的实 现过程进行了详细的介绍,其中包括了系统类的设计思想,系统的结构设计, 以及在实际编程时碰到的问题。本文提出了一种利用o o p 技术编辑w i n d o w s 元 文件的方法,通过对w i n d o w s 元文件中记录的对象化,极大的方便了对矢量图 形的编辑:另外对系统中类的设计和主要模块使用的关键技术进行了论述。 接下来本文介绍该系统的总体设计和详细设计,论述了本系统实现的基本 功能和数据流程图和系统工作框架图,以及设计时应注意的事项,最后给出了 一定的实验结果。并在详细设计部分着重详细论述各个关键功能的实现方法, 设计过程中使用的关键数据结构和自定义的关键类。 最后是工作总结和系统展望,说明了当前系统的优缺点和完成后续工作应 该注意的事项,以及下一步工作应从哪些方面着手开展。 关键词:矢量图形,w i n d o w s 元文件,图元,动画设计,图像处理 武汉理工大学硕士学位论文 a b s t r a c t c o m p a r e d 、i t ht r a d i t i o n a lh a n d m a d ep i c t u r e s p l o t t i n gw i t hc o m p u t e rc a n r e d u c ed u p l i c a t e do p e r a t i o n ,s a v i n gm u c hw o r kf o r c ea n dm o n e yt oc u tc o s ta n d i m p r o v ep r o d u c t i o ne f f i c i e n c y t h et h e s i sm a i n l ys t u d i e dt h e nh o wt oc a r r yo u tv e c t o r t ot u mg r a p h i c s ,a n dc a r r yo ne d i t o r b a s e do nt h eo b j e c to r i e n t e dm e t h o d ,s e v e r a l m o d e l so fo b j e c to r i e n t e dg r a p h i cs y s t e m sa r eg i v ei nt h i sp a p e r t h i st h e s i sm a i n l y d i s c u s s e st h ec l a s sl i b r a r yo fg r a p h i cs y s t e m ,g e n e r i cg r a p h i c se d i ts y s t e ma n dc a r t o o n t e c h n i q u e ,d e f i n e st h ed a t as t r u c t u r et od e s c r i p et h o s eb a s i cg r a p he l e m e n t sa i ma tt o t h ed e s i g no f c a r t o o n , t h i st h e s i sa l s od e f m e st h es t r u c t u r el a y e ra n db a s i co p e r a t i o no f t h o s eb a s i cg r a p h _ e l e m e n t s 1 1 1 i sg r a p h i cs y s t e mi sap a r t i c u l a r l yg r a p h i ce d i t o rf o r d e s i g no fc a r t o o n ,w h i c hb a s eo nt h eg e n e r i cg r a p h i c se d i ts y s t e ma n dc a r t o o n t e c h n i q u e s i n c e1 9 6 0 s ,c o m p u t e rh a sb e e nu s e dt od r a wg r a p h i c s n o ww i t ht h ep o p u l a r i t y o f p e r s o n a lc o m p u t e ra n dt h ed e v e l o p m e n to f g r a p h i c st e c h n o l o g y , c o m p u t e rg r a p h i c s h a sa l r e a d ye x t e n s i v e l y a p p l i e d t oe a c hf i e l do fa n i m a t i o nm a k i n g g r a p h i c s t e c h n o l o g yh a sb e e na ne s s e n t i a lp a r tf r o md r a w i n ge l e m e n t a r yg r a p h i c st or e n d e r i n g s e n i o rg r a p h i c s t h i ss u b j e c ti st os t u d yt h ei m p l e m e n to f d r a w i n g v e c t o r g r a p h a tf i r s tt h i st h e s i s i n t r o d u c e d t h er e l a t e dk n o w l e d g ea n dt e c h n o l o g yn e e d e di nd r a w i n gg r a p h i c s ,t h e ni t g a v eaf u l l yi n t r o d u c t i o nh o w t oi m p l e m e n tad r a w i n gs y s t e m ,i n c l u d i n gt h ed e v i s eo f c l a s s s t r u c t u r e ,d e s i g n i n gc o n c e i v e ,a n dt h e s o l u t i o nt os o l v e p r o b l e m s i n p r o g r a m m i n g aw a yt oe d i tw i n d o w sm e t a f i l ei sp u tf o r w a r di nt h i sa r t i c l e i tm a k e c o n v e n i e n c eo ft h ee d i t i n gp r o c e s sg r e a t l yt h r o u g ht r a n s f o r m i n gt h er e c o r d so ft h e w i n d o w sm e t a f i l et oo b j e c t s i na d d i t i o n ,t h ea u t h o rd i s s e r t a t e dt h ed e s i g no ft h e c l a s s e si nt h es y s t e ma n dt h ek e yt e c h n o l o g yo f m a i nm o d u l e n e x to v e r a l ld e s i g na n dd e t a i ld e s i g no ft h es y s t e ma r ei n t r o d u c e d na l s o e x p o u n d st h eb a s i cf u n c t i o na n dt h es y s t e md a t af l o wc h a r ta n dw o r kf r a m ec h a r t , t h e np o i n to u tt h ei t e m st h a ts h o u l db ep a i da t t e n t i o ni nd e s i g n i nd e t a i ld e s i g np a r t , t h ek e ym e t h o do f f u n c t i o ni nd e t a i la n dt h e k e yd a t as t r u c t u r ea r ei n t r o d u c e d k e yw o r d s :v e c t o rg r a p h ,w i n d o w sm e t a f i l e ,p r i m i t i v e ,c a r t o o nd e s i g n i n g ,i m a g e p r o c e s s i n g i i 武汉理工大学硕士学位论文 1 1 研究背景 第1 章绪论 本论文是对图形学在动漫制作方面的研究,所谓动漫就是利用人类 的视觉暂留特性,快速地播放一系列静态的图像,使视觉产生动态的效 果。在照相技术发明之前,人们就发现多张活动的图片能够产生动态视 觉效果。一些早期的摄影师借助照相技术来从事运动研究,但是直到真 正的电影胶产生之前,并不能产生完全连续的运动,电影得到普及后不 久就出现了动画卡通片。 传统的动画是通过手工方式绘制多幅图像,然后通过连续拍摄得到 的,标准的播放速度是2 4 3 0 格每秒。而计算机动画就是利用传统动画 的基本原理,结合科学与艺术,突破静态、平面图像的限制,创造出栩栩 如生的动画作品 早在2 0 世纪6 0 年代时,人们就开始尝试用计算机来处理图像。到 了2 0 世纪8 0 年代,随着个人计算机的普及以及电脑图形处理技术的发 展,人们开辟了一个前所未有的领域,计算机图形制造业【1 2 。如今在 工业产品设计、影视领域、建筑装潢设计等各个方面,计算机作为人类 最强有力的工具,正发挥着重要的作用,动画制作业也不例外,几乎在 以上的所有单个步骤中都可以找到它的身影。 比较通用的计算机动画【3 】制作流程是: 动画制作的设计阶段。该阶段主要包括前期策划、编写文字 剧本并将其概括地改编成故事脚本,创作主要人物造型、设 计场景、整理构图。 动画制作的手绘阶段。该阶段绘制出主要背景,绘制出原画 稿、动画稿。 将绘制好的初稿扫描到电脑上。 对初稿进行修改矢量化,填充,上色。 生成关键帧【4 1 ,产生动作。 武汉理工大学硕士学位论文 前景与背景的合成,音乐合成以及修改。 1 2 研究意义 随着计算机的推广和普及,图形系统【5 】越来越受到人们的重视。为 了便于开发图形软件,增强软件的可移植性,需要在计算机硬件与图形 应用软件之间建立一个通用的标准的图形系统。目前,大多数应用软件 都是利用计算机软件系统本身所带的图形库函数来完成图形软件的开 发,如c 语言中d o s 环境下的图形函数库胪 g r a p h i c s 1 i b 。然而,这些图 形库都是由相对独立的一组函数( 画点,画圆,设置颜色等) 构成的。抽 象的级别比较低,而且它也不可能提供对点,线,圆等进行缩放、平移 等操作【_ 7 1 ,使得图形软件开发人员必须在较低的层次上进行,开发工作 非常困难,而且代码重用率也非常低,如果使用面向对象技术l s j 在图形 函数库的基础上建立起一个面向对象的图形类库,使得图形应用系统用 面向对象的方法和语言来构造,便能降低开发的难度,减少重复劳动, 且开发出的软件错误少,易于移植和维护 由上面动画制作过程式可以看出,整个动画的制作过程是非常精细 也是非常艰苦的一个过程。单是要绘制手稿,一个简单的动作就需要绘 制很多张相似的图,制作出一个动画需要耗费很大的人力和财力,动画 的成本也就相当高。使用计算机来制作动画,最主要的原因能降低生产 成本。计算机绘图能够完成矢量化制图,可以减少很多累赘的工作,而 且能够不经过修改直接充上色。这样提高了动画制作的生产效率,降低 成本。 1 3 课题来源 本课题是行为特征建模工具的开发。旨在研究一种全新的动漫编 辑器,研究出一种新的中间帧插值算法,专门应用于动漫制作。基于此 算法开发一套动漫设计软件,这套软件能在控制角色运动方面功能强大, 自动生成的中问画更接近实际,这套动漫制作工具可以改进了传统动漫 制作过程,提高制作的效率和精度,同时把人从繁复的工作中解脱出来。 2 武汉理工大学硕士学位论文 本人选的课题题目是动漫制作图形编辑器【9 1 ,主要是针对这个动漫 设计工具的前期做一定的开发,实现一个小型专用的图形编辑系统,根 据这个专门的图形编辑可以对实验室后期关于动漫关键帧的插入算法做 进一步得设计和改进。 1 4 国内外研究动态和水平 在动漫制作d 0 方面,国外都已经达到了很高的造型水平,比如说 a u t o d e s ka n i m a t o rs t u d i o 、a n i m o 、s o f t i m a g et o o n z 、r e t a sp r o , 它们都各具特色,基本上都在绘制原画、描线、上色和合成方面有成熟 的工具,但是中间画的自动化生成效果都不太理想。中间画一般都是角 色的运动过程,虽然可以由计算机自动计算出,但是不能很好地表示角 色在运动中形体发生的改变。特别是,观众对于人的肢体运动很熟悉, 不自然的形变即使很细微也会让人感觉不舒服。 因此二维制作工具l l l 】需要进一步发展,最终解决中阃画的生成问 题,真正实现动漫制作的“无纸化”。由上面动画制作过程式可以看出, 整个动画的制作过程是非常精细也是非常艰苦的一个过程。单是要绘制 手稿,一个简单的动作就需要绘制很多张相似的图,制作出一个动画需 要耗费很大的人力和财力,动画的成本也就相当高,使用计算机来制作 动画,最主要的原因能降低生产成本。计算机绘图能够完成矢量化制图, 可以减少很多累赘的工作,而且能够不经过修改直接充上色。这样提高 了动画制作的生产效率【i ”,降低成本。 再者,从当前一些流行的常用二维动漫软件,如:a u t o d e s k a n i m a t o r s t u d i o 等来看,他们在对关键帧的处理方面都不能有很好的处理和支持, 要么就是生成的动画效果不太理想。这就使得二维动漫的发展停止不前, 近今年并将被三维动画所取代,但相对于三维动画,他的结构简单,渲 染方便,数据量小,从视觉效果来看,它们表现的其实不用十分的逼真, 也就是说,三维动画没有时间限制,它不是实时的随着计算机动画的 不断发展研究一套比较实用的动漫制作工具是很有必要的。 3 武汉理工大学硕士学位论文 1 5 研究的主要内容 本课题研究分两个阶段,分别由两位同学完成: 第一阶段的任务是实现一个专用图形编辑器,能实现基本的图元绘 制和编辑功能。该系统是基于面向对象的思想,以图元为基础,采用链 表数据结构,用v c 编程实现一个动画专用的图形编辑器。 第二阶段的任务是在第一阶段的基础上实现图形的动态效果以及后 期的合成。这部分不是本论文研究的重点,会由另一位同门来完成和介 绍。 本论文主要任务是针对第一阶段的工作来做的介绍,实现了一个前 景绘制程序,能够实现矢量化制图,图像编辑,尽量减少手工的成份, 为实现动画效果提供一个良好的开发环境。具体的任务包括下述内容: ( 1 ) 图元管理 可以创建基本的图元;并可以利用基本的图元交互式的创建动漫角 色;可以对创建的角色进行编辑、删除、复制、属性设置;可以把编辑 好的角色导入到角色库中,同样可以从角色库中导出角色。 ( 2 ) 场景管理 能够创建场景,能把创建好的角色、背景等帧信息导入到场景文件 中;能把编辑好的场景文件导入到场景库中,导出场景文件。 ( 3 ) 动画文件管理 设计一个通用的动画类和方法,为第二阶段的动作编辑提供一个良 好的开发环境,系统为第二阶段动作编辑工作提供了一个友好的接口, 具体的算法实现由另一个同门完成。 1 6 论文章节的内容介绍 本论文主要实现用户对图元的基本绘制和编辑,并能对创建的图元 进行基本操作,将场景文件保存下来,作为动画序列的一帧,保存动画 文件,并能够导入和编辑创建好的图元,角色,场景和动画文件 第1 章介绍了课题来源、课题研究的目的和意义、国内外的研究动 4 武汉理工大学硕士学位论文 态和水平以及文章主要研究的内容。 第2 章介绍了系统开发的基本技术,包括计算机图形学的基本知识 一图形与图像,图形变换,并简述了g d i 技术,计算机动画,面向对象 的程序设计。这些基本的技术是实现本系统的基础。 第3 章将对本系统的功能,系统的层次结构以及开发工具的选择做 介绍。 第4 章将介绍本系统中图元,角色,场景,动画的结构的设计理论, 给出了系统设计的结构流程以及系统主要界面的介绍。 第5 章将详细介绍系统的实现。对每个类的方法和实现做了详细的 介绍。 第6 章总结研究工作,并提出系统需要改进之处以及对系统以后的 展望。 5 武汉理工大学硕士学位论文 第2 章系统开发的基本技术介绍 2 1 图形学发展历程 计算机图形学【l 剐是随计算机及其外围设备而产生和发展起来的。它 是计算机技术与电视、图形图像处理技术的发展汇合而产生的结果,而 且有着非常广泛的应用领域,包括科学研究,日常生活。广泛的应用领 域也大大地推动了计算机图形技术的快速发展,包括硬件技术和软件技 术。1 9 5 0 年,图形学还只是“被动”的图形学,5 0 年代末期,m i t 开发 的s a g e 空中警戒雷达系统,成功地把雷达波形转换成计算机图形,并 且第一次用光笔在屏幕上选取图形。这个系统可以说是交互式计算机图 形系统的雏形,预示着交互式图形生成技术的诞生6 0 年代是计算机图形 学兴起和确立的年代,1 9 6 2 年,m i t l e s u t h e r l a n d 发表了一篇题为“图 板:一个人机图形通信系统”的论文,被公认为是计算机绘图理论研究的 第一篇论文。7 0 年代是计算机图形学蓬勃发展、开花结果的年代,在这 1 0 年中,交互式计算机图形系统【1 4 】得到了广泛的应用,不仅在传统的军 事和工业领域,而且还进入了教育、科研、艺术及事务管理等领域,这 些应用极大地推动了计算机图形学的发展,尤其是对图形硬件设备的制 造和发展。8 0 年代是计算机图形系统迅速推广应用的年代,微机的大面 积推广,拓宽了图形学的应用和研究。9 0 年代,随着多媒体的提出,计 算机图形系统已成为计算机系统必不可少的一个组成部分。 2 1 1 二维几何变换 在系统开发过程中,我们主要是以二维动画为研究对象,所以主要 针对的是图像的研究。图像是用具有灰度和色彩的点阵来表示,它强调 是由哪些点组成的,这些点具有什么灰度和色彩,形象地说,图像类似 于这样一个矩阵,矩阵的某一位置的值,表示该处的灰度或色彩。虽然 矩阵仍然是一种数学概念或方法,但强调的是。灰度”而不是。形”。 图形的几何变换【”】一般是指对图形的几何信息经过变换后产生新 6 武汉理工大学硕士学位论文 的图形,图形几伺燹换既可以看作是坐标系不动而图形变动,变动后的 图形在坐标系中的坐标值发生变化,也可以看作图形不动而坐标系变动, 变动后的图形在新坐标系下具有新的坐标值。这两种情况本质上都是一 样的,都是图形由新的坐标值表示,因此是新产生的图形。图形几何变 换包括比例变换1 6 】、对称变换1 7 1 、错切变换【1 盯、旋转变换、平移变换 及其复合变换。图形上所有的点在几何变换前后的坐标关系一般用解析 几何方法可以求得,但这些几何关系用矩阵方法表示,运算更为方便。 1 比例变换 设图形上一点p y ) ,经比例变换后成为新图形上一点p ( x ,y ) ,即 有,= a * x , y = d * y 式中a ,d 为比例因子将此比例变换式写成矩阵式得: 【r y 怫y 】豳_ 【川叩 ( 2 1 ) 这里比例变换矩阵r = l ;:l 。若a _ d ,则x ,y 坐标按同一比例变换。 当a = d l 时,图形放大;当o 1 、“ ”符号进行读出、写入。 在这个功能的实现中,首先判断c a r c h i v e 对象是用于写入还是读 出,可以用i s s t o r i n g o 和 s l o a d i n g o 来判断,若是写入数据,则把成员 变量写入到文件中去,因为成员变量基本上是基本数据类型或可序列化 的数据类型,因此可以用 y ) i s c o n t r o l p o i n t = t r u e ; i t - x + = e n d p o i n t x - c u r r e n t x : i t 一 y + 2 e n d p o i n t y - c u r r e n t y ; ,重新计算包围盒 武汉理工大学硕士学位论文 s u r r o u d r e t a n g l e ( ) ; r e t u r nt r u e ; ) 5 1 6 删除关键点的实现 删除关键点和修改关键点的实现方法差不多,都是要通过迭代器来 寻找相应的关键点。然后再把这个关键点从关键点链表中删除。在这里 要用到l i s t 的一些删除元素的函数。有两种方法可以从l i s t 中删除元素, 一种是r e m o v e ,这种方法的一个缺点就是删除后并不改变l i s t 的大小。 还有一种是l i s t 的成员函数e r a s e ,这个函数是彻底的删除l i s t 里面的元 素,删除后l i s t 的大小也随之改变了。我用的是第二种方法来删除关键 点。其流程图见图5 3 ; 图5 - 3 删除关键点流程 武汉理工大学硕士学位论文 实现删除功能核心代码如下: b o o lg r a p h i c :d e l k e y p o i n t ( c p o i n tc u r r e n t ) l i s t :i t e r a t o r i t ; b o o li s c o n t r o l p o i n t = f a i s c : f o r ( i t 2 g r a p h i c l i s t b e g i n 0 ;i t ! = g r a p h i c l i s t e n d o ;i t + + ) i f ( a b s ( i t 一 x + m _ c o n t r o l p o i n t x + m _ p w o r l d x c u r r e n t x ) y + m _ c o n t r o l p o i n t y + m _ p w o r l d y c u r r e n t y ) m _ p w o r l d x + i t m c o n t r o l p o i n t x ) m a x x 2 i t 一 m _ c r r i g h t + i t - m _ p w o r l d x + i t - m c o n t r o l p o i n t x ; i f ( m a x y m c r b o t t o m + i t 一 m _ p w o r l d y + i t - m c o n t r o l p o i n t y ) m a x y = i t - m c r b o t t o m + i t 一 mp w o r l d y + i t mc o n t r o l p o i n t y ; i f ( m i n x i t 一 m c r 1 e f t * i t 一 m _ p w o r l d x + i t 一 mc o n t r o l p o i n t x 1 m i n x = i t - m _ c r 1 e f t + i t mp w o r l d x + i t 一 m c o n t r o l p o i n t x ; i f ( r a i n y i t m c r t o p + i t - m _ p w o r l d y + i t - mc o n t r o l p o i n t y ) m i n y = i t 一 m _ c r t o p + i t 一 m _ p w o r l d y + i t m _ c o n t r o l p o i n t y ; m _ c r 1 e f t = m i n x ; m _ c r r i g h t = m a x x ; m _ c r b o t t o m = m a x y ; m c r t o p = m i n y ; ) 通过上面的方法我们记录下角色和图元的包围盒信息,有了这些信 息我们就可以很容易的用p t i n r e c t 函数来判断光标点是否在角色的包围 盒矩形当中,一旦在矩形当中角色盒图元处于选中状态。 5 2 3 角色中添加图元 角色中添加一个新的图元,就是把这个新的图元或角色加入到我们 已有的图元列表中添加入新的图元,我们在这里用的是l i s t 的一个成员 函数p u s h _ b a c k 来实现新图元的添加,就是在图元链表的末尾插a - - 个 新的图元。 武汉理工大学硕士学位论文 当插入新的图元后,角色的包围盒的大小就发生了变化,因此也要 重新计算这个新角色的包围盒的大小,世界坐标和图元链表的大小也随 之发生了变换,因此这些属性在我们选择了导出角色功能厚还要重新计 算一次。 5 2 4 角色的绘制 角色的绘制就是把属于该角色的图元绘制出来,而这些图元就是由 我们前面定义的基本图元( 圆、直线、曲线、折线) 实现的,即我们 对角色的绘制就是对该角色图元的绘制。 通过迭代器遍历属于这个角色的图元链表,然后依次调用每个图元 的自绘函数。对于图元的自绘的实现我们在下面的章节里面已经做了相 关的介绍。角色绘制的实现代码如下: v o i dd r a w g r a p h i c ( c d c + p d c ) ,画结构中的图元 l i s t :i t e r a t o ri t ; f o r ( i t = m _ g r a p h i e l i s t b e g i n o ;i t ! = m _ g r a p h i c l i s t e n d o ;i t + + ) i t 一 d r a w ( p d c ) ;图元的自绘函数 ) 5 2 5 角色的导入导出 角色导入导出就是对我们编辑好的角色文件的读写的实现,和图元 文件的读写一样,都用m f c 中的c a r c h i v e 类来直接实现,通过对角色 数据的序列话来给其文件进行写入盒读出。 它的步骤为,先对角色自身的成员变量例如角色i d 等进行读写操 作,然后通过迭代器遍历整个图元链表,依次调用每个图元的读写操作, 那样就可以把角色中的所有信息写入或读出文件了。关于文件的读写操 作我们在前面章节5 1 2 也做了介绍。 武汉理工大学硕士学位论文 5 2 6 角色的移动 角色移动的实现主要是根据鼠标的移动来实现的。一旦角色移动被 选中我们没就可以移动鼠标到我们需要角色移动的地方。 我们根据光标的相对距离来改变世界坐标,随之改变掉角色中每个 图元的世界坐标,然后重绘到屏幕上。 其具体实现如下 v o i dg r a p h i c s t r u c t :m o v e ( i n td x ,i n td y ) 图元移动 m 世界坐标移动_ w o r l d p o i n tx + = d x ; m w o r l d p o i n t y + 。d y ; l i s t :i t e r a t o ri t ; f o r ( i t = m _ g r a p h i c l i s t b e g i n 0 ;i t ! = m _ g r a p h i c l i s t e n d o ;i t + + ) i t - m _ p w o r l d = m _ w o r l d p o i n t ;改变每个图元中保存的世界坐标 ) 5 2 7 角色的块操作和点操作 系统在对角色进行选中编辑的时,我们提供了两种角色操作:块操 作和点操作。 块操作是以整个图元为基础,以包围盒为选中目标,当我们选中快 捷键圈时,我们就可以进行角色的块操作,对整块进行平移、旋转、缩 放等基本操作,具体的选中实现在5 2 1 中我们做了详细的介绍; 点操作又叫做关键点操作,这里是以每块的关键点为基点,当我们 选中某块要进行点操作的时候,我们可以点击右键选中关键点进行编辑, 这时候就可以由块操作切换到点操作进行关键点的编辑,具体关键点的 编辑我们在5 1 5 和5 1 6 中做了详细的介绍。 图5 5 是系统在做块操作和关键点操作的对比,根据选择的不同我 们可以对物体,角色进行整体以及关键点的局部编辑。 4 5 武汉理工大学硕士学位论文 日一日q 园 图5 5 角色块、点操作 由图5 - 5 可以看到对角色的块操作是以整个块的包围盒为基本,他 以整块包围盒为整体对角色进行相关操作;当我们进行角色操作的时候, 鼠标的定位点就变成关键点,我们对每块图元的关键点链表进行循环查 找找到需要编辑的关键点,对该关键点进行编辑、删除等进行一系列基 于点的操作。 块操作和点操作实现的具体算法思路如下: i “选择的是块操作) 对选中的角色或块进行一些列的块操作; 平移; 旋转; 缩放; : ) i “选择的是点操作) ,根据鼠标的位置找到关键点的坐标; w h i l e ( 选中块关键点链表循环) 武汉理工大学硕士学位论文 i “鼠标点是否在是该关键点) b r e a k ; e l s e c o n t i n u e ; , 对找到的关键点进行点操作; 5 3 画图菜单的实现 系统在画图时采用的是橡皮筋效果来实现我们的绘画功能,橡皮筋 实现的原理有好多种,在这里用的是反色重画的方法,即当鼠标移动的 时候,先把原来的线用反色线覆盖,然后画新的线。橡皮筋的画图实现 的具体代码原理如下: c d c * p d c = o e t d c o ;取得设备 p d c - s e t r o p 2 ( r 2n o t x o p e n ) ;设定画笔,为n o t x o p e n 即所画 颜色与背景相反p d c 一 s e l e c t o b j e c t ( & m _ o m y p e n ) ; p d c - m o v e t o ( m _ p s t a r t p o i n t ) ; p d c l i n e t o ( m 这是重画原先的点,由于采用的是_pendpoint); n o t x o p e n ,所以如果原来的线是黑的( 别的颜色也一样) ,现在就变 成白的,自然看不到了。 ma a e n d p o i m = p o i n t ;重新取得新点 p d c m o v e t o ( mp s t a r t p o i n t ) ;重新回到起点 具体每个图元的绘画方法我们会在下面的小节中介绍。 5 3 1 绘制直线的实现 绘制直线的操作过程为用户选择绘制直线菜单后,用户第一次按下 鼠标左键后,根据鼠标的移动,显示出一条直线,当用户第二次按下鼠 标左键后,把当前显示的这条直线保存到结构链表中作为用户最终绘制 的直线。 4 7 武汉理工大学硕士学位论文 因此,实现这个功能要处理两个系统消息,一个是 w ml b u t t o n d o w n ,另一个是w mm o u s e m o v e 。在m f c 中,其 对应的函数为o n l b u t t o n d o w n 和o n m o u s e r m o v e 。m f c 通过 b e g i n _ m e s s a g e m a p ( c a n i m a t i o n v i e w , c v i e w ) 和 e n dm e s s a g em a p ( ) 把消息和处理消息的函数联系在一起。 在具体的实现中,我们首先定义一个整型变量h u m 来判断鼠标时第 一次按下还是第二次按下。在o n l b u t t o n d o w n 函数中判断h u m 是否等 于0 ,如果等于0 ,则表示是第一次按下,那就把临时存放关键点的链表 清空,同时把当前鼠标光标所在的点i 临时存放关键点的链表中。若h u m 不等于0 ,则表示是第二次按下,则把当点这点插入到临时存放关键点 的链表中,同时生成一个图元对象,和一个结构对象,并把图元对象加 入到结构对象中,最后把这个结构对象添加到文档的结构链表中去。在 o n m o u s e m o v e 函数中主要是在鼠标移动时,鼠标点击的第一点和鼠标光 标移动时所在点之间的这条直线画出来,同时覆盖前面所画的一条直线。 这里要用到s e t r o p 2 这个函数,它是用来设置绘图颜色和目标的组合方 式,我们在覆盖原来的直线是,选择组合模式为r 2n o t x o r p e n ,这 样就能把原来的直线覆盖掉,在绘制新的直线是,用系统原来的组合模 式。这样就能实现上面的功能了。 5 3 2 绘制曲线的实现 在这个系统中,曲线的实现主要就是贝塞尔曲线的实现。贝塞尔曲 线是由节点连接而成的线段组成的直线或曲线,每个节点都有控制点, 允许修改线条的形状。它是由一个或多个宣线段或曲线段组成。在贝塞 尔曲线的实现中,我们采用递归的方法实现。为了提高绘制的精度和防 止出现递归的失败,我们重新定义一个用双精度表示的点的结构 d p o i n t ,其结构如下: t y p e d e fs t r u e t d o u b l ex ,y ; d p o i n t ; 一般的b e z i e r 曲线1 5 3 m 4 】可以拟合任何数目的控制点。曲线将逼近这 武汉理工大学硕士学位论文 些控制点,并且控制点的相关位子决定了b e z i e r 多项式的次数。假定给 出n + 1 个控制点位子,b e z i e r 混合函数: b e z ( u ) = c ( n ,k ) u 。( 1 一u ) 畦 x ( u ) = x kb e z ( k ,n ) ( u ) y ( u ) = nk b e z ( k ,n ) ( u ) 5 1 z ( u ) = z kb e z ( k ,n ) ( u ) 给定空间n + 1 个点的位置矢量p f ( 卢0 ,l ,2 ,h ) ,则b e z i e r 参 数曲线上各点坐标的插值公式是: p ( t ) 2 p ,b 。( f ) ,f 【o ,l 】 i = l ( 5 2 ) 其中,p ,构成该b e z i e r 曲线的特征多边形,b 。( f ) 是玎次b e r n s t e i n 基函数: 。 b ,( ,) = c l ( 1 一力“= 焉f ( 1 一,) “。( f = 。,1 ,d ( 5 - 3 ) b e z i e r 曲线实例如下图所示。 p 0 p 3 p 0p , 图5 - 6 b e z i e r 曲线 武汉理工大学硕士学位论文 根据上面的理论我们可以得到关于b e z i e r 的主要绘制算法 f l o a tc 1 0 0 】; i n tk ,i ,n = n u m - 1 ; f o r ( k = 0 ;k :k + 1 ;i ) c k 】+ = i ; f o r ( i = n - k ;j = 2 ;i ) c k = i ; ) f l o a tu = o 0 : f o r ( i = 0 ;i 2 0 0 0 ;i + + ) c u r v e i x = 0 ;c u r v e i y = o ; f o r ( k = o ;k l i n e t o ( c u r v e i + 1 】) ; + p o p 5 百罡屯,。一一t 。4 。 图5 7b e z i e r 曲线绘制 在对b e z i e r 曲线的控制方面我们出来采用交互式的输入控制点还加 入了控制点的移动功能,在此基础上我们可以对画好的曲线进行调整来 达到我们更好的控制曲线的目的。 5 3 3 绘制圆的实现 圆的绘制和直线的绘制方式是一样的,主要是用到了c d c 类中画圆 武汉理工大学硕士学位论文 的函数e l l i p s e 。同时,在绘制时要对画刷进行重新设置,因为在默认的 情况下,系统会使用画刷绘图,也就是说在画圆的时候圆的内部会被填 充,它下面的图形将会被遮住 2 0 】。为了不使用画刷,我们首先对c d c 类进行设置,让它在绘图时不使用画刷,设置的方式为c b r u s h * o l d b r u s h = ( c b r u

温馨提示

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

评论

0/150

提交评论