計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名14180)_第1頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名14180)_第2頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名14180)_第3頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名14180)_第4頁(yè)
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名14180)_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(同名14180)計(jì)算機(jī)圖形學(xué)計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告計(jì)算機(jī)圖形學(xué)課計(jì)算機(jī)圖形學(xué)課程實(shí)驗(yàn)報(bào)告姓名:姓名:學(xué)號(hào):DDA算法繪制直線DDA算法繪制直線實(shí)驗(yàn)一dx=x1-x0;dy=y1-y0;x=x0;y=y0;if(abs(dx)>abs(dy))epsl=abs(dx);elseepsl=abs(dy);xIncre=(float)dx/(float)epsl;yIncre=(float)dy/(float)epsl;for(k=0;k<=epsl;k++){glPointSize(3);glBegin(GL_POINTS);glVertex2i(int(x+0.5),(int)(y+0.5));glEnd();x+=xIncre;y+=yIncre;}}voidDisplay(void){glClear(GL_COLOR_BUFFER_BIT);DDALine(100,100,200,180);glFlush();}voidwinReshapeFcn(GLintnewWidth,GLintnewHeight){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));glClear(GL_COLOR_BUFFER_BIT);winWidth=newWidth;winHeight=newHeight;}intmain(intargc,char*argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,300);glutInitWindowPosition(100,120);glutCreateWindow("line");Initial();glutDisplayFunc(Display);glutReshapeFunc(winReshapeFcn);glutMainLoop();return0;}Bresenham算法Bresenham算法實(shí)驗(yàn)二實(shí)驗(yàn)二Bresenham繪制直線和圓一、【實(shí)驗(yàn)?zāi)康摹?.掌握Bresenham算法掃描轉(zhuǎn)換圓和直線的基本原理。二、【實(shí)驗(yàn)內(nèi)容】1.利用Bresenham算法掃描轉(zhuǎn)換圓和直線的基本原理編程實(shí)現(xiàn)對(duì)圓和直線的掃描轉(zhuǎn)換。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】繪制直線:#include<stdlib.h>#include<math.h>#include<GL/glut.h>#include<stdio.h>GLsizeiwinWidth=500;GLsizeiwinHeight=500;voidlineBres(intx0,inty0,intxEnd,intyEnd){glColor3f(0.0,0.0,1.0);intdx=fabs(xEnd-x0),dy=fabs(yEnd-y0);intp=2*dy-dx;inttwoDy=2*dy,twoDyMinusDx=2*(dy-dx);intx,y;if(x0>xEnd){ x=xEnd;y=yEnd;xEnd=x0;}else{ x=x0;y=y0;}glPointSize(6);glBegin(GL_POINTS);glVertex2i(x,y);glEnd();while(x<xEnd){ x++; if(p<0) p+=twoDy; else{ y++;p+=twoDyMinusDx; }glPointSize(2);glBegin(GL_POINTS);glVertex2i(x,y);glEnd();}}voidinit(void){glClearColor(1.0,1.0,1.0,1.0);glShadeModel(GL_FLAT);}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);lineBres(10,10,400,300);glFlush();}voidwinReshapeFcn(GLintnewWidth,GLintnewHeight){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));glClear(GL_COLOR_BUFFER_BIT);winWidth=newWidth;winHeight=newHeight;}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(10,10);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("lineBres");init();glutDisplayFunc(display);glutReshapeFunc(winReshapeFcn);glutMainLoop();}繪制圓:#include<gl/glut.h>voidinit(){glClearColor(0,0,0,0);}voidMidBresenhamCircle(intr){ intx,y,d; x=0; y=r; d=1-r; glBegin(GL_LINE_STRIP); while(x<=y){glVertex2f(x,y); if(d<0)d+=2*x+3; else{ d+=2*(x-y)+5; y--; } x++; } glEnd();}voiddisplay(){ glClearColor(1,1,1,1); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,0,0); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8);glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8); glRotated(45,0,0,1); MidBresenhamCircle(8);glutSwapBuffers();}voidreshape(intw,inth){ glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-10,10,-10,10);}intmain(intargc,char**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(400,400); glutInitWindowPosition(100,100); glutCreateWindow("掃描轉(zhuǎn)換圓"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return0;}反走樣及五環(huán)的繪制反走樣及五環(huán)的繪制實(shí)驗(yàn)三實(shí)驗(yàn)三反走樣及五環(huán)的繪制一、【實(shí)驗(yàn)?zāi)康摹?.了解走樣和反走樣的內(nèi)容,熟練掌握用opengl實(shí)現(xiàn)圖形的反走樣。

