收藏 分销(赏)

计算机图形学试验参考指导书.doc

上传人:精*** 文档编号:2716263 上传时间:2024-06-04 格式:DOC 页数:72 大小:1.70MB
下载 相关 举报
计算机图形学试验参考指导书.doc_第1页
第1页 / 共72页
计算机图形学试验参考指导书.doc_第2页
第2页 / 共72页
计算机图形学试验参考指导书.doc_第3页
第3页 / 共72页
计算机图形学试验参考指导书.doc_第4页
第4页 / 共72页
计算机图形学试验参考指导书.doc_第5页
第5页 / 共72页
点击查看更多>>
资源描述

1、计算机图形学实 验 指 导 书郗润平 编制西北工业大学计算机学院二一一年四月 修订说 明依照我院计算机图形学教学大纲规定及课堂教学内容,参阅其他院校本课程教学与实验课内容,并结合学生和实验室状况,特编制本实验指引书供学生在上机实验学时参照使用。本实验大纲择选与课程教学较为密切若干实验,每个实验分别给出了参照机时数,实验时可依照详细机时安排状况选做。在附录中简朴地简介了Open GL 和DirectX 3D两个三维图形开发平台基本概念和有关重要函数,供感兴趣同窗入门学习参照使用。XRP于.3.15补充了MFC中几种惯用DC使用阐明等;(附录二1314)补充了VC下OpenGL编程框架细节。(附录

2、三)于.4.24补充MFC菜单使用;(附录二10)补充了对话框使用;(附录二11)鼠标拾取点示例。(附录二12)于.4.26补充了工具条使用 (附录二13)于.3.14增长三(二)9修改OnEraseBkgnd()函数,禁止重绘背景,避免动画时闪烁。于Sydney .1.18目 录 实验一 直线生成算法1实验二 圆弧生成算法2实验三 窗口菜单交互界面2实验四 区域填充算法3实验五 裁剪算法算法3实验六 图形软件开发包/库应用3实验七 曲线生成算法4实验八 曲面生成算法4实验九 二维图形变换5实验十 三维图形变换5实验十一 真实感图形6附 录7一、C语言中图形函数及其用法7二、VC集成开发环境下

3、基于MFC绘图16三、OpenGL绘图30四、DirectX 3D绘图35五、实验报告模板39六、计算机图形学上机实验评分原则40实验一 直线生成算法一、实验教学目的与基本规定1. 理解光栅图形显示屏工作原理和特点; 2. 学习C/VC环境下基本绘图办法;3. 实践与巩固直线基本生成算法。4. 掌握直线扫描转换算法原理及实现;二、实验课程内容 (2学时) 基于光栅图形显示屏,在C环境中生成不同粗细和线型任意直线。1. 理解光栅图形显示屏特点;2. 熟悉C环境下图形程序绘图办法;3. 实践DDA、中点及Bresenham基本算法,并至少用两种基本算法生成任意直线;i. 任意斜率:-1k0 ,(5

4、0,400)(500,50);0k1,如(50,50)(300,200):1|k|,如(50,50)(300,400);k=,如(200,50)(200,400)。ii. 任意起始点:如(200,500)(100,200),(300,200) (50,50) 4. 改进办法,实现对直线实现线宽和线型(虚线、点划线等)控制。三、实验参照关于C环境下绘图简介请参见附录一,如下实例为绘制一条直线(TC编译环境),供上机实验时参照使用。#include graphics.h#include string.hmain()int x0=50,y0=50,x1=450,y1=450,color=3;/定义点

5、(50,50),(450,450)和颜色colorint x,y;int gdriver=DETECT,gmode;/定义图形驱动程序和显示模式initgraph(&gdriver,&gmode,);/图形方式初始化cleardevice();/清屏y=y0;for(x=x0;xyr:则画出长轴为水平方向椭圆或椭圆弧;xryr:则画出长轴为垂直方向椭圆或椭圆弧;xr=yr:则可以画出圆或圆弧。例2:调用函数ellipse画出一种椭圆群。#include graphics.h#include stdio.hmain()int a=150,i;int gdriver=EDTECT,gmode;in

6、itgraph(&gdriver,&gmode,);cleardevice()for(i=10;i=140;i+=10);ellips(320,240,0,360,a-i,i);getch();closegraph();3) 多边形rectangel()函数函数rectangle()用于绘制矩形。其调用格式为:rectangle(x1,y1,x2,y2);参数x1,y1,x2,y2均为整型。函数功能是以点(x1,y1)为矩形左上角点,以点(x2,y2)为矩形右下角点,画一种矩形。drawpoly()函数函数drawpoly()可用于画一条多边折线或者一种多边形。其调用格式为:drawpoly(

7、nps,*pxy);它有两个参数。第一种参数nps是一种整型数据,它表时所画多边折线顶点数,第二个参数pxy是一种整型数组数组名,该数组中存储了nps 个顶点坐标值序列。例如,有一种名为d_poly数组中存储了个顶点坐标为x1,y1,x2,y2,x3,y3,x4,y4,则调用方式为:drawpoly(4,d_poly);如果最后一种点坐标与第一种点坐标相似,则运用drawpoly()函数便可以画出一种封闭多边形。此时,坐标点数目应当是多边形顶点数加,即让最后一种顶点和第一种点重叠。例如,有一种名为d_poly数组中存储了6个顶点坐标为x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,

