2020年计算机图形学实验指导书.pdf

上传人:文*** 文档编号:93397061 上传时间:2023-07-04 格式:PDF 页数:53 大小:9.45MB
返回 下载 相关 举报
2020年计算机图形学实验指导书.pdf_第1页
第1页 / 共53页
2020年计算机图形学实验指导书.pdf_第2页
第2页 / 共53页
点击查看更多>>
资源描述

《2020年计算机图形学实验指导书.pdf》由会员分享,可在线阅读,更多相关《2020年计算机图形学实验指导书.pdf(53页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、文档仅供参考,不当之处,请联系改正。第一章计算机图形学的软件开发环境计算机图形学中的程序都是用C语言编写的,T u r bo C和V is u al C+常见的两种C语言开发环境,T u r bo C是 在D o s环境下开发,而V is u al C+是在W in d o w s环境下开发。1.1、在Turbo C环境下开发应用程序一些高级语言都扩充了图形功能,这使得用户能够不需配备专门的图形软件,就能在计算机上进行图形工作。T u r bo C 2.0包含有4 6 0多个库函数,其中有7 0多个图形函数,这些函数包括了绘图、处理图象及图素、屏幕及视图区控制、颜色及线型设置、状态查询和出错处

2、理等,这 使 得T u r bo C具有很强的图形功能。1.图形显示器的工作方式I B M P C机的显示器能够在两种基本视频方式下工作:一种是文本方式;另一种是图形方式。(1)文本方式在文本方式下,屏幕上能够显示的最小单位是字符,字符在屏幕上以行、列排列,即我们一般见到的情况。文本方式不同,屏幕上所显示字符的行数和列数也不一样,颜色也会有所区别。T u r bo C支 持6种不同的文本显示方式。(2 )图形方式文档仅供参考,不当之处,请联系改正。在图形方式下,屏幕上能够控制的最小单元称作像 素(p ix e l ),它是组成图形的基本元素,一般叫 作“点”。一般把屏幕上所包含像素的个数叫做分

3、辨率。分辨率越高,显示的图形越细致、质量越好,这是显而易见的。在图形方式下,屏幕上每个像素的显示位置用点坐标系来描述。在该坐标系中,屏幕左上角为坐标系的原点,坐 标 值 为(0 ,0 );水平方向为X轴,自左向右;垂直方向为Y轴,自上向下。见下图。(0,0)X maxXYmaxY点坐标系中坐标值的范围决定于所用显示器的分辨率。分辨率不同,水平方向上和垂直方向上的点数也不同,即 其m ax x、m a x y的数值不同。就我们常 见 的V G A显示器来说,它一般所用的分辨率为6 4 0 5 4 8 0,即 它 的m ax x值 为6 3 9,m ax y的值为4 7 9 o文档仅供参考,不当之

4、处,请联系改正。2.图形函数及其用法T u r bo C的图形函数均在一个头文件g r ap h ic s,h中定义。因此,凡是在程序中要调用这些图形函数,都必须在源程序的开头写上文件包含命令:#i n c l ud e (1)图形系统管理在一般默认情况下,显示器处于文本方式下。在文本方式下,所有的图形函数均不能应用。因此在调用图形函数绘图之前,必须先将显示器设置为图形模式,这就是一般所说的图形方式初始化。在图形工作完毕之后,又要使显示器回到文本方式,以便进行程序文件等的编辑工作。图形方式初始化图形方式初始化经过函数i n i tg ra ph来实现,它的功能是经过从磁盘上装入一个图形驱动程序

5、来初始化图形系统,并将系统设置为图形模式。其调用格式为:i n i tg ra ph(i n t*g d ri ve r,i n t*g m o d e,c h a r*pa th);调用该函数需用的三个参数含义为:g d ri ve r:是一个整型值,用来指定装入的驱动程序名。g m o d e :是一个整型值,用来设置图形显示模式。文档仅供参考,不当之处,请联系改正。pa th :是一个字符串,用来指明驱动程序所在的路径。举例:假设使用V G A显示器,图形显示模式为V G A H I ,即高分辨率图形模式,分辨率为6 4 0 5 4 8 0。则初始化调用方式如下:i n t g d ri

6、 ve r=V G A ,g m o d e =V G A H I ;i n i tg ra ph (&g d ri ve r,&g m o d e ,c:tc );关闭图形模式在运行图形程序结束后,应及时关闭图形模式,回到文本方式,以进行其它工作。关闭图形模式用函数c l o se g ra ph ,其调用方法为:c l o se g ra ph ();(该函数不需参数)(2)绘图函数从理论上来说,用像素点几乎能够画出任何图形,但毕竟是效率太低。为此,T urb o C的B G I提供了一些基本的绘图函数,以方便图形设计。所有绘图函数调用时的参数,其类型均为整型,因此填入参数表的参数,应为整

7、数或整型变量putpixeI函数:将指定的颜色写到由坐标x,y所确定的点。如 putpi x e l (x,y,G R E E N);I in e函数:在指定两点之间画直线。如:l i n e (x l,y l ,x 2 ,y 2 );I in e to函数:从当前点画线到指定点。如:l i n e to文档仅供参考,不当之处,请联系改正。m o ve to函数:把当前点移到指定点(不画线)。如:m o ve to (x ,y )c i rc l e函数:指定圆心和半径画圆。如:c i rc l e(x c ,y c ,r);a rc函数:画一段圆弧。要求指定圆弧所在圆的圆心、半径,以及圆弧的

8、起始角和终止角。如:a rc (x c ,y c ,a n g s,a n g e ,r);re c ta n g l e函数:指定矩形的两对角点画一个矩形。如:re c ta n g l e (x l ,y l ,x 2 ,y 2 );d ra wpo l y函 数:画 一 条 任 意 多 边 折 线。如:d ra wpo l y (n ps,x y );其中,n ps为多边折线的顶点数;xy为存放顶点坐标值的数组名。如果首尾两点重合,则能够绘制一个任意多边形。(3)图形属性控制图形的属性指颜色和线型,颜色又有背景色和前景色之分。背景色指的是屏幕的颜色,即底色;前景色指的是绘图用的颜色。任何

9、绘图函数都是在当前颜色(背景色和前景色)和线型的状态下作图的。系统的默认值为:背景色为黑色;前景色为白色;线型为实线。文档仅供参考,不当之处,请联系改正。setbkcolor函数:设置背景颜色。如:setbk col or(C O L O R N A M E );setcolor函数:设置前景颜色。(用法同上)set I inesty Ie 函数:设置线型。如:setl inestyl e(L S T Y,0 ,W ID T H );(4 )绘图程序简例#include main()|/*DETECT的含义是自动检测当前显示器的类型,且选用最大可能的分辨率模式*/int gd=DETECT,g

10、m;initgraph(&gd,&gm,“f:tc);setbkcolor(LIGHTBLUE);setcolor(RED);circle(320,240,100);/*getch()的含义是读入一个字符,但不回显在窗口中,加入这句语句的目的是防止显示的图像很快消失*/getch();closegraph();)1.2、在 V i sua l C+环境下开发应用程序一.W i nd ows编程基础V isual C+是可视化开发系统,一般而言,可视化开发系统集成了一系列系统可用资源和开发工具:文档仅供参考,不当之处,请联系改正。程序调试工具包括源程序语法检查、可执行程序修改和运行监视等;可选择