2.學(xué)會(huì)用反走樣消除走樣現(xiàn)象。3.學(xué)會(huì)五環(huán)的繪制方法。二、【實(shí)驗(yàn)內(nèi)容】1.通過(guò)學(xué)習(xí)反走樣相關(guān)課程,用opengl實(shí)現(xiàn)光柵圖形的反走樣。2.繪制五環(huán)。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】反走樣:#include<gl/glut.h>#pragmacomment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"")GLuintlineList;//指定顯示列表voidInitial(){ glClearColor(1.0f,1.0f,1.0f,0.0f); glLineWidth(12.0f); glColor4f(0.0,0.6,1.0,1.0); lineList=glGenLists(1);//獲得一個(gè)顯示列表標(biāo)識(shí) glNewList(lineList,GL_COMPILE);//定義顯示列表 glBegin(GL_LINE_LOOP); glVertex2f(1.0f,1.0f);glVertex2f(4.0f,2.0f);glVertex2f(2.0f,5.0f); glEnd();glEndList();}voidChangeSize(GLsizeiw,GLsizeih){ if(h==0)h=1; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION);//指定設(shè)置投影參數(shù) glLoadIdentity(); if(w<=h) gluOrtho2D(0.0,5.0,0.0,6.0*(GLfloat)h/(GLfloat)w); else gluOrtho2D(0.0,5.0*(GLfloat)w/(GLfloat)h,0.0,6.0); glMatrixMode(GL_MODELVIEW);//指定設(shè)置模型視圖變換參數(shù) glLoadIdentity();}voidDisplayt(void){ glClear(GL_COLOR_BUFFER_BIT); glCallList(lineList);//調(diào)用顯示列表 glFlush();}voidDisplayw(void){ glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_SMOOTH);//使用反走樣 glEnable(GL_BLEND);//啟用混合函數(shù) glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//指定混合函數(shù) glCallList(lineList);//調(diào)用顯示列表 glFlush();}voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(300,300); glutCreateWindow("原始圖形"); glutDisplayFunc(Displayt);glutReshapeFunc(ChangeSize); Initial(); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(300,300); glutInitWindowSize(300,300); glutCreateWindow("反走樣圖形");glutDisplayFunc(Displayw); glutReshapeFunc(ChangeSize); Initial(); glutMainLoop();}五環(huán):#include<gl/glut.h>#include<MATH.H>#pragmacomment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"")constfloatPI=3.1415;voidDrawCircle(GLfloatradius){ GLfloatx,y,z; glBegin(GL_LINE_LOOP); for(intalpha=0;alpha<360;alpha++) { x=radius*cos(alpha*PI/180); y=radius*sin(alpha*PI/180); z=0; glVertex3f(x,y,z); } glEnd();}voidDisplay(){ glClearColor(1,1,1,1); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-25); glColor3f(0,1,0); glLineWidth(3); DrawCircle(3.0); glPopMatrix(); glPushMatrix(); glTranslatef(7,0,0); glColor3f(1,0,0); DrawCircle(3.0); glPopMatrix(); glPushMatrix(); glTranslatef(-7,0,0); glColor3f(0,0,1);DrawCircle(3.0); glPopMatrix(); glPushMatrix(); glTranslatef(-3.5,-3.5,0); glColor3f(0.3,0.5,0.7);DrawCircle(3.0); glPopMatrix(); glPushMatrix(); glTranslatef(3.5,-3.5,0); glColor3f(0.7,0.0,0.3);DrawCircle(3.0); glPopMatrix(); glutSwapBuffers();}voidreshape(intw,inth){ glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,GLdouble(w)/h,1,100); glMatrixMode(GL_MODELVIEW);}voidmain(intargc,char**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); glutInitWindowPosition(10,10); glutInitWindowSize(500,500); glutCreateWindow("Test"); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop();}多視區(qū)多視區(qū)實(shí)驗(yàn)四實(shí)驗(yàn)四多視區(qū)一、【實(shí)驗(yàn)?zāi)康摹?.熟練掌握各種裁剪算法和二維觀察變換。