8、x1,y1,则调用方式为:drawpoly(6,d_poly);便可以画出一种具备5个顶点封闭多边形。4. 图形属性控制图形属性控制涉及控制颜色和线型。颜色有背景色和前景色之分。背景色指屏幕颜色(即绘图时底色),前景色指绘图时图形线条所用颜色。任何绘图函数都是在当前颜色(涉及背景色和前景色)和线型状态下进行绘图。前面所举例子中没有提当前颜色和线型,是由于用了系统缺省值(系统缺省值是:背景色为黑色,前景色为白色,线型为实线)。如果绘图时要使用系统缺省值以外颜色和线型,则可以运用图形属性控制函数另行设立。setbkcolor()函数函数setbkcolor()用于设立绘图时背景色。调用格式为:se

9、tbkcolor(color);参数color为一种整型数据,代表所取颜色,可以用整型常数(015),也可以用符号常数。例如,要把背景色设立成浅蓝,可以如下调用:setbkcolor(9);;9表达浅蓝。setcolor()函数函数setcolor()用于设立前景颜色,即绘图用颜色。调用格式为:setcolor(color);参数color含义和用法同setbkcolor()函数。下面例程序可以演示种颜色。例3:显示16种颜色#include graphics.h#include stdio.hmain()int cb,cf;int gdriver=DETECT,gmode;initgraph

10、(&drive,&gmode,);cleardevice();for(cb=0;cb=15;cb+) setbkcolor(cb);for(cf=0;cf=15;cf+)setcolor(cf);circle(100+cf*25,240,100);getch();getch();closegraph();setlinestyle()函数函数setlinestyle()用于设立当前绘图所用线型和宽度,这些设立限于对直线类图形有效。其调用格式如下:setlinestyle(sty,pat,b);该函数所用三个函数含义如下:sty为整型值,用来定义所画直线类型(04);pat为无符号整型数,该参数在

11、需要顾客自定义线型时使用,如果是使用系统定义线型,则该参数可取值;b为整型数,指定所画直线粗细,以象素为单位(1或3)当函数setlinestyle第一种参数为USERBIT-LINE(或)时,可以由顾客自己定义直线类型。例4:编写程序,显示系统预定义四种线型。#include graphics.h#include stdiio.hmain()int i,j,c,x=50,y=50,k=1;int gdrive=DETECT,gmode;printf(input color number.n)scanf(%d,&c);initgraph(&gdriver,&gmode,);cleardevic

12、e();setbkcolor(11);setcolor(c);for(j=1;j=2;j+);for(i=0;i4;i+)setlinestyle(i,0,k);rectangle(x,y,x+210,y+80);x=x+110;y=y+40;k=3;x=50;y=250;getch();closegraph();5. 充填setfillstyle() 函数函数setfillstyle ()用来设立当前充填模式和充填颜色,以便用于充填一种指定封闭区域。其调用格式为:setfillstyle(pattern,color);参数pattern用于指定充填模式(取值:),第二个参数color指定充填

13、用颜色。Floodfill()函数函数floodfill()实行对一指定区域进行充填操作,其充填模式和颜色已由setfillstyle()函数指定。其调用格式为:floodfill(x,y,bcolor);参数x,y指位于充填区域内任意一点坐标,该点作为充填起始点。bcoloor为充填区域边界颜色。例5:下面例程序演示充填状况。#include graphics.h#include stdio.hmain()int i,c,x=5,y=6;int gdriver=DETECT,gmode;printf(input color number.n);scanf(%d,&c);initgraph(&

14、gdriver,&gmode,);cleardevice();setbkcolor(9);for(i=c;ic+8;i+)setcolor(i);rectangle(x,y,x+140,y+104);x=x+70;y=y+52;setfillstyle(1,i);floodfill(x,y,i);getch();closegraph();6. 图形方式下文本输出settextstyle(font,direction,csize)函数。设立字符显示风格。函数三个参数含义如下font:是一种整型数据,用于指明所要使用文字字体(0表达8*8位图字体;1表达三重矢量字体;2表达小号矢量字体;3表达无衬

15、线矢量字体;4表达哥特矢量字体)。direction:是一种整型数据,表达指定文本输出方向(0表达从左向右输出;1表达从上向下输出)。csize:是一种整型数据,表达字符大小(实际是一种放大系数,表达对8*8点阵字符放大倍数,取值范畴是110)。outtext(char *text);在当前位置输出一种文本字符串。outtextxy(int x,int y,char *text);在x,y位置输出一种文本字符串。综合举例例6:渔网图案绘制#include graphics.h#include stdio.hmain()int x,y,x1,y1,x0=320,y0=50;int i,j,n=5