11、并构成具体语句或源程序结构的例程库及H el p;资源管理器包括图形化窗口及组成元素的多种对象的编辑器;应用程序H el p和 S etup开发工具包,源程序编辑器和编译器;系统函数库和系统函数开发工具。在 W indows的程序设计语言 中,V C、V B、V J 都是“面向对象”的程序设计语言。对象是W indows的规范部件:窗口、菜单、按钮、对话框、程序模块都是对象。编写W indows程序相当一部分工作是在创立对象和为对象属性赋值。对象具有规范形态和操作模式的特征。在用vc进行编程时有两种方法:传统的编程方法方法和交互式编程方法。传统的编程方法是采用直接调用A P I 的方法进行编程

12、,A P I是 W in系统与W in应用程序间的标准程序接口,A P I为应用程序提供W indows系统特殊函数及数据结构,而且W in应用程序能够利用标准大量A P I函数调用系统功能。A P I函数的功能包括:窗口管理函数实现窗口的创立、移动和修改功能;系统服务函数:实现与操作系统有关的多种功能;图形设备(G D I)函数:实现与设备无关的图形操作功能。交互式编程方法是采用M F C 的方法进文档仅供参考,不当之处,请联系改正。行编程。采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节

13、代码段,最后构成完整的应用程序。利用W i n d o w s A P I函数编写W i n d o w s应用程序必须首先了解以下内容:(1)窗口的概念(2)事件驱动的概念句柄(4)消息(D窗口一个应用程序的窗口 一般包含下列成分:编写一个W i n d o w s应用程序首先应创立一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数文档仅供参考,不当之处,请联系改正。据交换的过程。事件驱动W i n d o w s 程序设计是针对事件或消息的处理进行,消息是指描述事件发生的信息(如按下鼠标或键盘)。W i n d o w s 程序的执行顺序取决

14、于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,可是消息的产生往往并不要求有次序之分。事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式。(3)句柄句柄是一个4 字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例,应用程序经过句柄访问相应的对象信息。以下是常见句柄类型及其说明:H W N D窗口句柄H DC设备环境句柄H B I T M A P位图句柄H C U R SO R光标句柄EI C O N图标句柄H FO N T字体句柄H M EN U菜单句柄H P EN回笔句柄H FI L E文件句柄H B R U SH画刷文档仅供参考,不当之处,请联系改正

15、。句柄H I N ST A N C E 当前实例句柄(4)消息W i n d o w s 应用程序利用W i n d o w s 消息(M e s s a g e)与应用程序及系统进行信息交换。消息由三部分组成,消息号:由事先定义好的消息名标识;字参数(w P a r a m):用于提供消息的附加信息;长字参数(I P a r a m):用于提供消息的附加信息,附加信息与具体消息号的值有关在 W i n 中消息用结构体M SG 表示:t y p e d e f s t r u c t t a g M SG H W N D h w n d;窗口句柄,为 n u l l,则可检索所有驻留在消息队列

16、中的消息UI N T me s s a ge;消息值,由 Wind o w s,h 头文件中的宏定义来标识WP AR AM w P a r a 叫 包含有关消息的附加信息,不同消息其值有所不同L P AR AM I P a r a m;D WO R D t ime;指定消息送至队列的时间P O I N T p t;指定消息发送时屏幕光标的位置,其数据类型殁幽也是一个结构体 M S G;文档仅供参考,不当之处,请联系改正。t y p e d e f s t r u c t t a gP O I N T L O N G x;L O N G y;P O I N T;VC 中存在几种系统定义的消息分类

17、,不同的前缀符号经常见于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:B M 表示按钮控制消息C B 表示组合框控制消息D M 表示默认下压式按钮控制消息E M 表示编辑控制消息L B 表示列表框控制消息S B M 表示滚动条控制消息WM 表示窗口消息Wind o w s 编程常见消息包括:窗口管理消息,初始化消息,输入消息,系统消息,剪贴板消息,控制处理消息,控制通知消息,滚动条通知消息,非用户区消息,M D I 消息,D D E 消息,应用程序自定义的消息。二、Wind o w s应用程序常见消息1.WM.LBUTTONDOWN:产生单击鼠标左键的消息。I P a r a m:低字节

18、包含当前光标的X 坐标值 高字节包含当前光标的Y 坐标值;w P a r a m包含一整数值以标识文档仅供参考,不当之处,请联系改正。鼠标键的按下状态;M K _ L B UT T O N 按下鼠标左键,M K _ M B UT T O N 按下鼠标中键,M K _ R B UT T O N 按下鼠标右键.另外,相似的消息还有:WM _ L B UT T O N UP:放开鼠标左键时产生;WM _ R B UT T O N D O WN:单击鼠标右键时产生;WM _ R B UT T O N UP:放开鼠标右键时产生;WM _ L B UT T O N D B L C L K:双击鼠标左键时产

19、生;WM _ R B UT T O N D B L C L K:双击鼠标右键时产生2.WM_KEYDOWN:按下一个非系统键时产生的消息。系统键是指实现系统操作的组合键,例如Al t 与某个功能键的组合以实现系统菜单操作等。w P a r a m:按下键的虚拟键码,用以标识按下或释放的键(如 F 1 的虚 拟 键 码 在 Wind o w s,h 文 件 中 定 义 为 VK _ F 1 );I P a r a m:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。相似的消息还有WM.K E Y UP,在放开非系统键时产生3.WM_ CHAR:按下一个非系统键时产生的消息。WP a

20、r a m:为按键的 AS C H 码;I P a r a m:与 WM _ K E Y D O WN的相同。文档仅供参考,不当之处,请联系改正。4.WM_CREATE:由 C r e a t e Wind o w 函数发出的消息。w P a r a m:未用;I P a r a m:包含一个指向 C R E AT E S T R UC T数据结构的指针。5.WM_CLOSE:关闭窗口时产生的消息。w P a r a m和I P a r a m均未用。6.WM_DESTROY:由 D e s t r o y Wio d o w 函数发出的消息。w P a r a m 和 I P a r a m

21、 均未用。7.WM_QUIT:由 P o s t Q u it M e s s a ge 函数发出的消息,退出应用程序时发出的消息。w P a r a m:含退出代码,标识程序退出运行时的有关信息;I P a r a m:未用8.WM_PAINT:以下情况时将产生WM _ P AI N T 消息。用户区移动或显示,用户窗口改变大小,程序经过滚动条滚动窗口,下拉式菜单关闭并需要恢复被覆盖的部分,W i n dows清除对话框等对象,并需要恢复被覆盖的部分均产生W M _ P A I N T 消息。三Windows中的事件驱动程序设计过程驱动程序设计和事件驱动程序设计的区别如下图:文档仅供参考,不

22、当之处,请联系改正。四 W i ndows应用程序组成及编程步骤1.应用程序的组成一个完整的W i n dows应用程序一般由五种类型的文件组成。1.C 语言源程序文件2.头文件3.模块定义文件文档仅供参考,不当之处,请联系改正。4.资源描述文件5.项目文件2 .源程序组成结构W i n M ai n 和 W n dP r oc是 W i n dows应用程序的主体,W i n dows应用程序由这两个函数构成基本框架。入口函数W i n M ai n:1.是所有应用程序的入口,类似M ai n函数,2.完成一系列的定义和初始化,并产生消息循环。窗口函数W n dP r oc包含各种数据类型、

23、数据结构与函数等。(1)W i nM a i n 函数W i n M ai n 函数的功能是注册窗口类,建立窗口及执行必要的初始化。并进入消息循环,据接受的消息调用相应的处理过程,当消息循环检索到W M _ Q U I T 时终止程序运行。W i n M ai n 函数由三个基本的组成部分:函数说明、初始化和消息循环。W i n M ai n 函数的说明如下:i n t W I N A P I W i n M ai n(H I N S T A N C E hT hi sI n st,应用程序当前实例句柄H I N S T A N C e hP r e vI n st,应用程序其它实例句柄L P

24、 S T R I p sz C m dL i n e,/指向程序命令行参数的指针文档仅供参考,不当之处,请联系改正。I n t n C m dS how 应用程序开始执行时窗口显示方式的整数值标识)注意!W i n是多任务管理的,同一应用程序的多个窗口可能会同时存,W i n系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识(2)初始化初始化包括四个步骤。窗口类的定义:定义窗口的形式与功能;窗口类的注册:窗口类必须先注册后使用;创立窗口实例;显示窗口。(a)窗口类定义经过给窗口类数据结构W N D C L A S S赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常见以下函数:

25、L oadi con:作用是在应用程序中加载一个窗口图标。其原型为:E I C O N L o a d i co n (H I N S T A N C E h l n s ta n ce,/h l n s ta n ce图标资源所在的模块句柄,N U L L则使用系统预定义图标,L P C T S T R I p I co n N a m e/I p I co n N a m e图标资源名或系统预定义图标标识名。)文档仅供参考,不当之处,请联系改正。LoadCursor:作用是在应用程序中加载一个窗口光标。其原型为:HCURSOR LoadCursor(HINSTANCE hlnstance,

26、/hlnstance光标资源所在的模块句柄,NULL则使用系统预定义光标LPCTSTR IpCursorName)/IpCursorName光标资源名或系统预定义光标标识名GetStockObject:作用是获取系统提供的背景刷,其原型为:HBRUSH GetStockObject(int nBrush);/nBrush 刷文档仅供参考,不当之处,请联系改正。一子的类型(b)注册窗口类W i n 系统本身提供部分预定义的窗口类,程序员也能够自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数R e g i s te r C l a s s ()实现。R e g i s te r C l a

27、 s s (&w n d cl a s s);/w n d cl a s s 为窗口类 结 构R e g i s te r C l a s s 函数的返回为布尔值,注册成功则返回真(C)创立窗口实例创立一个窗口类的实例由函数C r e a te W i n d o w ()实现,函数原型如下:H W N D C r e a te W i n d o w(L P C T S T R I p s zC l a s s N a m e,窗口类名L P C T S T R I p s zT i tl e,窗口标题名D W O R D d w S tyl e,创立窗口的样式i n t x,y,窗口左上角

28、坐标i n t n W i d th,n H e i g h t,窗口 宽度和度高H W N D h w n d P a r e n t,该窗口的父窗口句柄H W E N U h M e n u,窗口主菜单句柄文档仅供参考,不当之处,请联系改正。H I N S T A N C E h l n s ta n ce,创立窗口的应用程序当前句柄L P V O I D I p P a r a m 指向一个传递给窗口的参数值的指针)常用窗口样式说明WS_BORDER包犍一带边框的窗口WS_CAPTION年犍一带标题栏的窗口WS_VSCROLL包犍一带垂直滚动条的窗口WS_MAXIMIZEBOX创犍一带最

29、大化框的窗口WS_MAXIMIZE包犍一最大尺寸的窗口WS_MINIMIZEBOX毒犍一带最小化框的窗口WS_MINIMIZE包犍一最小尺寸的窗口WS_OVERLAPPED包犍一带边框和标J8的窗口WS_OVERL APPE D WINDOW包惚一带边框、标题栏、系 皖 单 及 最 大、最小化框的窗口WS_POPUP卷犍一弹出式窗口WS_P OPUPWIND 0 W含犍一带边框和系纭单的弹出式窗口WS_SYSMENU包犍一带系皖单的窗口WS_HSCROLL包犍一带水平滚动条的菜单(d)显示窗口窗口类的显示由S h o w W i n d o w 和U p d a te W i n d o w

30、函数实现。应用程序调用S h o w W i n d o w 函数在屏幕上显示窗口:S h o w W i n d o w (h w n d,n C m d s h o w);/n C m d s h o w 为窗口显示形式标识SW-HIDE隐豪窗口SW_SHOW NORMAL显示并激活窗口SW _SHOW M INIM IZE显示并最小化窗口SV SHOW MAX M IZE显示并最大化窗口SW-SHOW NOACTIVE显示但不激活窗口SMRESTORE恢复窗口的原来位置及尺寸显示窗口后,应用程序调用U p d a te W i n d o w 更新并文档仅供参考,不当之处,请联系改正。绘

31、 制 用 户 区,并 发 出W M _ P A I N TU p d a te W i n d o w(h w n d);(3)消息循环消息循环的过程如下图所示:消 息。Windows来产生的消息将消息传递给窗口函数的相消息循环的常见格式如下:M S G M s g;w h i l e (G e tM e s s a g e (&M s g,N U L L,0,0)从消息队列中读取一条消息,并将消息放在M S G结构中 T r a n s l a te M e s s a g e(&M s g);/将消息的虚拟键转换为字符信息D i s p a tch M e s s a g e(&M s g

32、);将消息传送到指定窗口函数其中函数G e tM e s s a g e形式为:G e tM e s s a g eI p M S G,指向M S G结构的指针h w n d,n M s g F i l te M i n,用于消息过滤的最小消息号值n M s g F i l te r M a x 用于消息过滤的最大消息号值文档仅供参考,不当之处,请联系改正。)返回零值,即检索到W M _ Q U I T消息,程序结束循环并退出2.窗口函数 W i nP rocW i n P r o c定义了应用程序对接收到的不同消息的响应,包含了对各种可能接收到的消息的处理过程。W i n P r o c函数

33、由一个或多个s w i tch语句组成。每一条ca s e语句对应一种消息,当应用程序接收到一个消息时,相应的ca s e语句被激活并执行相应的响应程序模块。窗口函数的一般形式如下:L R E S U L T C A L L B A C K W n d P r o c(H W N D h w n d,U I N Tm e s s g a e,W P A R A M w P a r a m,L P A R A M I P a r a m )s w i tch (m e s s a g e)/m e s s a g e 为标识的消息 ca s e b r e a k;ca s e W M _ D

34、E STR O Y:P o s t Q u i t M e s s a g e(0);文档仅供参考,不当之处,请联系改正。d e f a u l t:r e t u r nD e f W i n d o w P r o c(h w n d,m e s s a g e,w P a r a m,1P a r a m);)r e t u r n(0);)在消息处理程序段中一般都有对W M _ D E STR O Y的处理,该消息是关闭窗口时发出的。它向应用程序发出W M _ Q U I T消息,请求退出处理函数:v o i d P o s t Q u i t M e s s a g e(i n t

35、n E x i t C o d e)n E x i t C o d e为应用程序的退出,为未定义处理过程的/消息提供缺省处理3.数据类型在W i n d o w s,h中定义了 W i n d o w s应用程序中包含种类繁多的数据类型文档仅供参考,不当之处,请联系改正。期 频说 明WORD16位无符号整数LONG32位有符号整数DWORD32位无符号整数HANILE句柄PINT32位无符号整数BOOL布尔值LPTSTR指向字符串的32位指针LPCTSTR指向字符串常量的32位指针4.一些重要的数据结构M SG:包含一个消息的全部信息,是消息发送的格式W I N D C L A SS:包含一个

