ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:473.52KB ,
资源ID:9754807      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9754807.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学实验指导精.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机图形学实验指导精.docx

1、计算机图形学实验指导精计算机图形学实验指导书计算机科学与信息工程学院目录实验一OpenGL程序设计. 3实验二二维基本图元的生成 .7实验三二维图元的填充 13实验四二维图形的几何变换 .18实验五 裁剪. 23实验六自由曲线. 26实验七造型技术. 27实验八交互式技术. 32实验九真实感图形的绘制. 37计算机图形学实验指导 一、实验目的 1、培养学生动手编程解决实际问题的能力。 2、训练学生分析问题和调试程序的能力。 3、锻炼学生撰写科技实验论文的能力。二、实验要求 1、问题分析 充分地分析和理解问题本身,弄清要求做什么,用什么算法。 2、程序设计 (1)根据所采用的算法,设计数据结构,

2、画出流程图并编程。 (2)最后准备调试程序的数据及测试方案。 3、上机调试 (1)对程序进行编译,纠正程序中可能出现的语法错误。 (2)调试前,先运行一遍程序看看究竟将会发生什么。 (3)如果情况很糟,根据事先设计的测试方案并结合现场情况进行错误跟踪,包括单步调试、设置观察窗输出中间变量值等手段。 4、整理实习报告三、实验报告 1、实验内容:采用的算法名称 2、问题描述:包括目标、任务、条件约束描述等。 3、设计:数据结构设计和核心算法设计。主要功能模块的输入,处理(算法框架)和输出。 4、测试范例:测试结果的分析讨论,测试过程中遇到的主要问题及所采用的解决措施。 5、心得:包括程序的改进设想

3、,经验和体会。 6、程序清单:源程序,其中包括变量说明及详细的注释。实验一OpenGL程序设计一、 实验学时 2学时二、 实验类型 学习型实验三、 实验目的和要求初步了解OpenGL程序设计结构;了解OpenGL的基本数据类型、核心函数及辅助函数的使用。四、 实验内容1、综述这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C+,它对OpenGL提供了完备的支持。OpenGL提供了一系列的辅助函数,用于简化Windows操作系统的窗口操作,使我们能把注意力集中到图形编程上,这次试验的程序就采用这些辅助函数。2、在VC中新建项目 新建一个项目。 选择菜单F

4、ile中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。 为项目添加文件 为了使用OpenGL,我们需要在项目中加入三个相关的Lib文件:glu32.lib、glaux.lib、opengl32.lib,这三个文件位于c:program filesMicrosoft Visual Studiovc98lib目录中。选中菜单Project-Add To Project-Files项(或

5、用鼠标右键),把这三个文件加入项目,在FileView中会有显示。这三个文件请务必加入,否则编译时会出错。或者将这三个文件名添加到Project-Setting-Link-Object/library Modules 即可。点击工具条中New Text File按钮,新建一个文本文件,存盘为Test.c作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。#include #include #include #include /初始化OpenGL场景void myinit (void) glClearColor (0.0, 0.0, 0.0, 0.0); /将背景置成黑色 glShad

6、eModel (GL_FLAT); /设置明暗处理/用户的绘图过程void CALLBACK display(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

7、.0f); /设置颜色为红色 /设置第二根线的两个端点 glVertex2f(110.0f, 50.0f); glVertex2f(110.0f, 150.0f); glEnd(); /画线结束 glFlush (); /绘图结束/主过程:/ 初始化Windows的窗口界面/ 并初始化OpenGL场景,绘图int main(int argc, char* argv) auxInitDisplayMode (AUX_RGB); /初始化显示模式,采用RGB彩色系统。 auxInitPosition (0, 0, 400, 150); /初始化窗口位置、大小 auxInitWindow (Disp

8、lay Lists); /初始化窗口,设置标题 myinit (); auxMainLoop(display); /循环运行display过程,display由用户编写 return(0);3、程序说明 每个函数的具体含义在程序注释中已作了叙述,不再多说。OpenGL的函数在格式上很有特点,它以gl为前缀,并且函数名的最后一个字母指出所用的数据类型,如:glColor3f(),字母f指明要使用浮点数。字母前的数字指明参数个数或指明二维还是三维,如:glVertex2f()是要设置二维的点。OpenGL采用的是状态机的方式,用户设定一种状态,程序照此运行。如:glBegin(GL_LINES)设

9、定画线状态(GL_LINES是OpenGL已定义好的常量),glColor3f()设定绘图所用颜色。 main()函数中的几个aux前缀函数是OpenGL提供的辅助库,用以初始化窗口,大家不必深究,我们关注的是display()函数,它是我们真正绘图的地方。函数glColor3f()以RGB方式设置颜色,格式为:glColor3f(red, green, blue),每种颜色值在(0.0, 1.0)之间。为了能显示更多的颜色,最好把系统设置成16位真彩色模式。函数glVertex2f(x, y)设置二维顶点。函数glBegin(UINT State)、glEnd()是最基本的作图函数,下面对它

10、作一介绍。如上所述,OpenGL是一个状态机,glBegin(UINT State)可以设定如下状态: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()

11、、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);实验二二维基本图元的生成一、实验学时 2学时二、实验类型 设计型实验三、实验目的和要求1、掌握二维基本图元直线段生成的DDA算

