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

上传人:b****2 文档编号:618575 上传时间: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

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<

windows.h>

GL/gl.h>

GL/glu.h>

GL/glaux.h>

//初始化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,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,&

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);

//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);

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);

......

glBeing(GL_QUADS);

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

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

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

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

实验环境

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

学习型实验

2学时,必做实验。

实验内容

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

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

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

实验步骤

1、装和配置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++中的建立控制台项目的步骤:

实验三二维图元的填充

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

//includeallthewindowsheaders

windowsx.h>

//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);

break;

caseWM_LBUTTONDOWN:

hdc=GetDC(hwnd);

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

//releasethedc

caseWM_DESTROY:

//killtheapplication,thissendsaWM_QUITmessage

PostQuitMessage(0);

//returnsuccess

}break;

default:

}//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