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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机图形学实验报告记录.docx

1、计算机图形学实验报告记录计算机图形学实验报告记录 作者: 日期: 计算机图形学实验报告 姓名:_ _学号:_ _班级:_ _ 时间:_2016年12月_实验一 OpenGL编程与图形绘制1 实验目的了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本语法。学会配置OpenGL环境,并在该环境中编程绘图。2 实验内容OpenGL的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。OpenGL的绘制流程分为两个方面:一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第

2、四层为OpenGL,最上面的层为应用软件;OpenGL命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。OpenGL的基本语法中相关库有:OpenGL核心库:gl、OpenGL实用程序库: glu、OpenG编程辅助库:aux、OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut、Windows专用库:wgl。OpenGL的基本语法中命名规则为:OpenGL函数都遵循一个命名约定,即采用以下格式:。了解了上述基础知识后,配置好OpenGL环境,然后在该

3、环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。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); /设置投影参数void Display(void) glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口 glColor3f(1.0f,0.0f,0.0f);

4、/设置当前的绘图颜色为红 / glRectf(50.0f,100.0f,150.0f,50.0f); /绘制一个矩形 glPointSize(10); /三个点 glBegin(GL_POINTS); 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); glutInitDisplayMod

5、e(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式 glutInitWindowSize(400,300); /设置窗口的尺寸 glutInitWindowPosition(100,120); /设置窗口位置 glutCreateWindow(矩形); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口的显示回调函数 Initial(); /完成窗口初始化 glutMainLoop(); /完成窗口GLUT事件处理循环 return 0;运行结果:3.2直线的绘制:#includevoid Initial(void) glClea

6、rColor(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); /五角星 glV

7、ertex2i(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); /设置窗口的尺寸 glutInitWindowPositi

8、on(100,120); /设置窗口位置 glutCreateWindow(矩形); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口的显示回调函数 Initial(); /完成窗口初始化 glutMainLoop(); /完成窗口GLUT事件处理循环 return 0;运行结果:3.3多边形面的绘制:#includevoid Initial(void) glClearColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色 glMatrixMode(GL_PROJECTION); /指定设置投影参数 gluOrtho2D(0

9、.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); /等边三角形 glVertex2f(0.0,0.0); glVertex2f(15,25.95); glVertex2f(30,0); glEnd(); glFlush(); /清空OpenGL命令缓

