您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > opengl学习指导实验 计算机图形学上机
计算机图形学实验指导书计算机科学与信息工程学院1目录实验一OpenGL程序设计…………………………………………..3实验二二维基本图元的生成……………………………………….7实验三二维图元的填充……………………………………………13实验四二维图形的几何变换……………………….…………..….18实验五裁剪…………………………………………………………..23实验六自由曲线…………………………………………………..26实验七造型技术…………………………………………………..27实验八交互式技术………………………………………………..32实验九真实感图形的绘制………………………………………..372计算机图形学实验指导一、实验目的1、培养学生动手编程解决实际问题的能力。、训练学生分析问题和调试程序的能力。、锻炼学生撰写科技实验论文的能力。二、实验要求、问题分析充分地分析和理解问题本身,弄清要求做什么,用什么算法。、程序设计根据所采用的算法,设计数据结构,画出流程图并编程。最后准备调试程序的数据及测试方案。、上机调试(1)对程序进行编译,纠正程序中可能出现的语法错误。调试前,先运行一遍程序看看究竟将会发生什么。如果情况很糟,根据事先设计的测试方案并结合现场情况进行错误跟踪,包括单步调试、设置观察窗输出中间变量值等手段。、整理实习报告三、实验报告、实验内容:采用的算法名称、问题描述:包括目标、任务、条件约束描述等。、设计:数据结构设计和核心算法设计。主要功能模块的输入,处理(算法框架)和输出。、测试范例:测试结果的分析讨论,测试过程中遇到的主要问题及所采用的解决措施。、心得:包括程序的改进设想,经验和体会。、程序清单:源程序,其中包括变量说明及详细的注释。3实验一OpenGL程序设计一、实验学时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作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。#includewindows.h#includeGL/gl.h#includeGL/glu.h#includeGL/glaux.h//初始化OpenGL场景voidmyinit(void){glClearColor(0.0,0.0,0.0,0.0);//将背景置成黑色glShadeModel(GL_FLAT);//设置明暗处理}4//用户的绘图过程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);//初始化窗口位置、大小5auxInitWindow(DisplayLists);//初始化窗口,设置标题myinit();auxMainLoop(display);//循环运行display过程,display由用户编写return(0);}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);6......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);7实验二二维基本图元的生成一、实验学时2学时二、实验类型设计型实验三、实验目的和要求1、掌握二维基本图元直线段生成的DDA算法,中点算法;2、掌握二维基本图元圆弧生成的中点算法;3、掌握对线型线宽的属性的控制。四、实验内容1、编程实现DDA、中点算法生成直线2、中点扫描转换生成圆、椭圆五、建立工程步骤1、新建一个项目。选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32ConsoleApplication项,然后填入你自己的Projectname,如Test,回车即可。VC为你创建一个工作区(WorkSpace),你的项目Test就放在这个工作区里。2、为项目添加文件为了使用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作为你的源程序文件,再把它加入到项目中,然后就可以开始编程了。增量法画直线voidCALLBACKdda(void){intx1=10;intx2=400;inty1=10;inty2=500;intk,i;floatx,y,dx,dy;k=abs(x2-x1);if(abs(y2-y1)k)k=abs(y2-y1);dx=(float)(x2-x1)/k;dy=(float)(y2-y1)/k;x=(float)x1;y=(float)y1;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除缓存glBegin(GL_LINES);//开始画一根白线glColor3f(1.0f,1.0f,1.0f);//设置颜色为白色//设置第一根线的两个端点,请注意:OpenGL坐标系的原点是在屏幕左下角for(i=0;ik;i++)8{glVertex2f((int)(x),(int)(y));glVertex2f((int)(x+dx),(int)(y+0.5+dy));//g.drawLine((int)(x+.5f),(int)(y+.5f),(int)(x+.5f),(int)(y+.5f));x=x+dx;y=y+dy;glColor3f(1.0f,1.0f,1.0f);}glEnd();//画线结束glFlush();//绘图结束}//中点法画直线//voidCALLBACKbresenham(Graphicsg,intxs,intys,intxe,intye)voidCALLBACKbresenham(void){intxs=10;intxe=400;intys=10;intye=500;inti;intdx=xe-xs;intdy=ye-ys;inte=2*dy-dx;intx=xs;inty=ys;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除缓存glBegin(GL_LINES);//开始画一根白线glColor3f(1.0f,1.0f,1.0f);for(i=0;idx;i++){glVertex2f((int)(x),(int)(y));if(e=0){y=y+1;e=e-2*dx;}x=x+1;e=e+2*dy;glVertex2f((int)(x),(int)(y));//画点(x,y)glColor3f(1.0f,1.0f,1.0f);}glEnd();//画线结束glF
本文标题:opengl学习指导实验 计算机图形学上机
链接地址:https://www.777doc.com/doc-5155702 .html