12、法,中点算法;2、掌握二维基本图元圆弧生成的中点算法;3、掌握对线型线宽的属性的控制。四、实验内容 1、编程实现DDA、中点算法生成直线2、中点扫描转换生成圆、椭圆五、建立工程步骤1.在visual c+.net中使用opnengl,建立项目的步骤:2、在visual c+中的建立控制台项目的步骤:实验三二维图元的填充一、实验学时 2学时二、实验类型 设计型实验三、实验目的和要求1、掌握二维图元填充的递归算法;2、掌握二维图元填充的种子填充算法四、实验内容 构造任意一个边界表示的多边形,假定该多边形内部是四连通的。要求:1、用递归算法实现对多边形内部的填充,要求内部颜色和边界不一致。(参照教案

13、进行)2、用种子填充扫描线算法实现多边形内部的填充。五、建立win32应用程序工程。1、visual c+6.0下的界面接下来,请按实验二中的方法给上面建立的空项目添加文件“recursion.cpp”,由于同学们初次接触WIN32编程,所以对于下文中很多代码可暂时不要求理解,重点了解红色代码。递归算法源码如下:/ INCLUDES /#define WIN32_LEAN_AND_MEAN / just say no to MFC#include / include all the windows headers#include / include useful macros/ DEFINES

14、 / defines for windows #define WINDOW_CLASS_NAME WINCLASS1#define WINDOW_WIDTH 400#define WINDOW_HEIGHT 300/ GLOBALS /HWND main_window_handle = NULL; / globally track main windowHINSTANCE hinstance_app = NULL; / globally track hinstancevoid BoundaryFill4(HDC,int,int,COLORREF,COLORREF);/ FUNCTIONS /L

15、RESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)/ this is the main message handler of the systemHDC hdc; / handle to a device contextHPEN hnewpen;HPEN holdpen;/ what is the message switch(message) case WM_RBUTTONDOWN: hdc=GetDC(hwnd); hnewpen=CreatePen(PS_SOLID,1,RGB

16、(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; case WM_LBUTTONDOWN: hdc =

17、GetDC(hwnd); BoundaryFill4(hdc,LOWORD(lParam),HIWORD(lParam),RGB(0,255,0),RGB(255,0,0); / release the dc ReleaseDC(hwnd,hdc); return(0); break; case WM_DESTROY: / kill the application, this sends a WM_QUIT message PostQuitMessage(0); / return success return(0); break; default:break; / end switch/ pr

18、ocess any messages that we didnt take care of return (DefWindowProc(hwnd, message, wParam, lParam); / end WinProc/ WINMAIN /int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)WNDCLASSEX winclass; / this will hold the class we createHWND hwnd; / generic wi

19、ndow handleMSG message; / generic message/ first fill in the window class stucturewinclass.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;win

20、class.hIcon = LoadIcon(NULL, IDI_APPLICATION);winclass.hCursor = LoadCursor(NULL, IDC_ARROW); winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);winclass.lpszMenuName = NULL;winclass.lpszClassName = WINDOW_CLASS_NAME;winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);/ save hinstance in gl

21、obalhinstance_app = hinstance;/ register the window classif (!RegisterClassEx(&winclass) return(0);/ create the windowif (!(hwnd = CreateWindowEx(NULL, / extended style WINDOW_CLASS_NAME, / class Scanline Fill Demo, / title WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0,0, / initial x,y WINDOW_WIDTH, / initial

22、 width WINDOW_HEIGHT,/ initial height NULL, / handle to parent NULL, / handle to menu hinstance,/ instance of this application NULL) / extra creation parmsreturn(0);/ save main window handlemain_window_handle = hwnd;while(GetMessage(&message,NULL,0,0) / translate any accelerator keys TranslateMessag

23、e(&message); / send the message to the window proc DispatchMessage(&message); / end while/ return to Windows like thisreturn(message.wParam); / end WinMain/void BoundaryFill4(HDC hdc,int x,int y,COLORREF boundarycolor,COLORREF newcolor) COLORREF color; color=GetPixel(hdc,x,y); if(color != boundaryco

24、lor) & (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); 2、中建立Win32工程更改项目中recursion.cpp文件代码:1)声明函数void Boun

25、daryFill4(HDC,int,int,COLORREF,COLORREF);2)修改LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)函数中代码,把visualc+6.0介绍的recursion.cpp中的WndProc函数体复制即可。3)在recursion.cpp文件末尾添加BoundaryFill4函数。实验四二维图形的几何变换一、实验学时 2学时二、实验类型 设计型实验三、实验目的和要求1、掌握二维图形的基本几何变换,如平移、旋转、缩放、对称、错切变换;2、掌握OpenGL

26、中模型变换函数,实现简单的动画技术。四、实验内容 1、下面的代码采用GLUT库,实现了一个矩形在窗口中匀速转动(单击鼠标右键停止转动),请修改代码,实现矩形在窗口内沿着水平线匀速移动。/* * double.c * This is a simple double buffered program. * Pressing the left mouse button rotates the rectangle. * Pressing the right mouse button stops the rotation. */#include #include static GLfloat spin

27、= 0.0;void display(void) glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glRotatef(spin, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glRectf(-10.0, -10.0, 10.0, 10.0); glPopMatrix(); glutSwapBuffers();void spinDisplay(void) spin = spin + 2.0; if (spin 360.0) spin = spin - 360.0; glutPostRedisplay();void

28、 init(void) glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT);void reshape(int w, int h) glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();void mouse(int button, int state, int x, int y) switch

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1