2022年2022年-计算机图形学实验报告 .pdf





《2022年2022年-计算机图形学实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年-计算机图形学实验报告 .pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机图形学实验报告姓名:_ _ 学号:_ _ 班级:_ _ 时间:_2016年 12 月_ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 34 页 - - - - - - - - - 实验一OpenGL 编程与图形绘制1实验目的了解OpenGL 编程,并熟悉OpenGL 的主要功能、绘制流程和基本语法。学会配置OpenGL 环境,并在该环境中编程绘图。2实验内容OpenGL 的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实
2、时动画和交互技术。OpenGL 的绘制流程分为两个方面:一个完整的窗口系统的OpenGL 图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件;OpenGL 命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、 顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。OpenGL 的基本语法中相关库有:OpenGL 核心库:gl、 OpenGL 实用程序库:glu、 OpenG编程辅助库: aux、OpenGL 实用程序工具包 (OpenGL utility toolkit,GLUT
3、) :glut、Windows专用库: wgl。OpenGL 的基本语法中命名规则为:OpenGL 函数都遵循一个命名约定,即采用以下格式: 。了解了上述基础知识后,配置好OpenGL 环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。3实验代码及结果3.1 点的绘制:#includevoid Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); /指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);
4、 /设置投影参数void Display(void)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 34 页 - - - - - - - - - glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口glColor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红/ glRectf(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形glPointSize(10); /三个点glBegin(GL_POINTS)
5、;glColor3f(1.0f,0.0f,0.0f);glVertex2i(2,148);glVertex2i(100,75);glVertex2i(198,2);glEnd();glFlush(); /清空 OpenGL 命令缓冲区,执行OpenGL 程序int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式glutInitWindowSize(400,300); /设置窗口的尺寸glutInitWindowPosition(100,120)
6、; /设置窗口位置glutCreateWindow( 矩形 ); /创建一个名为矩形的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数Initial(); /完成窗口初始化glutMainLoop(); /完成窗口GLUT 事件处理循环return 0;运行结果:3.2 直线的绘制:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 34 页 - - - - - - - - - #includevoid Initial(void)glCle
7、arColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); /指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0); /设置投影参数void Display(void)glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口glColor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色/ glRectf(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形glBegin(GL_LINE_LOOP); /五角星glVertex
8、2i(10,10);glVertex2i(30,35);glVertex2i(50,10);glVertex2i(5,25);glVertex2i(55,25);glEnd();glFlush(); /清空 OpenGL 命令缓冲区,执行OpenGL 程序int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式glutInitWindowSize(400,300); /设置窗口的尺寸glutInitWindowPosition(100,120);
9、 /设置窗口位置glutCreateWindow( 矩形 ); /创建一个名为矩形的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数Initial(); /完成窗口初始化glutMainLoop(); /完成窗口 GLUT 事件处理循环return 0;运行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 34 页 - - - - - - - - - 3.3 多边形面的绘制:#includevoid Initial(void)glC
10、learColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); /指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0); /设置投影参数void Display(void)glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口glColor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色/ glRectf(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形glBegin(GL_TRIANGLES); /等边三角形glVe
11、rtex2f(0.0,0.0);glVertex2f(15,25.95);glVertex2f(30,0);glEnd();glFlush(); /清空 OpenGL 命令缓冲区,执行OpenGL 程序int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式glutInitWindowSize(400,300); /设置窗口的尺寸glutInitWindowPosition(100,120); /设置窗口位置名师资料总结 - - -精品资料欢迎下
12、载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 34 页 - - - - - - - - - glutCreateWindow( 矩形 ); /创建一个名为矩形的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数Initial(); /完成窗口初始化glutMainLoop(); /完成窗口GLUT 事件处理循环return 0;运行结果:实验二直线绘制实验1. 实验目的为了进一步熟悉OpenGL 编程,了解基本图形生成算法中的直线绘制,学会直线绘制算法中最常用的三种算法:数
13、值微分法、中点画线算法和Bresenham 算法。2. 实验内容(一)数值微分法数值微分法直接从直线的微分方程生成直线。给定直线的两端点:P0(X0,Y0) 和P1(X1,Y1) ,得到直线的微分方程dy/dx=y/x=(Y1-Y0)/(X1-X0)=k。数值微分算法的原理是,由于直线的一阶导数是连续的,而且x 和 y 是成比例的,因此通过在当前位置(Xi ,Yi )分别加上两个小增量x 和 y( 为无穷小的正数) 来名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 34
14、页 - - - - - - - - - 求下一点( X(i+1),Y(i+1))的 x,y 坐标。(二)中点画线算法给定直线的两端点:P0(X0,Y0) 和 P1(X1,Y1) ,可得到直线方程F(x,y)=y -kx-b=0 且 k=y/x=(Y1-Y0)/(X1-X0)。绘图过程如下:1.输入直线的两端点P0(X0,Y0) 和 P1(X1,Y1) 。2.计算初始值x, y,d= x-2 y,x=X0,y=Y0. 3. 绘制点 (x,y)。判断 d 的符号, 若 d0, 则(x,y)更新为 (x+1,y+1),同样将 e 更新为e-2 x;否则 (x,y)更新为 (x+1,y)。5.当直线没
15、有画完时,重复步骤3和4;否则结束。3. 实验代码及结果3.1 数值微分算法编程绘制直线代码:#include#includevoid Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); /指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0); /设置投影参数void Display(void)glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口名师资料总结 - - -精品资料欢迎下载 - - - - - - -
16、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 34 页 - - - - - - - - - glColor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色glBegin(GL_LINES);int x0=10;int y0=20;int x1=30;int y1=40;int color=10;int dx,dy,epsl,k;float x,y,xIncre,yIncre;dx=x1 -x0;dy=y1 -y0;x=x0;y=y0; /if(abs(dx)abs(dy)epsl=abs(dx);else epsl=a
17、bs(dy);xIncre=(float)dx/(float)epsl;yIncre=(float)dy/(float)epsl;for(k=0;k=epsl;k+)glVertex2i(int(x+0.5),(int)(y+0.5);x+=xIncre;y+=yIncre;glEnd();glFlush(); /清空 OpenGL 命令缓冲区,执行OpenGL 程序int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式glutInitWind
18、owSize(400,300); /设置窗口的尺寸glutInitWindowPosition(100,120); /设置窗口位置glutCreateWindow( 矩形 ); /创建一个名为矩形的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数Initial(); /完成窗口初始化glutMainLoop(); /完成窗口 GLUT 事件处理循环return 0;实验结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 34 页 -
19、- - - - - - - - 2.2 中点画线算法编程绘制直线代码:#include#includevoid Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); /指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0); /设置投影参数void Display(void)glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口glColor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色glBegi
20、n(GL_POINTS);int x0=50;int y0=20;int x1=100;int y1=120;int color=10;int dx,dy,d,UpIncre,DownIncre,x,y;if(x0 x1)x=x1;x1=x0;x0=x;y=y1;y1=y0;y0=y;x=x0;y=y0;dx=x1 -x0;dy=y1 -y0;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 34 页 - - - - - - - - - d=dx -2*dy;UpIncre
21、=2*dx -2*dy; DownIncre=2*dy;while(x=x1)glVertex2i(x,y);x+;if(d0)y+;d+=UpIncre;else d+=DownIncre;glEnd();glFlush(); /清空 OpenGL 命令缓冲区,执行OpenGL 程序int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式glutInitWindowSize(400,300); /设置窗口的尺寸glutInitWindowPos
22、ition(100,120); /设置窗口位置glutCreateWindow( 矩形 ); /创建一个名为矩形的窗口glutDisplayFunc(Display); /设置当前窗口的显示回调函数Initial(); /完成窗口初始化glutMainLoop(); /完成窗口 GLUT 事件处理循环return 0;实验结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 34 页 - - - - - - - - - 2.3Bresenham 算法编程绘制直线代码:#
23、include #include void Initial(void)glClearColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION);/指定设置投影参数gluOrtho2D(0.0,200.0,0.0,150.0);/设置投影参数void Display(void)glClear(GL_COLOR_BUFFER_BIT);/用当前背景色填充窗口glColor3f(1.0f,0.0f,0.0f);/设置当前的绘图颜色为红色/Bresenham 算法glBegin(GL_POINTS);int x0 = 10;i
24、nt y0 = 20;int x1 = 90;int y1 = 90;int color=10;int x,y,dx,dy,e;dx = x1-x0;dy = y1 -y0;e=-dx;x=x0;y=y0;while(x0)y+;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 34 页 - - - - - - - - - e=e-2*dx;glEnd();glFlush();/清空 OpenGL 命令缓冲区,执行OpenGL 程序int main(int argc,ch
25、ar*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);/初始化窗口的现实模式glutInitWindowSize(400,300);/设置窗口的尺寸glutInitWindowPosition(100,200);/设置窗口的位置glutCreateWindow( 点);/创建一个名为矩形的窗口glutDisplayFunc(Display);/设置当前窗口的显示函数Initial();/完成窗口的初始化glutMainLoop();/启动主 GLUT 事件处理循环return 0;实验结果:名师资料总结 -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年-计算机图形学实验报告 2022 计算机 图形学 实验 报告

限制150内