36、窗口类的全部信息及属性P O I N T:定义了屏幕上或窗口中的一个点的X和 Y坐标R E C T:定义了一个矩形区域及其左上角和右下角的坐标五、应用程序【例 2-1创立应用程序框架。本例的目的在于说明创立W i n d o w s 应用程序的方法及过程,程序的效果如下图所示。文档仅供参考,不当之处,请联系改正。#include 包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);窗口函数说明/.以下初始化窗口类.int WINAPI WinMain(HINSTANCE hlnstance,HINSTAN

37、CE hPrevInst,LPSTRlpszCmdLine,int nCmdShow)HWND hwnd;MSG Msg;WNDCLASS wndclass;文档仅供参考,不当之处,请联系改正。.char IpszClassName=窗 口;窗 口 类名char lpszTitle=nMy_Windowsn;窗口标题名窗口类的定义wndclass.style=O;窗 口类型为缺省类型wndclass.IpfnWndProc=WndProc;定义窗口处理函数wndclass.cbClsExtra=O;窗 口 类无扩展wndclass.cbWndExtra=O;窗 口 实例无扩展wndclass.

38、hlnstance=hlnstaiice;当 前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);窗口的最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);窗口采用箭头光标wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);窗口背景为白色wndclass.lpszMenuName=NULL;/窗 口中无文档仅供参考,不当之处,请联系改正。菜单wndclass.lpszCIassName=lpszClassName;/窗口类名为“窗口”/.以