2.學(xué)會(huì)在屏幕坐標(biāo)系下創(chuàng)建多個(gè)視區(qū)、指定視區(qū)的寬度和高度,了解二維觀察變換中包含窗口到視區(qū)的映射。二、【實(shí)驗(yàn)內(nèi)容】1.在一個(gè)顯示窗口內(nèi)指定多個(gè)視區(qū),分別顯示具有相同坐標(biāo)、不同顏色和不同顯示模式的各種圖形面。

2.在書本給定程序基礎(chǔ)上,對(duì)程序做一些改變并在視區(qū)中繪制各種圖形。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】#include<gl/glut.h>#include<MATH.H>constfloatPI=3.1415;voidinitial(void){ glClearColor(1.0,1.0,1.0,1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-10.0,10.0,-10.0,10.0);}voidtriangle(GLsizeimode){ if(mode==1) glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glBegin(GL_TRIANGLES); glVertex2f(0.0,5.0); glVertex2f(5.0,-5.0); glVertex2f(-5.0,-5.0); glEnd();}voidpolygon(GLsizeimode){ if(mode==1) glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glBegin(GL_POLYGON); glVertex2f(2.0,7.0); glVertex2f(5.0,3.0); glVertex2f(4.0,0.0); glVertex2f(0.0,0.0); glVertex2f(1.0,4.0); glEnd();}voidDrawCircle(GLfloatr){ GLfloatx,y,z; glBegin(GL_LINE_LOOP); for(intalpha=0;alpha<360;alpha++) { x=r*cos(alpha*PI/180); y=r*sin(alpha*PI/180); z=0; glVertex3f(x,y,z); } glEnd();}voidDisplay(){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,0.0,0.0); glViewport(0,0,100,100); triangle(1);glColor3f(0.0,0.0,1.0);glViewport(100,0,100,100); triangle(2); glColor3f(1.0,0.0,0.0);glViewport(0,100,100,100);polygon(2); glViewport(100,100,100,100);DrawCircle(5); glFlush();}voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(10,10); glutInitWindowSize(400,200); glutCreateWindow("多視區(qū)"); initial(); glutDisplayFunc(Display); glutMainLoop();}分子模型分子模型實(shí)驗(yàn)五實(shí)驗(yàn)五分子模型一、【實(shí)驗(yàn)?zāi)康摹?.熟練掌握二維、三維幾何變換矩陣和透視投影的相關(guān)知識(shí)從而用opengl實(shí)現(xiàn)分子模型的運(yùn)動(dòng)。

