计算机网络实验指导书苏州大学.docx

上传人:b****2 文档编号:486862 上传时间:2023-04-29 格式:DOCX 页数:46 大小:654.68KB
下载 相关 举报
计算机网络实验指导书苏州大学.docx_第1页
第1页 / 共46页
计算机网络实验指导书苏州大学.docx_第2页
第2页 / 共46页
计算机网络实验指导书苏州大学.docx_第3页
第3页 / 共46页
计算机网络实验指导书苏州大学.docx_第4页
第4页 / 共46页
计算机网络实验指导书苏州大学.docx_第5页
第5页 / 共46页
计算机网络实验指导书苏州大学.docx_第6页
第6页 / 共46页
计算机网络实验指导书苏州大学.docx_第7页
第7页 / 共46页
计算机网络实验指导书苏州大学.docx_第8页
第8页 / 共46页
计算机网络实验指导书苏州大学.docx_第9页
第9页 / 共46页
计算机网络实验指导书苏州大学.docx_第10页
第10页 / 共46页
计算机网络实验指导书苏州大学.docx_第11页
第11页 / 共46页
计算机网络实验指导书苏州大学.docx_第12页
第12页 / 共46页
计算机网络实验指导书苏州大学.docx_第13页
第13页 / 共46页
计算机网络实验指导书苏州大学.docx_第14页
第14页 / 共46页
计算机网络实验指导书苏州大学.docx_第15页
第15页 / 共46页
计算机网络实验指导书苏州大学.docx_第16页
第16页 / 共46页
计算机网络实验指导书苏州大学.docx_第17页
第17页 / 共46页
计算机网络实验指导书苏州大学.docx_第18页
第18页 / 共46页
计算机网络实验指导书苏州大学.docx_第19页
第19页 / 共46页
计算机网络实验指导书苏州大学.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机网络实验指导书苏州大学.docx

《计算机网络实验指导书苏州大学.docx》由会员分享,可在线阅读,更多相关《计算机网络实验指导书苏州大学.docx(46页珍藏版)》请在冰点文库上搜索。

计算机网络实验指导书苏州大学.docx

计算机网络实验指导书苏州大学

《》

实验报告

 

专业

年级

姓名

学号

指导老师

实验室

使用日期

 

苏州大学计算机科学与技术学院统一印制

二零零二年八月

 

苏州大学计算机科学与技术学院

 

计算机图形学实验指导书

(MFC和OpenGL版)

 

计算机图形学课题组

 

目录

实验一OpenGL程序设计

实验二二维基本图元的生成

实验三二维图元的填充

实验四二维图形的几何变换

实验五二维裁剪

实验六自由曲线

前言

一、实验目的

  1、培养学生动手编程解决实际问题的能力。

2训练学生分析问题和调试程序的能力。

3锻炼学生撰写科技实验论文的能力。

二、实验总体要求

 1问题分析

  充分地分析和理解问题本身,弄清要求做什么,用什么算法。

2程序设计

(1)根据所采用的算法,设计数据结构,画出流程图并编程。

(2)最后准备调试程序的数据及测试方案。

3上机调试

  

(1)对程序进行编译,纠正程序中可能出现的语法错误。

(2)调试前,先运行一遍程序看看究竟将会发生什么。

(3)如果情况很糟,根据事先设计的测试方案并结合现场情况进行错误跟踪,包括单步调试、设置观察窗输出中间变量值等手段。

4整理实习报告

三、实验报告

 1 实习内容:

采用的算法名称

2 问题描述:

包括目标、任务、条件约束描述等。

3 设计:

数据结构设计和核心算法设计。

主要功能模块的输入,处理(算法框架)和输出。

4 测试范例:

测试结果的分析讨论,测试过程中遇到的主要问题及所采用的解决措施。

5 心得:

包括程序的改进设想,经验和体会。

6 程序清单:

源程序,其中包括变量说明及详细的注释。

 

实验1OpenGL程序设计

实验目的

巩固计算机图形学和C语言程序设计的相关知识,初步了解通用图形软件包,了解常见的图元的生成方法,学会图形显示设备的初始化及其交互式图形生成的过程,锻炼程序调试的技巧。

实验学时

2学时

实验类型

学习型实验

实验要求

初步了解OpenGL程序设计结构;了解OpenGL的基本数据类型、核心函数及辅助函数的使用。

四、实验内容

1、综述

这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是VisualC++,它对OpenGL提供了完备的支持。

OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。

2、实验步骤

在VC中新建项目

_新建一个项目。

选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32ConsoleApplication项,然后填入你自己的Projectname,如Test,回车即可。

VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。

_为项目添加文件

为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:

glu32.lib、glaux.lib、opengl32.lib,这三个文件位于c:

\programfiles\MicrosoftVisualStudio\vc98\lib目录中。

选中菜单Project->AddToProject->Files项(或用鼠标右键),把这三个文件加入项目,在FileView中会有显示。

这三个文件请务必加入,否则编译时会出错。

或者将这三个文件名添加到Project->Setting->Link->Object/libraryModules即可。

点击工具条中NewTextFile按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。

#include

#include

#include

#include

//初始化OpenGL场景

voidmyinit(void)

{

glClearColor(0.0,0.0,0.0,0.0);//将背景置成黑色

glShadeModel(GL_FLAT);//设置明暗处理

}

//用户的绘图过程

voidCALLBACKdisplay(void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

//清除缓存

glBegin(GL_LINES);//开始画一根白线

glColor3f(1.0f,1.0f,1.0f);

//设置颜色为白色

//设置第一根线的两个端点,请注意:

OpenGL坐标系的原点是在屏幕左下角

glVertex2f(10.0f,50.0f);

glVertex2f(110.0f,50.0f);

glColor3f(1.0f,0.0f,0.0f);

//设置颜色为红色

//设置第二根线的两个端点

glVertex2f(110.0f,50.0f);

glVertex2f(110.0f,150.0f);

glEnd();//画线结束

glFlush();//绘图结束

}

//主过程:

//初始化Windows的窗口界面;并初始化OpenGL场景,绘图

intmain(intargc,char**argv)

{

auxInitDisplayMode(AUX_RGB);

//初始化显示模式,采用RGB彩色系统。

auxInitPosition(0,0,400,150);//初始化窗口位置、大小

auxInitWindow("DisplayLists");//初始化窗口,设置标题

myinit();

auxMainLoop(display);

//循环运行display过程,display由用户编写

return(0);

}

2).OpenGL基础库设置

•更改头文件(在视图类的头文件中引用gl\gl.hgl\glu.h)

•连接OpenGL库(工程——设置——General/UseMFCinaLibrary,Link/OpenGL32.libglu32.lib)

3).添加变量和函数

•添加变量并初始化

•CClientDC*MyDC;

•视图类的构造函数中MyDC=NULL;

•添加消息映射函数

•OnCreate()

•OnSize()

•OnDestroy()

4).在PreCreateWindow函数中将窗口的客户区设置为OpenGL能够支持的风格

cs.style=WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;

5).在OnCreate函数中

•定义像素存储格式

•PIXELFORMATDESCRIPTOR结构

•创建绘图上下文RC(RenderingContext)并使之当前化

•wglCreateContext()函数创建绘图上下文RC。

PIXELFORMATDESCRIPTORpfd=

{sizeof(PIXELFORMATDESCRIPTOR),//pfd的大小

1,//结构的版本号

PFD_DRAW_TO_WINDOW|//支持window

PFD_SUPPORT_OPENGL|//支持OpenGL

PFD_DOUBLEBUFFER,//双缓存

PFD_TYPE_RGBA,//RGBA颜色模式

24,//24位颜色深度缓存

0,0,0,0,0,0,//colorbitsignored

0,//noalphabuffer

0,//shiftbitignored

0,//不使用累积缓存

0,0,0,0,//accumbitsignored

32,//32位z缓冲

0,//不使用模板缓存

0,//noauxiliarybuffer

PFD_MAIN_PLANE,//选择主层面

0,//保留

0,0,0//layermasksignored

};

MyDC=newCClientDC(this);

//设置像素格式

intpixelFormat=ChoosePixelFormat(MyDC->GetSafeHdc(),&pfd);

SetPixelFormat(MyDC->GetSafeDC(),pixelFormat,&pfd);

m_hRC=wglCreateContext(MyDC->m_hDC);

wglMakeCurrent(MyDC->GetSafeHdc(),m_hRC);

6).在OnSize函数中设置视场和视口

If(cy>0)

{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glFrustum(-1.0,1.0,-1.0*cy/cx,1.0*cy/cx,5.0,9.0);

glViewport(0,0,cx,cy);

}

7).在OnDestroy函数:

在OnDestroy成员中需要释放OnCreate成员中RC所占用的资源

HGLRCm_hRC;

m_hRC=wglGetCurrentContext();

wglMakeCurrent(NULL,NULL);

wglDeleteContext(m_hRC);

MyDC->DeleteDC();

8)在OnEraseBKgnd中将原来的返回语句换成返回TRUE;

9).在OnDraw中根据当前的视点、视距、观看方向等参数,设置合适的OpenGL视景体属性,使用户能够看到预期的场景外观

glClearColor(1.0f,1.0f,0.0f,1.0f);//背景为黄色

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glTranslatef(0.0f,0.0f,-6.0f);

