




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字图像处理实验指导书3D游戏图形学实验指导书马文娟浙江理工大学二一二 年 九 月2课程实验指导一、实验总体方案1. 教学目标与基本要求1)掌握本书所介绍的图形算法的原理。2)掌握通过具体的平台实现图形算法的方法,培养学生使用现代图形系统API的能力。3)通过实验培养具有开发一个基本图形软件包的能力。2. 实验平台实验主要结合OpenGL设计程序,实现各种课堂教学中讲过的图形算法。程序设计语言主要以C/C+为主,开发平台是Visual C+。3. 实验步骤1)预习教材与实验指导的实验具体方案部分相关的算法理论及原理。2)仿照教材与实验指导提供的算法,利用VC+ OpenGL进行实验。3)调试、编译、运行程序,运行通过后,可考虑对程序进行修改或改进。二、实验预备知识OpenGL作为当前主流的图形API之一,在一些场合具有比DirectX更优越的特性。(1) 与C语言紧密结合OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL很容易理解和学习。(2) 强大的可移植性微软的Direct3D虽然也是十分优秀的图形API,但它只适用于Windows系统,而OpenGL不仅适用于Windows,还可以用于Unix/Linux等其他系统,它甚至在大型计算机、各种专业计算机上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。(3) 高性能的图形渲染OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。总之,OpenGL是一个非常优秀的图形软件接口。下面对Windows下的OpenGL编程进行简单介绍。以下几点是学习OpenGL前的准备工作。1. 选择一个编译环境现在Windows系统的主流编译环境有Visual C+, C+Builder,Dev-C+等,它们都支持OpenGL。 这里选择Visual C+作为学习OpenGL的实验环境。2. 安装OpenGL工具包1) 将OpenGL工具包dll文件夹中的*.dll文件放到操作系统目录下面的system32文件夹(其路径一般为:C:WindowsSystem32)。2) 打开VC,在VC中选择ToolsOptionsDirectories,然后在Show directories for中选择Include files,在下面添加OpenGL工具包中Include文件夹的路径,如下图所示:3) 类似地,在Show directories for中选择library files,在下面添加OpenGL工具包中lib文件夹的路径,然后按OK。如下图所示:3. 建立一个OpenGL工程打开VC后,在VC中选择FileNewProject,然后选择Win32 Console Application, 选择一个名字,然后按“OK”。在弹出的对话框中点An empty project,选择Finish。然后向该工程添加一个源文件,选择一个名字。三、实验报告要求(1) 有实验报告封面(2) 给出简要的设计思路(原理)。(3) 给出实现代码。(4) 给出实验结果的屏幕截图。(5) 实验的心得体会或建议。实验一 VC+6.0+OpenGL绘图环境及简单图形的输出实验项目性质:验证性实验所属课程名称:3D游戏图形学实验计划学时:2学时一 实验目的1、 熟练使用实验主要开发平台VC+6.0;2、 进一步熟悉OpenGL的主要功能;3、 掌握OpenGL的绘图流程和原理;4、 掌握OpenGL的基本数据类型、核心函数的使用。二 实验内容创建一个OpenGL工程,利用OpenGL库函数进行简单图形设计与绘制。三 实验原理1、 基本语法(C版本下的OpenGL语法)OpenGL基本函数均使用gl作为函数名的前缀,如glClearColor();实用函数则使用glu作为函数名的前缀,如gluSphere()。OpenGL基本常量的名字以GL_开头,如GL_LINE_LOOP;实用常量的名字以GLU_开头,如GLU_FILL。一些函数如glColor*()(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式,如glColor3b()、glColor3d()、glColor3f()和glColor3bv()等,这几个函数在功能上是相似的,只是适用于不同的数据类型和格式,其中3表示该函数带有三个参数,b、d、f分别表示参数的类型是字节型、双精度浮点型和单精度浮点型,v则表示这些参数是以向量形式出现的。OpenGL定义了一些特殊标识符,如GLfloat、GLvoid,它们其实就是C中的float和void。2、 程序的基本结构OpenGL程序的基本结构可分为三个部分:第一部分是初始化,主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验、裁剪等。这些状态一般都用函数glEnable()、glDisable()来设置,“”表示特定的状态。第二部分设置观察坐标系下的取景模式和取景框位置大小,主要利用了三个函数:函数void glViewport(left, top, right, bottom) 设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以像素表示);函数void glOrtho(left, right, bottom, top, near, far) 设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;函数void gluPerspective(fovy, aspect, zNear, zFar) 设置投影方式为透视投影,其取景体积是一个截头锥体。第三部分是OpenGL的主要部分,是使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等。3、 OpenGL状态机制OpenGL的工作方式是一种状态机制,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。例如,当前颜色就是一个状态变量,在这个状态改变之前,绘制的每个像素都将使用该颜色,直到当前颜色被设置为其他颜色为止。OpenGL中大量地使用了这种状态机制,如颜色模式、投影模式、单双显示缓存区的设置、背景色的设置、光源的位置和特性等。许多状态变量可以通过glEnabel()、glDisable()这两个函数来设置成有效或无效状态,如是否设置光照、是否进行深度测试等;在被设置成有效状态之后,绝大部分状态变量都有一个缺省值。四 实验代码如预备知识所述,安装OpenGL工具包,创建一个OpenGL工程,在源文件上输入代码:#include #include /初始化OpenGL场景void myinit (void) glClearColor (0.0, 0.0, 0.0, 0.0);/将背景置成黑色 glShadeModel (GL_FLAT);/设置明暗处理/用户的绘图过程void display(void) glClear (GL_COLOR_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场景,绘图int main(int argc, char* argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式glutInitWindowSize(400,300); /设置窗口的尺寸glutInitWindowPosition(100,120); /设置窗口的位置glutCreatWindow(“”); /创建一个名为“”的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数myinit(); /完成窗口初始化glutMainLoop(); /启动主GLUT事件处理循环 return(0);注:glShadeModel选择平坦或光滑渐变模式。GL_SMOOTH为缺省值,为光滑渐变模式,GL_FLAT为平坦渐变模式。该程序是在一个黑色的窗口中画两条线,分别用白色和红色绘制。首先,需要包含头文件#include ,这是GLUT的头文件。本来OpenGL程序一般还要包含和,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。然后是main函数,其使用GLUT库实现窗口管理。我们关注的是display()函数,它是我们真正绘图的地方。函数glColor3f()以RGB方式设置颜色,格式为:glColor3f(red, green, blue),每种颜色值在(0.0, 1.0)之间。函数glVertex2f(x, y)设置二维顶点。函数glBegin(UINT State)、glEnd()是最基本的作图函数,下面对它作一介绍。如上所述,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()、glEnd()并列的形式,如:. .glBegin(GL_LINES);.glEnd();glBegin(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);实验二 基本图形学算法实验实验项目性质:验证、设计性实验所属课程名称:3D游戏图形学实验计划学时:4学时一 实验目的1、 理解基本图形元素光栅的基本原理;2、 掌握直线和圆的多种生成算法;3、 掌握二维图元的种子填充算法和扫描填充算法。二 实验内容1、 编程实现DDA算法、中点算法和改进Bresenham算法生成直线;2、 编程实现简单方程算法和中点Bresenham算法生成圆;3、 选做:编程实现改进的Bresenham算法生成圆。三 实验原理各算法的原理参考教材第五章内容。下面介绍一下OpenGL画线的一些基础知识和glutReshapeFunc()函数。(1) 数学上的直线没有宽度,但OpenGL的直线则是有宽度的。同时,OpenGL的直线必须是有限长度,而不是像数学概念那样是无限的。可以认为,OpenGL的“直线”概念与数学上的“线段”接近,它可以由两个端点来确定。这里的线由一系列顶点顺次连接而成,有闭合和不闭合两种。(2) 首次打开窗口、移动窗口和改变窗口大小时,窗口系统都将发送一个事件,以通知程序员。如果使用的是GLUT,通知将自动完成,并调用向glutReshapeFunc()注册的函数。该函数必须完成下列工作:a 重新建立用作新渲染画布的矩形区域;b 定义绘制物体时使用的坐标系。如:void Reshape(int w, int h)glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h); 在GLUT内部,将给该函数传递两个参数:窗口被移动或修改大小后的宽度和高度,单位为像素。glViewport( )调整像素矩形,用于绘制整个窗口。接下来三个函数调整绘图坐标系,使左下角位置为(0,0),右上角为(w,h)。补充:生成圆的改进的Bresenham算法原理如下图所示,若Pi-1(xi-1,yi-1)为已经选定的点,那么下一个可能的像素点为其正右方的点Si或右下方的点Ti。若Si到圆弧的距离小于Ti到圆弧的距离,则取Si,反之取 Ti。Pi-1SiTixyO设R为圆弧的半径,记P(x,y)到原点的距离的平方与圆的半径的平方之差为D(P),即,判别式为:设Pi-1的坐标为(xi-1,yi-1),则Si和Ti的坐标分别为(xi,yi-1)和(xi,yi-1-1),Si+1和Ti+1点的坐标分别为(xi+1,yi)和(xi+1,yi-1),易知 当di0时,点Si作为下一个像素,则xi+1=xi+1, yi= yi-1,故当di0时,点Ti做为下一个像素点xi+1=xi+1, yi= yi-1-1,故 判别式初始值为 改进的Bresenham算法步骤为:1)输入圆的半径R。2)计算初始值d=3-2R、x=0、y=R。3)绘制点(x,y)及其在八分圆中的另外七个对称点。4)判断d的符号。若d0,则先将d更新为d+4x+6,再将(x,y)更新为(x+1,y);否则先将d更新为d+4(x-y)+10,再将(x,y)更新为(x+1,y-1)。5)当xy时,重复步骤3和4。否则结束。四 示范代码/DDA算法# includevoid LineDDA(int x0, int y0, int x1, int y1)int x, dy, dx, y;float m;dx=x1-x0;dy=y1-y0;m=dy/dx;y=y0;glColor3f(1.0f, 1.0f, 0.0f);glPointSize(1);for(x=x0;x=x1;x+)glBegin(GL_POINTS);glVertex2i(x,(int)(y+0.5);glEnd();y+=m;void myDisplay(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f,0.0f,0.0f);glRectf(25.0,25.0,75.0,75.0);glPointSize(5);glBegin(GL_POINTS);glColor3f(0.0f,1.0f,0.0f); glVertex2f(0.0f,0.0f);glEnd();LineDDA(0,0,200,300);glBegin(GL_LINES);glColor3f(1.0f,0.0f,0.0f); glVertex2f(100.0f,0.0f);glColor3f(0.0f,1.0f,0.0f); glVertex2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版科技园区廉洁从业自律合作协议
- 二零二五年大理石石材市场调研与分析服务协议
- 二零二五年度旅游服务标准化合同协议
- 2025版南通市区人才公寓租赁管理协议
- 2025版艺术品担保答辩状范本编制合同
- 2025至2030年中国抗菌肽生物兽药行业发展监测及市场发展潜力预测报告
- 二零二五版智能化设备租赁与操作培训合同
- 二零二五年度仓储物流场地租赁协议范本
- 二零二五年度专业二手车买卖及售后服务合作协议
- 二零二五年度土地储备使用权转让合同
- 2025至2030年中国酒店布草行业市场全景评估及投资前景展望报告
- 2025年应急管理普法知识竞赛历年参考题库含答案详解(5套)
- 2025年小学生爱粮节粮科普知识竞赛试题(含答案)
- 水池结构混凝土质量缺陷处理方案范文
- 2025驾驶员安全教育培训考试试卷(及答案)
- 人工智能替代效应研究-洞察及研究
- GB/T 33474-2025物联网参考体系结构
- 基建期奖励管理办法
- 2025年新安徽水利厅安全员c培训试题及答案
- 集邮协会管理办法
- 图解自然资源部《自然资源领域数据安全管理办法》
评论
0/150
提交评论