2.熟練掌握opengl中相關(guān)函數(shù)的調(diào)用和實(shí)現(xiàn)。二、【實(shí)驗(yàn)內(nèi)容】1.顯示分子模型:紅色大球表示原子,三個(gè)黃色小球表示電子,分別繞原子旋轉(zhuǎn),采用透視投影變換顯示電子旋轉(zhuǎn)過(guò)程。2.啟用深度測(cè)試和模型視圖矩陣完成分子動(dòng)畫。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】#include<gl/glut.h>GLintangleSelf=0;voidInitial(){ glEnable(GL_DEPTH_TEST); glClearColor(1.0f,1.0f,1.0f,1.0f);}voidChangeSize(intw,inth){ if(h==0)h=1; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLfloatfAspect; fAspect=(float)w/(float)h; gluPerspective(45.0,fAspect,1,500.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();}voidDisplay(void){ staticfloatfElect1=0.0f; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f,0.0f,-250.0f); glColor3f(1.0f,0.0f,0.0f); glutWireSphere(12.0f,15,15); glColor3f(0.0f,1.0f,0.0f); glPushMatrix(); glRotatef(fElect1,0.0f,1.0f,0.0f); glTranslatef(90.0f,0.0f,0.0f); glRotatef(angleSelf,0,1,0); glutWireSphere(6.0f,15,15); glPopMatrix(); glPushMatrix(); glRotatef(45.0f,0.0f,0.0f,1.0f); glRotatef(fElect1,0.0f,1.0f,0.0f); glTranslatef(-70.0f,0.0f,0.0f); glRotatef(angleSelf,0,1,0); glutWireSphere(6.0f,15,15); glPopMatrix(); glPushMatrix(); glRotatef(-45.0f,0.0f,0.0f,1.0f); glRotatef(fElect1,0.0f,1.0f,0.0); glTranslatef(0.0f,0.0f,60.0f); glRotatef(angleSelf,0,1,0); glutWireSphere(6.0f,15,15); glPopMatrix(); fElect1+=5.0f; if(fElect1>360.0f)fElect1=10.0f; glutSwapBuffers();}voidRotateSelf(intvalue){ if(value==1) { angleSelf+=5; angleSelf%=360; glutPostRedisplay(); glutTimerFunc(100,RotateSelf,1); }}voidTimerFunc(intvalue){ glutPostRedisplay(); glutTimerFunc(100,TimerFunc,1);}intmain(intargc,char*argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutCreateWindow("分子動(dòng)畫示例"); glutReshapeFunc(ChangeSize); glutDisplayFunc(Display); glutTimerFunc(500,TimerFunc,1); glutTimerFunc(100,RotateSelf,1); Initial(); glutMainLoop(); return0;} Bezier曲線Bezier曲線實(shí)驗(yàn)六實(shí)驗(yàn)六Bezier曲線一、【實(shí)驗(yàn)?zāi)康摹?.掌握Bezire曲線定義。

2.掌握設(shè)計(jì)繪制一次、二次和三次Bezier曲線算法。二、【實(shí)驗(yàn)內(nèi)容】1.繪制NURBS曲面。2.基于Bezier定義根據(jù)控制多邊形的階次繪制

Bezier曲線。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】原實(shí)驗(yàn)代碼:#include<GL/glut.h>#include<math.h>#include<stdlib.h>classPt3D{public: GLfloatx,y,z;};voidGetCnk(GLintn,GLint*c){ GLinti,k; for(k=0;k<=n;k++){ c[k]=1; for(i=n;i>=k+1;i--)c[k]=c[k]*i; for(i=n-k;i>=2;i--)c[k]=c[k]/i; }}voidGetPointPr(GLint*c,GLfloatt,Pt3D*Pt,intControlN,Pt3D*ControlP){ GLintk,n=ControlN-1; GLfloatBernstein; Pt->x=0.0; Pt->y=0.0; Pt->z=0.0; for(k=0;k<ControlN;k++){Bernstein=c[k]*pow(t,k)*pow(1-t,n-k); Pt->x+=ControlP[k].x*Bernstein;Pt->y+=ControlP[k].y*Bernstein;Pt->z+=ControlP[k].z*Bernstein; }}voidBezierCurve(GLintm,GLintControlN,Pt3D*ControlP){ GLint*C,i; Pt3DCurvePt; C=newGLint[ControlN]; GetCnk(ControlN-1,C); glBegin(GL_POINTS); for(i=0;i<=m;i++){ GetPointPr(C,(GLfloat)i/(GLfloat)m,&CurvePt,ControlN,ControlP); glVertex2f(CurvePt.x,CurvePt.y); } glEnd(); delete[]C;}voidinitial(void){ glClearColor(1.0,1.0,1.0,1.0);}voidDisplay(void){ glClear(GL_COLOR_BUFFER_BIT); GLintControlN=4,m=500; Pt3DControlP[4]={{-80.0,-40.0,0.0},{-10.0,90.0,0.0},{10.0,-90.0,0.0},{80.0,40.0,0.0}}; glPointSize(2); glColor3f(0.0,0.0,0.0); BezierCurve(m,ControlN,ControlP); glBegin(GL_LINE_STRIP); for(GLinti=0;i<4;i++)glVertex3f(ControlP[i].x,ControlP[i].y,ControlP[i].z); glEnd(); glFlush();}voidreshape(GLintnewWidth,GLintnewHeight){ glViewport(0,0,newWidth,newHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-100.0,100.0,-100.0,100.0); }voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("Bezier曲線"); initial(); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop();}加改后的:#include<GL/glut.h>voidinitial(void){glClearColor(1.0,1.0,1.0,1.0);glLineWidth(4.0);GLfloatControlP[4][3]={{-80.0,40.0,0.0},{-10.0,90.0,0.0},{10.0,-90.0,0.0},{80.0,40.0,0.0}};glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,*ControlP);glEnable(GL_MAP1_VERTEX_3);}voidDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glMapGrid1f(100,0.0,1.0);glEvalMesh1(GL_LINE,0,100);glFlush();}voidReshape(GLintnewWidth,GLintnewHeight){glViewport(0,0,newWidth,newHeight);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-100.0,100.0,-100.0,100.0);}voidmain(void){glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow("Bezier曲線");initial();glutDisplayFunc(Display);glutReshapeFunc(Reshape);glutMainLoop();NURBSNURBS實(shí)驗(yàn)九實(shí)驗(yàn)七NURBS曲面和Bezier曲面一、【實(shí)驗(yàn)?zāi)康摹?.掌握NURBS曲線定義。

