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





《2023年计算机图形学实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年计算机图形学实验报告.pdf(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机图形学实验报告姓名:_ _ _ _ _ _ _ _学号:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _班级:时间:2023年12月实验一 OpenGL编程与图形绘制1.实验目的了解O penG L编程,并熟悉Op e nG L 的重要功能、绘制流程和基本语法。学会配置OpenGL环境,并在该环境中编程绘图。2.实验内容0 p enG L的重要功能:模型绘制、模型观测、颜色模式、光照应用、图像效果增强、位图和图像解决、纹理映射、实时动画和交互技术。0 p e nG L的绘制流程分为两个方面:一个完整的窗口系统的Open
2、GL图形解决系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为Op e n G L,最上面的层为应用软件;O penG L命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。0 penGL的基本语法中相关库有:Ope nG L 核心库:g k O p e nG L 实用程序库:glu、OpenG 编程辅助库:aux、OpenGL实用程序工具包(OpenG Lu t ilitytool k it,G LUT):glut,Wind ow s 专用库:wg 1 OpenG L
3、 的基本语法中命名规则为:0p enG L 函数都遵循一个命名约定,即采用以下格式:库前缀 根命令可选的参数个数 可选的参数类型。了解了上述基础知识后,配置好O penG L环境,然后在该环境中编程练习图形的绘制,本次实验重要是对点的绘制、直线的绘制和多边形面的绘制。3.实验代码及结果3.1 点的绘制:#includ e g 1/glu t.hv oi d Init i a 1 (v o i d)g 1 Cie a rColor(l.Of,1 .Of,1 .O f,l.Of):/设立窗口背景颜色为白色glMatrixMode(GL_PROJECTION);/指定设立投影参数gl u Orth
4、o 2D(0.0,20 0.0,0.0,1 5 0.0);/设立投影参数)void D i splay(v o id)(glCle a r(GL_COLOR_BU F FE R_BIT);用当前背景颜色填充窗 口glCo 1 or3f(l.0 f,O.Of,O.Of);设立当前的绘图颜色为红/g 1 Rec t f(50.0f,1 OO.Of,1 5 0.Of,5 0.0 f);绘制一个矩形glPo i ntSize(10);三个点glBegin(GL_P O I N T S);g 1 C olor3 f(l.Of,0.Of,0.Of);gl V ertex 2 i(2,148);glVert
5、ex2i(100,75);glVert e x 2i(1 98,2);glEn d();glF us h();清空。p e n G L 命令缓冲区,执行Op e nG L 程序)in t ma i n(i nt arg c,cha r*arg v 口)(g 1 utln i t(&a r g c,argv);g 1 u t InitD i splayMode(GLUT_SINGLE|G LUT_RGB);初始化窗口的显示模式g lutlnitWindowS i ze(4 00,30 0);设立窗口 的尺寸gl u 11 n i t W indowPo s ition(100,1 2 0);/设
6、立窗口位置glutC rea t eWi n do w(矩形);/创建一个名为矩形的窗口glu t Disp 1 ayFun c(D is p 1 a y);调函数I nit i al();glutMa i nLoo p();环return 0;)设立当前窗口的显示回/完毕窗口初始化/完毕窗口G L U T事件解决循运营结果:3.2 直线的绘制:#inclu d evo i d Initial(vo i d)g 1 Cie a rColo r(1.0f,1.0f,1.0 f,1.0 f);/设立窗口背景颜色为白色glMat r ixM o d e(GL_PROJE C T 1 ON);/指定设
7、立投影参数g 1 uOrtho2D(0.0,2 0 0.0,0.0,15 0.0);设立投影参数v o id Disp 1 a y(vo i d)g 1 Clear(GL_COLOR_BUFFE R BIT);/用当前背景颜色填充窗口glColor 3 f(1.0 f,0.0 f,0.Of);/设立当前的绘图颜色为红色/glRectf(5 0.Of,1 0 0.0f,150.0f,50.0 f);/绘制一个矩形glBegi n(GL_LINE_LOOP);/五角星gl V ertex 2 i(1 0,1 0);g 1 Ve r t e x 2 i(3 0,3 5);g 1 Verte x 2i
8、(50,l 0);g 1 Vertex2i(5,25);gl V e rtex2i(55,25);g End();glFlus h();/清空0 penGL命令缓冲区,执行Ope nG L程序int main(i n t arg c,c h a r*ar g v)glutlnit(&argc,argv);glutl n itDi s playMode(G LUT_SINGLE I G LUT RGB);初始化窗口的显示模式glut I n i tWindowSiz e(400,30 0);/设立窗口的尺寸g 1 u tlnitWind o wPo s i t i o n(100,1 2 0);
9、/设立窗口位置g 1 u t C r ea t eWi n dow(矩形 0);创建一个名为矩形的窗glutD i sp 1 a yF u nc(Display);设立当前窗口的显示回调函数Init i a 1 ();g 1 u tMain Loop();决循环retur n 0;完毕窗口初始化/完毕窗口 G LU T事件解运营结果:矩形 目 回 区 3.3 多边形面的绘制:#in c 1 u d e v oid I n i ti a 1 (vo i d)glCle arColor(l.0 1.0f,1.0f);设立窗口背景颜色为白色glMa t r ixM o de(G L _ P ROJ
10、E CTION);/指定设立投影参数g 1 uOrtho2D(0.0,2 0 0.0,0.0,150.0);设立投影参数void D i s pla y(v o id)(glC 1 e ar(GL_COLOR_BUFFER_BIT);用当前背景颜色填充窗口/设立当前的绘图颜色为红色/绘制一个矩形g 1 Color3f(l.0 f,0.Of,O.Of);/g 1 Rec t f(50.Of,100.0f,150.0 f,50.0 f);glBe g in (GL_TRIANGLES);/等边三角形gl V e rt e x2f(0.0,0.0);g 1 V e rte x 2f(l 5,25.9
11、 5);glV e rtex 2 f(30,0);glE n d();g 1 Flush();OpenGL程序)i n t main(i n t argc,c har*argv)/清 空 Op e n G L 命令缓冲区,执行g 1 ut I n i t(&a r g c,a r g v);g 1 utlnit D i sp 1 ayMode(GLUT_S INGLE|G LU T RGB);式g lutInitWindowSize(400,3 0 0);gl u tl n i t W i n dowPo s it i o n(100,120);g 1 u tC r eat e Wind o
12、w(矩形);glutDis p 1 a yFunc(D i spl a y);调函数I nit i al();g lutMainLoop();初始化窗口的显示模/设立窗口的尺寸设立窗口位置创建一个名为矩形的窗口/设立当前窗口的显示回/完毕窗口初始化/完毕窗口 GLUT事件解决循环r e turn 0;运营结果:实验二直线绘制实验1.实验目的为了进一步熟悉OpenGL编程,了解基本图形生成算法中的直线绘制,学会直线绘制算法中最常用的三种算法:数值微分法、中点画线算法和Brcsenh a m 算法。2.实验内容(-)数值微分法数值微分法直接从直线的微分方程生成直线。给定直线的两端点:PO(XO,Y
13、 0)和 P1 (X1,Y1),得到直线的微分方程 dy/dx=Z y/Z x=(Yl-YO)/(Xl-XO)=k数值微分算法的原理是,由于直线的一阶导数是连续的,并 且 和 是 成 比 例 的,因此通过在当前位置(x i,Y i)分别加上两个小增量 *和 e y (为无穷小的正数)来求下一点(X(i+1),Y (i+D)的 x,y坐标。(-)中点画线算法给定直线的两端点:PO(XO,Y O)和 Pl(XI,Y 1 ),可得到直线方程F(x,y)=y-kx-b=(k=Z y A x=(Y 1 -Y 0 )/(X1-XO)绘图过程如下:错误!未定义书签。.输入直线的两端点PO(XO,Y O)和
14、Pl(X 1 ,Y l)o错误!.计算初始值*,A y,d=A x2 A y,x=XO,y=Y 0 .错误!未定义书签。.绘制点(x,y)。判断d的符号,若 d 0,则(x,y)更新为(x+1,y+1 ),同样将e更新为e-2 Z x;否 则(x,y)更新为(x+1 ,y)错误!.当直线没有画完时,反复环节错误!未定义书签。和错误!;否则结束。3.实验代码及结果3.1 数值微分算法编程绘制直线代码:#i n clu d e#i n c 1 u d e void I n i t ial(void)glClearColor(1.0f,1.0f,1.0f,l.O f);/设立窗口背景颜色为白色glM
15、atri x Mod e(GL_ P ROJE C TION);/指定设立投影参数gluOrtho2D(0.0,2 0 0.0,0.0,1 5 0.0);设立投影参数)void Di s p lay(void)(glC 1 e ar(GL_COLO R BUFFE R BIT);/用当前背景颜色填充窗口glColor3f(1.0f,0.0 f,0.0f);/设立当前的绘图颜色为红色g 1 B egi n(GL_L IN ES);in t x 0=1 0;i n t y0=2 0;in t xl=30;in t yl=40;int co 1 o r=10;i n t d x,d y,epsl,k
16、;f loat x,y,xlnc r e,y I n ere;d x=x l-x O;dy=y 1-yO;x=x 0;y=y 0;/if(ab s(dx)abs(dy)。e psl=abs(dx);e 1 se epsl=a bs(dy);xl n cre=(float)dx/(float)eps 1 ;y I ncre=(f 1 o a t)d y/(fl o a t)e psi;fb r(k=0;k=e p s 1 ;k+)g 1 V er t e x 2 i(i nt(x+0.5),(int)(y+0.5);x+=xlncre;oy+=y I n c r e;)g 1 End();glF
17、l u s h();/清 空 OpenGL命令缓冲区,执行OpenGL程序)i n t ma i n(i n t argc,char*a rgv)g 1 u tlnit(&argc,a r gv);g lutlni t Disp 1 ayMode(GLUT_SINGLE I GLUT RGB);/初始化窗口的显示模式glut I nitW i n dowS i z e(400,3 0 0);g 1 utl n itWindo w P o s it i on(1 00,120);gl u t CreateWi n dow(矩形);gl u tDisplay F u n c(Disp 1 a y)
18、;数I n i tial();glutMa i nL o op();循环r e turn 0;设立窗口的尺寸/设立窗口位置创建一个名为矩形的窗口/设立当前窗口的显示回调函完毕窗口初始化完毕窗口 GLUT事件解决实验结果:2.2中点画线算法编程绘制直线代码:#in c 1 ud e#in c 1 ud e windows.hv o i d Ini t ial(v o id)glC 1 earColo r(1.0 f,1.0 f,1.Of,1.0 f);设立窗口背景颜色为白色glMatr i xM ode(G L _P ROJECTION);/指定设立投影参数gluOrtho2D(0.0,200.
19、0,0.0,1 5 0.0);/设立投影参数void Display(void)(glC 1 ear(GL COLO R_BU FFER_BIT);/用当前背景颜色填充窗口g 1 Colo r3 f(1.0 f,0.Of,O.Of);/设立当前的绘图颜色为红色glBegin(GL_PO I NTS);intxO=5O;i n t yO=20;i n t xl=1 00;i nty 1 =1 2 0;i n t color=10;int d x,dy,d,UpIncre,D o wnlncre,x,y;i f(xOxl)(x=x l;xl=x 0;x 0=x;y=y l;yl=y 0;y0=y;
20、)x=x 0;y=y 0;dx=xl-x0;d y=yl-y 0:d=d x-2*dy;U piner e=2*d x-2*dy;D o wnlncre=2*dy;wh i 1 e(x=x 1)gl V ertex2i(x,y);x+;。if(d0)(y+;d+=Up In c r e;els e d+=DownIncre;glE n d();glFlu s h();/清 空 O p e n G L 命令缓冲区,执 行 OpcnGL 程序int ma i n(i nt ar g c,c h a r*argv)glutlnit(&ar g c,argv);g lutlnitDis p 1 a y
21、Mod e(GLUT_SINGLE|GLUT_RGB);式gl u tlnitWin d ow S ize(400,300);g 1 utl n i t W i ndo w Posi t io n(100,120);glut C r e a t eW i ndow(矩形);g l u t DisplayFun c(D isplay);数I n itia 1 ();gl u t MainLoop();解决循环re t um 0;/初始化窗口的显示模/设立窗口的尺寸设立窗口位置/创建一个名为矩形的窗口设立当前窗口的显示回调函完毕窗口初始化/完毕窗口 GLUT事件实验结果:矩形目回冈2.3 Bres
22、 e nh a m 算法编程绘制直线代码:#include#i n c I u de v o i d I n itial(v o id)glClea r Color(1.Of,1.Of,1.Of,1.O f);设立窗口背景颜色为白色ogIM a tr i xMo de(GL_PROJ ECT I ON);。/指定设立投影参数og 1 uO rtho2D (0.0,200.0,0.0,150.0);设立投影参数)v o id Dis p 1 ay(voi d)gl C lear(GL_CO L OR_BU F FER_BIT);。/用当前背景色填充窗口og 1 C olor 3 f(1.0 f,
23、0.0 f,0.O f);。/设立当前的绘图颜色为红色/Bresenh a m 算法glBegin(GL_POINTS);o i n t xO=1 0;i n t yO=2 0;i n t xl=9 0;in t yl=9 0;in t c o lor=l 0;int x,y,d x,dy,e;fid x=x 1-xO;d y=y 1 y 0;e=d x;x=x 0;y=y 0;owh i 1 e(x 0)。y f。e=e-2*dx;glEnd();g 1 Flush();。清空O penG L 命令缓冲区,执行O p enGL程序in t main(i n t argc,ch a r*a r
24、 gv)g lutl n it(&arg c,a r gv);oglu tin i tDi s p 1 ayMode(G LUT_SI N GLE|G L UT_ R G B);初始化窗 口的现实模式=gl u t InitW i n d owS i ze(400,3 0 0);。设立窗口的尺寸g 1 ut I ni t WindowP o s i tion(100,2 0 0);“/设立窗口 的位置g 1 utC r eateWindow(点);创建一个名为矩形的窗口gl u tDi s pla y Func(Dis p 1 ay);。/设立当前窗口的显示函数Init i a l();。完毕
25、窗口的初始化g l u t MainLo o p();。/启动主G LUT事件解决循环re t u r n 0;实验结果:点13回 区)实验三圆绘制实验i .实验目的2.实验内容(-)八分法画圆圆心位于原点的圆有4 条对称轴x=0,y=0,y=x,y=-Xo若已知圆上任一点(x,y),可以得到其在圆周上关于四条对称轴的此外7 个点(y,x),(x,y),(-x,-y),(-y,-x),(y,x),(x,-y)。(二)中 点 B re se nh am 画圆算法算法环节如下:错误!未定义书签。输入圆的半径R错误!计算初始值d=l-R,x=0,y =R错误!绘 制 点(x,y)及其在八分圆中的此外
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 计算机 图形学 实验 报告

限制150内