glBegin(GL_LINES);//OpenGL绘制直线命令

glColor3f(1.0,0.0,0.0);//设置当前颜色为红色

glVertex2f(0,0);

glVertex2f(1,1);

glColor3f(0.0,1.0,0.0);//设置当前颜色为绿色

glVertex2f(0.2f,0.0f);//

glVertex2f(1.2f,1.0f);

glEnd();

glFinish();

SwapBuffers(wglGetCurrentDC());

3、程序说明

每个函数的具体含义在程序注释中已作了叙述,不再多说。

OpenGL的函数在格式上很有特点,它以gl为前缀,并且函数名的最后一个字母指出所用的数据类型,如:

glColor3f(),字母f指明要使用浮点数。

字母前的数字指明参数个数或指明二维还是三维,如:

glVertex2f()是要设置二维的点。

OpenGL采用的是状态机的方式,用户设定一种状态,程序照此运行。

如:

glBegin(GL_LINES)设定画线状态(GL_LINES是OpenGL已定义好的常量),glColor3f()设定绘图所用颜色。

main()函数中的几个aux前缀函数是OpenGL提供的辅助库,用以初始化窗口,大家不必深究,我们关注的是display()函数,它是我们真正绘图的地方。

函数glColor3f()以RGB方式设置颜色,格式为:

glColor3f(red,green,blue),每种颜色值在(0.0,1.0)之间。

为了能显示更多的颜色,最好把系统设置成16位真彩色模式。

函数glVertex2f(x,y)设置二维顶点。

函数glBegin(UINTState)、glEnd()是最基本的作图函数,下面对它作一介绍。

如上所述,OpenGL是一个状态机,glBegin(UINTState)可以设定如下状态:

GL_POINTS画点

GL_LINES画线,每两个顶点(Vertex)为一组

GL_LINE_STRIP画线,把若干个顶点顺次连成折线

GL_LINE_LOOP画线,把若干个顶点顺次连成封闭折线

GL_TRIANGLES画三角形,每三个顶点为一组

GL_QUADS画四边形,每四个顶点为一组

GL_POLYGON画多边形

还有GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS_STRIP等等。

大家可以把每一种状态都试一试。

程序可以有多组glBegin()、glEnd()并列的形式,如:

......

glBeing(GL_LINES);

......

glEnd();

glBeing(GL_QUADS);

......

glEnd();

......

除了上述的基本图元外,函数glRectf(x1,y1,x2,y2)可以画一个矩形,但这个函数不能放在glBegin()和glEnd()之间,下面的两句程序是画一个蓝色的矩形。

glColor3f(0.0f,0.0f,1.0f);

glRectf(10.0f,10.0f,50.0f,50.0f);

实验1使用通用图形软件包设计简单的交互式图形

实验目的

巩固计算机图形学和C语言程序设计的相关知识,初步了解通用图形软件包,了解常见的图元的生成方法,学会图形显示设备的初始化及其交互式图形生成的过程,锻炼程序调试的技巧。

实验环境

计算机、TurboC或其他C语言程序设计环境

实验类型

学习型实验

实验学时

2学时,必做实验。

实验内容

1、计算机中安装和配置TurboC程序设计环境;

2、了解TurboC的通用图形软件包的内容;

3、练习简单图元的生成(如直线、圆、长方形等)。

实验步骤

1、装和配置TurboC程序设计环境;

2、了解TurboC的通用图形软件包的内容;

3、编写生成简单的图元的程序;

4、调试程序,运行程序并观看运行结果;

5、对运行结果进行分析。

分析与思考

1、为、什么已经调试好的程序在不同的目录下的TurboC程序设计环境中却不能运行?

2、如何使所生成的图元在屏幕中央显示?

 

实验2二维基本图元的生成

一、实验学时2学时

二、实验类型设计型实验

三、实验目的和要求

1、掌握二维基本图元直线段生成的DDA算法,中点算法;

2、掌握二维基本图元圆弧生成的中点算法;

3、掌握对线型线宽的属性的控制。

四、实验内容

1、编程实现DDA、中点算法生成直线

2、中点扫描转换生成圆、椭圆

五、实验步骤

1)在VC中新建项目

2)添加菜单及相应的菜单命令函数(画线、画圆)

3)编码实现(参考书中相关代码);

五、建立工程步骤

1.在visualc++.net中使用opnengl,建立项目的步骤:

2、在visualc++中的建立控制台项目的步骤:

实验三二维图元的填充

一、实验学时2学时

二、实验类型设计型实验

三、实验目的和要求

1、掌握二维图元填充的递归算法;

2、掌握二维图元填充的种子填充算法