2.掌握設(shè)計(jì)繪制一次、二次和三次NURBS曲面算法。二、【實(shí)驗(yàn)內(nèi)容】1.在屏幕上單擊鼠標(biāo)左鍵繪制控制多邊形,基于NURBS定義根據(jù)控制多邊形的階次繪制NURBS曲面。2.繪制的曲面中,紅色的點(diǎn)表示曲面的控制點(diǎn),并增加了光標(biāo)鍵控制旋轉(zhuǎn)的交互式方式,以獲得更好的顯示效果。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】NURBS曲面:#include<windows.h>#include<gl/glut.h>#include<math.h>GLUnurbsObj*pNurb=NULL;GLintnNumPoints=4;GLfloatctrlPoints[4][4][3]={{{-6.0f,-6.0f,0.0f},{-6.0f,-2.0f,0.0f},{-6.0f,2.0f,0.0f},{-6.0f,6.0f,0.0f}},{{-2.0f,-6.0f,0.0f},{-2.0f,-2.0f,8.0f},{-2.0f,2.0f,8.0f},{-2.0f,6.0f,0.0f}},{{2.0f,-6.0f,0.0f},{2.0f,-2.0f,8.0f},{2.0f,2.0f,8.0f},{2.0f,6.0f,0.0f}},{{6.0f,-6.0f,0.0f},{6.0f,-2.0f,0.0f},{6.0f,2.0f,0.0f},{6.0f,6.0f,0.0f}}};GLfloatKnots[8]={0.0f,0.0f,0.0f,0.0f,1.0f,1.0f,1.0f,1.0f};staticGLfloatxRot=0.0f;staticGLfloatyRot=0.0f;voidDrawPoints(void){ inti,j; glPointSize(5.0f); glColor3ub(255,0,0); glBegin(GL_POINTS); for(i=0;i<4;i++) for(j=0;j<4;j++) glVertex3fv(ctrlPoints[i][j]); glEnd();}voidInitial(){ glClearColor(1.0f,1.0f,1.0f,1.0f); pNurb=gluNewNurbsRenderer(); gluNurbsProperty(pNurb,GLU_SAMPLING_TOLERANCE,25.0f);gluNurbsProperty(pNurb,GLU_DISPLAY_MODE,(GLfloat)GLU_OUTLINE_POLYGON);}voidReDraw(void){ glColor3ub(0,0,220); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glRotatef(330.0f,1.0f,0.0f,0.0f); glRotatef(xRot,1.0f,0.0f,0.0f); glRotatef(yRot,0.0f,1.0f,0.0f); gluBeginSurface(pNurb); gluNurbsSurface(pNurb, 8, Knots, 8, Knots, 4*3, 3, &ctrlPoints[0][0][0], 4, 4, GL_MAP2_VERTEX_3); gluEndSurface(pNurb); DrawPoints(); glPopMatrix(); glutSwapBuffers();}voidSpecialKeys(intkey,intx,inty){ if(key==GLUT_KEY_UP)xRot-=5.0f; if(key==GLUT_KEY_DOWN)xRot+=5.0f; if(key==GLUT_KEY_LEFT)yRot-=5.0f; if(key==GLUT_KEY_RIGHT)yRot+=5.0f; if(xRot>356.0f)xRot=0.0f; if(xRot<-1.0f)xRot=355.0f; if(yRot>356.0)yRot=0.0f; if(yRot<-1.0f)yRot=355.0f; glutPostRedisplay();}voidChangeSize(intw,inth){ if(h==0)h=1; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLdouble)w/(GLdouble)h,1.0,40.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f,0.0f,-20.0f);}intmain(intargc,char**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutCreateWindow("NURBS曲面"); glutReshapeFunc(ChangeSize); glutDisplayFunc(ReDraw); glutSpecialFunc(SpecialKeys); Initial(); glutMainLoop(); return0;}NURBS曲面和Bezier曲面NURBS曲面和Bezier曲面實(shí)驗(yàn)七在原來(lái)的基礎(chǔ)上加的:#include<windows.h>#include<gl/glut.h>#include<math.h>GLUnurbsObj*pNurb=NULL;GLintnNumPoints=4;GLfloatKnots[8]={0.0f,0.0f,0.0f,0.0f,1.0f,1.0f,1.0f,1.0f};GLfloatControlP[4][4][3]={{{-1.5,-1.5,4.0},{-0.5,-1.5,2.0},{-0.5,-1.5,-1.0},{1.5,-1.5,2.0}},{{-1.5,-0.5,1.0},{-0.5,-0.5,3.0},{-0.5,-0.5,0.0},{1.5,-0.5,-1.0}},{{-1.5,0.5,4.0},{-0.5,0.5,0.0},{0.5,0.5,3.0},{1.5,0.5,4.0}},{{-1.5,1.5,-2.0},{-0.5,1.5,-2.0},{0.5,1.5,0.0},{1.5,1.5,-1.0}}};voidDrawPoints(void){ inti,j; glPointSize(5.0f); glColor3ub(255,0,0); glBegin(GL_POINTS); for(i=0;i<4;i++) for(j=0;j<4;j++) glVertex3fv(ControlP[i][j]); glEnd();}voidReDraw(void){ glColor3ub(0,0,220); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glMap2f(GL_MAP2_VERTEX_3,0.0,1.0,3,4,0.0,1.0,12,4,&ControlP[0][0][0]); glEnable(GL_MAP2_VERTEX_3); glColor3f(1.0,1.0,1.0); glMapGrid2f(40,0.0,1.0,40,0.0,1.0); glEvalMesh2(GL_FILL,0,40,0,40); DrawPoints(); glutSwapBuffers();}voidChangeSize(intw,inth){ if(h==0)h=1; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLdouble)w/(GLdouble)h,1.0,40.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f,0.0f,-20.0f);}intmain(intargc,char*argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutCreateWindow("NURBS曲面"); glutReshapeFunc(ChangeSize); glutDisplayFunc(ReDraw); glutMainLoop(); return0;}兩點(diǎn)光源在球體上的效果兩點(diǎn)光源在球體上的效果實(shí)驗(yàn)八實(shí)驗(yàn)八兩點(diǎn)光源在球體上的效果一、【實(shí)驗(yàn)?zāi)康摹?.掌握漫反射光、鏡面反射光和聚光源的含義。

2.掌握opengl中不同點(diǎn)光源的設(shè)置。二、【實(shí)驗(yàn)內(nèi)容】1.設(shè)置兩個(gè)光源,一個(gè)是漫反射的藍(lán)色點(diǎn)光源,另一個(gè)是紅色聚光光源,他們都照在一個(gè)球體上,產(chǎn)生亮斑。2.調(diào)用opengl中的函數(shù)指定當(dāng)前設(shè)定的材質(zhì)應(yīng)用于物體表面的哪個(gè)面,從而使光照下產(chǎn)生特殊的效果。三、【測(cè)試數(shù)據(jù)及其結(jié)果】四、【實(shí)驗(yàn)源代碼】#include<windows.h>#include<gl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論