39、下进行窗口类的注册if(!RegisterClass(&wndclass)如果注册失败则发出警告 MessageBeep(O);return FALSE;/.创立窗口.hwnd=CreateWindow(IpszClassName,窗 口类名IpszTitle,窗口实例的标题名WS_OVERLAPPEDWINDOW,窗 口 的风格CW_USEDEFAULT,CW_USEDEFAULT,窗口左上角坐标为缺省值CW.USEDEFAULT,CW_USEDEFAULT 窗口的高和宽为缺省值NULL,此窗口无父窗口NULL,此窗口无主菜单hlnstance,创立此窗口的应用程序的当前文档仅供参考,不当之

40、处,请联系改正。一句柄NULL 不使用该值);/.显示窗口.ShowWindow(hwnd,nCmdShow);/.绘制用户区.Update Window(hwnd);/.消 息 循 环.while(GetMessage(&Msg,NULL,0,0)(TranslateMessage(&Msg);DispatchMessage(&Msg);)return Msg.wParam;消息循环结束即程序终止时将信息返回系统)窗口函数LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam文档仅供参考,不当之处

41、,请联系改正。)switch(message)case WM_DESTROY:PostQuitMessage(O);default:缺省时采用系统消息缺省处理函数returnDefWindowProc(hwnd,message,wParamJParam);)return(O);)六、绘图函数在W i n d o w s平台下,常见的绘图函数有:Se t P i x e l:在x,y点画上相应的颜色。例如:Se t P i x e l (h d c,x,y,cr C o l o r),cr C o l o r 的类型是C O L O R R E F,C O L O R R E F是一个3 2位的