16、,r=20;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,);cleardevice();setbkcolor(9);for(i=0;i2*n;i+)x1=x0-i*r;y1=y0+i*r;for(j=0;j=n-1;j+)x=x1+2*j*r;y=y1+2*j*r;arc(x,y,180,270,r);arc(x,y+2*r,0,90,r);x1=x0-2*r;y1=y0;for(i=0;i2*n;i+)x1=x1+r;y1=y1+r;for(j=0;j=n-1;j+)x=x1-2*j*r;y=y1+2*j*r;arc(x,y,90,1

17、80,r);arc(x-2*r,y,270,360,r);getch();closegraph();例7:图形模式下文本输出#include graphics.h#include stdio.h#include dos.hmain()int i,t,x=300,y=50;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,);cleardevice();setbkcolor(9);setcolor(4);for(i=1;iSetPixel(x,yy,255);设立(x,yy)象素点颜色为255。可在其中加入自己代码,如DDA程序如下:int x

18、,yy; float dx,dy,k,y;int x0=1,y0=1,x1=500,y1=400;COLORREF color=RGB(100,25,108);/定义一种RGB颜色常量 dx=x1-x0; dy=y1-y0;k=dy/dx ; y=y0; for(x=x0;xSetPixel(x,yy,color255); y=y+k; 如图4所示。此外,也可以在这里调用自己声明定义好函数,详见7-9。6. 点击菜单“Build”中“Build All”编译程序,如图5所示,无错误后可执行(Ctrl+F5)。图5 编译或执行7. 声明一种CTestView类成员函数:双击CTestView类可

19、打开TestView.h文献,如图6所示,可在public后声明函数void DDALine(int x1x0,int y1y0,int x2x1,int y2y1,COLORREF int color);图6 成员函数声明8. 返回TestView.CPP文献定义函数void CTestView:DDALine(int x1x0,int y1y0,int x2x0,int y2y0,COLORREFint color)加入自己程序代码。图7 自定义函数9. 在OnDraw(CDC* pDC)中调用定义好函数,如DDALine(100,100,400,500,200);图8 自定义成员函数调用

20、10. MFC菜单实现i. 设立菜单项在VC集成开发环境界面左侧工作区,打开 “Resourse”中“Menu”,选取默认菜单资源“IDR_MAINFRAME”, 添加菜单项,并定义标题、ID及提示等属性,如图9所示。图9ii. 添加命令函数按Ctrl+W快捷键进入MFC类向导,选取View类、刚才定义好菜单项ID、COMMAND消息,如图10所示。然后点击“Add Function”按钮,再单击“OK”添加成员函数,如图11所示。图10 MFC类向导图11 添加成员函数iii. 编辑相应函数点击“Edit Code”按钮进入相应函数编辑区域,可编写相应程序代码,也可调用定义DDA函数,如图1

21、2所示。图12 编写菜单响应函数通过编辑即可选取添加菜单项执行相应程序代码/函数,如图13。图13执行菜单项重复以上环节可添加其他菜单项。11. MFC对话框输入/输出i. 设立对话框在VC集成开发环境界面左侧工作区,打开 “Resourse”中“Dialog”,在其上单击鼠标右键,在POP菜单上选取资源“Insert”, 添加对话框“”,点击“N新建”按钮项,并定义标题、ID及提示等属性,如图9所示。图14 添加对话框ii. 添加对话框控件添加静态文字和文本输入框,如图15所示,并设立文本输入框ID分别为IDC_X1、IDC_Y1、IDC_X2和IDC_Y1。 图15添加对话框控件iii.

22、对话框类及成员变量定义按Ctrl+W进入类设计向导,点OK添加对话框类,并命名为Dialog1如图16,并点击OK按钮确认。图16 定义对话框类选取类向导中“Member Variables”选项来设立成员变量,选中控件IDC_X1后,点击右侧“Add Variable”,如图17设立变量名称为m_pt1_X及变量类型int后,点击“OK”确认,此时可设立变量输入值有效范畴(初始值在对话框构造函数中设立)。同样设立控件IDC_Y1、IDC_X2和IDC_Y1变量名称为m_pt1_Y、m_pt2_X和m_pt2_Y,变量类型均设立为int型。图17 定义成员变量iv. 使用对话框在View类.C

23、PP文献中包括对话类,并定义对话框对象dlg。在菜单选项响应函数中加入dlg.doModel()来执行定义好对话框,并添写获取对话框中输入数据语句,如图18所示。图18 使用对话框此时可编译运营程序,点击相应菜单选项即可执行对话框内容。12. 鼠标拾取点运用类向导(Ctrl+W),在View类中添加WM_LBUTTONUP消息,如图19。图19 添加鼠标左键消息然后点“Edit Code”按钮进入代码编写区,输入如下代码:if(ipt%2!=0)/区别点击先后两点point1=point;/记录 点1OnDDALine(point0.x,point0.y,point1.x,point1.y) ;/两点绘线elsepoint0=point;/记录 点0ipt=

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 应用文书 > 技术指导

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服