10、冲区,执行OpenGL程序int main(int argc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式 glutInitWindowSize(400,300); /设置窗口的尺寸 glutInitWindowPosition(100,120); /设置窗口位置 glutCreateWindow(矩形); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口的显示回调函数 Initial(); /完成窗口初始化 glutMa

11、inLoop(); /完成窗口GLUT事件处理循环 return 0;运行结果:实验二 直线绘制实验1. 实验目的为了进一步熟悉OpenGL编程,了解基本图形生成算法中的直线绘制,学会直线绘制算法中最常用的三种算法:数值微分法、中点画线算法和Bresenham算法。2. 实验内容(一)数值微分法数值微分法直接从直线的微分方程生成直线。给定直线的两端点:P0(X0,Y0)和P1(X1,Y1),得到直线的微分方程dy/dx=y/x=(Y1-Y0)/(X1-X0)=k。数值微分算法的原理是,由于直线的一阶导数是连续的,而且x和y是成比例的,因此通过在当前位置(Xi,Yi)分别加上两个小增量x和y(为

12、无穷小的正数)来求下一点(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)。绘图过程如下:.输入直线的两端点P0(X0,Y0)和P1(X1,Y1)。.计算初始值x, y,d=x-2y,x=X0,y=Y0.绘制点(x,y)。判断d的符号,若d0,则(x,y)更新为(x+1,y+1),同样将e更新为e-2x;否则(x,y)更新为(x+1,y)。.当直线没有画完时,重复步骤和;否则结束。3. 实验代码及结果3.1数值微分算法编程绘制直线代码:

13、#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); /设置当前的绘图颜色为红色glBegin(GL_LINES); int x0=10;int y0=

14、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=abs(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

15、; glEnd(); glFlush(); /清空OpenGL命令缓冲区,执行OpenGL程序int main(int argc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式 glutInitWindowSize(400,300); /设置窗口的尺寸 glutInitWindowPosition(100,120); /设置窗口位置 glutCreateWindow(矩形); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口

16、的显示回调函数 Initial(); /完成窗口初始化 glutMainLoop(); /完成窗口GLUT事件处理循环 return 0;实验结果: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

17、); /用当前背景颜色填充窗口 glColor3f(1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色glBegin(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(x0x1) x=x1;x1=x0;x0=x; y=y1;y1=y0;y0=y; x=x0;y=y0; dx=x1-x0;dy=y1-y0; d=dx-2*dy; UpIncre=2*dx-2*dy; DownIncre=2*dy; while(x=x1) gl

18、Vertex2i(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); /设置窗口的尺寸 glutInitWindowPosition(100,120); /设置窗口位置 glutCreat

19、eWindow(矩形); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口的显示回调函数 Initial(); /完成窗口初始化 glutMainLoop(); /完成窗口GLUT事件处理循环 return 0;实验结果:2.3Bresenham算法编程绘制直线代码:#include #include void Initial(void) glClearColor(1.0f,1.0f,1.0f,1.0f); /设置窗口背景颜色为白色 glMatrixMode(GL_PROJECTION); /指定设置投影参数 gluOrtho2D(0.0,200.0

20、,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;int 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+; e=e-2*dx; glE

21、nd(); glFlush(); /清空OpenGL命令缓冲区,执行OpenGL程序int main(int argc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的现实模式 glutInitWindowSize(400,300); /设置窗口的尺寸 glutInitWindowPosition(100,200); /设置窗口的位置 glutCreateWindow(点); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口的显示函数

22、 Initial(); /完成窗口的初始化 glutMainLoop(); /启动主GLUT事件处理循环 return 0;实验结果:实验三 圆绘制实验1. 实验目的2. 实验内容(一) 八分法画圆圆心位于原点的圆有4条对称轴x=0,y=0,y=x,y=-x。若已知圆上任一点(x,y),可以得到其在圆周上关于四条对称轴的另外7个点(y,x),(-x,y),(-x,-y),(-y,-x),(y,-x),(x,-y)。(二) 中点Bresenham画圆算法算法步骤如下:输入圆的半径R计算初始值d=1-R,x=0,y=R。绘制点(x,y)及其在八分圆中的另外7个对称点。判断d的符号。若d0,则先将d

23、更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。当xy时,重复步骤和;否则结束。(三) 椭圆的中点Bresenham算法算法步骤如下:输入椭圆的长半轴a和短半轴b。计算初始值d=b2+a2(-b+0.25),x=0,y=b。绘制点(x,y)及其在四分象限上的另外三个对称点。判断d的符号。若d=0,则先将d更新为d+b2(2x+3),再将(x,y)更新为(x+1,y);否则先将d更新为d+b2(2x+3)+a2(-2y+2),再将(x,y)更新为(x+1,y-1)。当b2(x+1)a2(y-0.5)时,重复步骤

24、和;否则转到步骤。用上半部分计算的最后点(x,y)来计算下半部分中d的初值d=b2(x+0.5)2+a2(y-1)2-a2b2绘制点(x,y)及其在四分象限上的另外三个对称点。判断d的符号。若d=0时,重复步骤和;否则结束。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); /设置投影参数voi

25、d CirclePoint(int x,int y,int color) glVertex2i(x+50,y+50); glVertex2i(y+50,x+50); glVertex2i(-y+50,x+50); glVertex2i(-x+50,y+50); glVertex2i(-x+50,-y+50); glVertex2i(-y+50,-x+50); glVertex2i(y+50,-x+50); glVertex2i(x+50,-y+50);void Display(void) glClear(GL_COLOR_BUFFER_BIT); /用当前背景颜色填充窗口 glColor3f(

26、1.0f,0.0f,0.0f); /设置当前的绘图颜色为红色 glPointSize(10); glBegin(GL_POINTS); CirclePoint(10,20,20); glEnd(); glFlush(); /清空OpenGL命令缓冲区,执行OpenGL程序int main(int argc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /初始化窗口的显示模式 glutInitWindowSize(400,300); /设置窗口的尺寸 glutInitWindowPositi

27、on(100,120); /设置窗口位置 glutCreateWindow(矩形); /创建一个名为矩形的窗口 glutDisplayFunc(Display); /设置当前窗口的显示回调函数 Initial(); /完成窗口初始化 glutMainLoop(); /完成窗口GLUT事件处理循环 return 0;实验结果:3.2中点Bresenham 算法绘制圆代码#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 CirclePoint(int x,int y,int color) glVertex2i(x+50,y+50); glVertex2i(y+50,x+50); glVertex2i(-y+50,x+50); glVertex2i(-x+50,

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

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