42、无符号整数,代表一种颜色,常见R G B宏来生成颜色。#d e f i n e R G B(r,g,b)(C O LO R R E F)(B YT E)(r)|(WO R D)(B YT E)(g)8)|(D WO R D)(B YT E)(b)1 6)文档仅供参考,不当之处,请联系改正。Mo ve T o E x:把 当 前 点 移 动 到 指 定 点,如Mo ve T o E x(h d c,xB e g,y B e g,N U LL);Li n e T o:从 当 前 点 画 线 到 指 定 点,如Li n e T o (h d c,xE n d,y E n d);当要画图时,应在WM_

43、 P A IN T 消息下编写程序:switch(message)(case WM_PAINThdc=BeginPaint(hwnd,&ps);GetClientRect(hwnd,&rect);在此添加绘图函数EndPaint(hwnd,&ps);return 0;case WM_DESTROY:PostQuitMessage(O);default:缺省时采用系统消息缺省处理函数returnDefWindowProc(hwnd,message,wParamJParam);)文档仅供参考,不当之处,请联系改正。第二章计算机图形学的实验2.1直线的生成(-)直线的DDA算法1、实验目的(1)熟悉

44、T urbo C或在Vi s ua l C+开发环境,掌握在T urbo C 或在Vi s ua l C+环境下进行图形程序设计的基本方法。掌握直线的D D A 算法2、实验内容根据输入的直线的端点坐标画出相应的直线。3、独立图形运行程序的建立T urbo C对于用i n i tg ra p h。函数直接进行的图形初始化程序,在编译和链接文档仅供参考,不当之处,请联系改正。时并没有将相应的驱动程序(*.B G I)装入到执行程序,当程序进行到i n ti tg ra p h()语句时,再从该函数中第三个形式参数c h a r*p a th 中所规定的路径中去找相应的驱动程序。若没有驱动程序,则