四、实验内容

构造任意一个边界表示的多边形,假定该多边形内部是四连通的。

要求:

1、用递归算法实现对多边形内部的填充,要求内部颜色和边界不一致。

(参照教案进行)

2、用种子填充扫描线算法实现多边形内部的填充。

五、建立win32应用程序工程。

1.请在实验二中建立的项目基础上,添加填充的菜单项,建立相应的菜单命令寒暑,实现种子填充。

2.voidBoundaryFill4(HDC,int,int,COLORREF,COLORREF);

voidBoundaryFill4(HDChdc,intx,inty,COLORREFboundarycolor,COLORREFnewcolor)

{

COLORREFcolor;

color=GetPixel(hdc,x,y);

if((color!

=boundarycolor)&&(color!

=newcolor))

{

SetPixel(hdc,x,y,newcolor);

BoundaryFill4(hdc,x,y+1,boundarycolor,newcolor);

BoundaryFill4(hdc,x,y-1,boundarycolor,newcolor);

BoundaryFill4(hdc,x-1,y,boundarycolor,newcolor);

BoundaryFill4(hdc,x+1,y,boundarycolor,newcolor);

}

}

1、visualc++6.0下的界面

接下来,请按实验二中的方法给上面建立的空项目添加文件“recursion.cpp”,由于同学们初

次接触WIN32编程,所以对于下文中很多代码可暂时不要求理解,重点了解红色代码。

递归算法源码如下:

//INCLUDES///////////////////////////////////////////////

#defineWIN32_LEAN_AND_MEAN//justsaynotoMFC

#include//includeallthewindowsheaders

#include//includeusefulmacros

//DEFINES////////////////////////////////////////////////

//definesforwindows

#defineWINDOW_CLASS_NAME"WINCLASS1"

#defineWINDOW_WIDTH400

#defineWINDOW_HEIGHT300

//GLOBALS////////////////////////////////////////////////

HWNDmain_window_handle=NULL;//globallytrackmainwindow

HINSTANCEhinstance_app=NULL;//globallytrackhinstance

voidBoundaryFill4(HDC,int,int,COLORREF,COLORREF);

//FUNCTIONS//////////////////////////////////////////////

LRESULTCALLBACKWindowProc(HWNDhwnd,

UINTmessage,

WPARAMwParam,

LPARAMlParam)

{

//thisisthemainmessagehandlerofthesystem

HDChdc;//handletoadevicecontext

HPENhnewpen;

HPENholdpen;

//whatisthemessage

switch(message)

{

caseWM_RBUTTONDOWN:

hdc=GetDC(hwnd);

hnewpen=CreatePen(PS_SOLID,1,RGB(0,255,0));

holdpen=(HPEN)SelectObject(hdc,hnewpen);

//构造多边形

MoveToEx(hdc,30,40,NULL);

LineTo(hdc,60,40);

LineTo(hdc,90,100);

LineTo(hdc,60,150);

LineTo(hdc,30,150);

LineTo(hdc,30,40);

SelectObject(hdc,holdpen);

DeleteObject(hnewpen);

ReleaseDC(hwnd,hdc);

return(0);

break;

caseWM_LBUTTONDOWN:

hdc=GetDC(hwnd);

BoundaryFill4(hdc,LOWORD(lParam),HIWORD(lParam),RGB(0,255,0),RGB(255,0,0));

//releasethedc

ReleaseDC(hwnd,hdc);

return(0);

break;

caseWM_DESTROY:

{

//killtheapplication,thissendsaWM_QUITmessage

PostQuitMessage(0);

//returnsuccess

return(0);

}break;

default:

break;

}//endswitch

//processanymessagesthatwedidn'ttakecareof

return(DefWindowProc(hwnd,message,wParam,lParam));

}//endWinProc

//WINMAIN////////////////////////////////////////////////

intWINAPIWinMain(HINSTANCEhinstance,

HINSTANCEhprevinstance,

LPSTRlpcmdline,

intncmdshow)

{

WNDCLASSEXwinclass;//thiswillholdtheclasswecreate

HWNDhwnd;//genericwindowhandle

MSGmessage;//genericmessage

//firstfillinthewindowclassstucture

winclass.cbSize=sizeof(WNDCLASSEX);

winclass.style=CS_DBLCLKS|CS_OWNDC|

CS_HREDRAW|CS_VREDRAW;

winclass.lpfnWndProc=WindowProc;

winclass.cbClsExtra=0;

winclass.cbWndExtra=0;

winclass.hInstance=hinstance;

winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

winclass.hCursor=LoadCursor(NULL,IDC_ARROW);

winclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

winclass.lpszMenuName=NULL;

wincla

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2