45、在C:T C 中去找,如 C:T C 中仍没有或T C 不存在,将会出现错误:B G I E rro r:G ra p h i c sn o t i n i ti a l i z e d (us e i n i tg ra p h)因此,为了使用方便,应该建立一个不需要驱动程序就能独立运行的可执行图形程序,T urbo C中规定用下述步骤(这里以E G A、VG A 显示器为例):1 .在 C:T C 子目录下输入命令:B G IO B J E G A VG A此命令将驱动程序E G A VG A.B G I转换成E G A VG A.O B J的目标文件。2 .在 C:T C 子目录下输入命

46、令:T LIB文档仅供参考,不当之处,请联系改正。LIB G R A P HIC S.LIB+E G A VG A此命令的意思是将E G A VG A.O B J的目标模块装到G R A P HIC S.LIB 库文件中。3.在程序中i n i tg ra p h。函数调用之前加上一句:re g i s te rbg i d ri ve r(E G A VG A _ d r i ve r):该函数告诉连接程序在连接时把E G A VG A的驱动程序装入到用户的执行程序中。经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。假设已作了前两个步骤,若再向例6中加r e g i s t

47、 e r b g i d r i v e r ()函数则变成:例7:#i n c l u d e#i n c l u d e i n t m a i n()文档仅供参考,不当之处,请联系改正。i n t g d r i v e r=DET ECT,g m o d e;r e g i s t e r b g i d r i v e r (EGAVGA_ d r i v e r):/*建立独立图形运行程序*/i n i t g r a p h(g d r i v e r,g m o d e,c:t c);b a r 3 d(5 0,5 0,2 5 0,1 5 0,2 0,1);g e t c h

48、();c l o s e g r a p h ();r e t u r n 0;)上例编译链接后产生的执行程序可独立运行。4、参考程序这里只给出了实现DDA算法的一个子函数,当上文档仅供参考,不当之处,请联系改正。机调试时需根据所选用的编程环境自己来成整个程序。#include#include#includevoid Line(intxO,int yOJntx1,int y1,intvalue)int x;floatdx,dy,m,y;dx=x1-x0;dy=y1-y0;m=dy/dx;文档仅供参考,不当之处,请联系改正。y=yo;for(x=xO;x=0)/*准备x 或 y 的单位递变值。*

49、/inc=1;elseinc=-1;if(abs(dx)abs(dy)if(dx0)tmp=x1;/*将 2a,3a 象限方向*/x1=x2;/*的直线变换到1a,4a*/x2=tmp;tmp=y1;/*象限方向去7yi=y2;dx=-dy;dy=-dy;p=2*dy-dx;文档仅供参考,不当之处,请联系改正。const1=2*dy;/*注意此时误差的*/const2=2*(dy-dy);/*变化参数取值.*/x=x1;y=yi;set_pixel(x,y,c);while(xx2)x+;if(P0)p+=const1;elsey+=inc;p+=const2;set_piexl(x,y,c)

50、;else if(dy0)tmp=x1;/*将3b,4b象限方向的*/x1=x2;/*直线变换到2b,1b*/x2=tmp;/*象限方向去.*/tmp=y1;yi=y2;dx=-dy;dy=-dy;p=2*dx-dy;/*注意此时误差的7const1=2*dx;/*变化参数取值.*/const2=2*(dx-dy);x=x1;y=yi;set_pixel(x,y,c);while(ybottomscan?;scan-)up date_first_and_last(count,scan);文档仅供参考,不当之处,请联系改正。process_x_intersections(scan,first_s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com