计算机图形学实验报告.doc

上传人:小** 文档编号:16792415 上传时间:2020-10-25 格式:DOC 页数:35 大小:274KB
返回 下载 相关 举报
计算机图形学实验报告.doc_第1页
第1页 / 共35页
计算机图形学实验报告.doc_第2页
第2页 / 共35页
计算机图形学实验报告.doc_第3页
第3页 / 共35页
点击查看更多>>
资源描述
计算机图形学实验报告计 算 机 图 形 学课程实验报告 姓名:学号:计算机图形学实验报告目 录DDA算法绘制直线实验一实验一 直线的DDA算法一、【实验目的】1.掌握DDA算法的基本原理。2.掌握DDA直线扫描转换算法。3.深入了解直线扫描转换的编程思想。二、【实验内容】1.利用DDA的算法原理,编程实现对直线的扫描转换。2.加强对DDA算法的理解和掌握。三、【测试数据及其结果】四、【实验源代码】#include#include#include#includeGLsizei winWidth=500;GLsizei winHeight=500;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 DDALine(int x0,int y0,int x1,int y1) glColor3f(1.0,0.0,0.0); 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+) glPointSize(3); glBegin(GL_POINTS); glVertex2i(int(x+0.5),(int)(y+0.5); glEnd(); x+=xIncre; y+=yIncre; void Display(void) glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush();void winReshapeFcn(GLint newWidth, GLint newHeight) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight); glClear(GL_COLOR_BUFFER_BIT); winWidth=newWidth; winHeight=newHeight;int main(int argc,char*argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400,300); glutInitWindowPosition(100,120); glutCreateWindow(line); Initial(); glutDisplayFunc(Display); glutReshapeFunc(winReshapeFcn); glutMainLoop(); return 0;Bresenham算法实验二实验二 Bresenham绘制直线和圆一、【实验目的】1.掌握Bresenham算法扫描转换圆和直线的基本原理。二、【实验内容】1.利用Bresenham算法扫描转换圆和直线的基本原理编程实现对圆和直线的扫描转换。三、【测试数据及其结果】四、【实验源代码】绘制直线:#include#include#include#includeGLsizei winWidth=500;GLsizei winHeight=500;void lineBres(int x0, int y0, int xEnd, int yEnd) glColor3f(0.0, 0.0, 1.0); int dx=fabs(xEnd-x0), dy=fabs(yEnd-y0); int p=2*dy-dx; int twoDy=2*dy, twoDyMinusDx=2*(dy-dx); int x, y; if (x0xEnd) x=xEnd; y=yEnd; xEnd=x0; else x=x0; y=y0; glPointSize(6); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); while (xxEnd) x+; if (p0) p+=twoDy; else y+; p+=twoDyMinusDx; glPointSize(2); glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); void init (void) glClearColor(1.0, 1.0, 1.0, 1.0); glShadeModel(GL_FLAT);void display (void) glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); lineBres(10, 10, 400, 300); glFlush();void winReshapeFcn(GLint newWidth, GLint newHeight) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, GLdouble(newWidth), 0.0, GLdouble(newHeight); glClear(GL_COLOR_BUFFER_BIT); winWidth=newWidth; winHeight=newHeight;void main(int argc, char* argv) glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(10, 10); glutInitWindowSize(winWidth, winHeight); glutCreateWindow(lineBres); init(); glutDisplayFunc(display); glutReshapeFunc(winReshapeFcn); glutMainLoop();绘制圆:#includevoid init() glClearColor(0,0,0,0);void MidBresenhamCircle(int r)int x,y,d;x=0;y=r;d=1-r;glBegin(GL_LINE_STRIP);while(x=y)glVertex2f(x,y); if(d0) d+=2*x+3;elsed+=2*(x-y)+5;y-;x+;glEnd();void display()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();void reshape(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-10,10,-10,10);int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(100,100);glutCreateWindow(扫描转换圆);glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;反走样及五环的绘制实验三实验三 反走样及五环的绘制一、【实验目的】1.了解走样和反走样的内容,熟练掌握用opengl实现图形的反走样。2.学会用反走样消除走样现象。3.学会五环的绘制方法。二、【实验内容】1.通过学习反走样相关课程,用opengl实现光栅图形的反走样。2.绘制五环。三、【测试数据及其结果】四、【实验源代码】反走样:#include#pragma comment(linker,/subsystem:windows /entry:mainCRTStartup)GLuint lineList; /指定显示列表void Initial()glClearColor(1.0f,1.0f,1.0f,0.0f);glLineWidth(12.0f);glColor4f(0.0,0.6,1.0,1.0);lineList=glGenLists(1); /获得一个显示列表标识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();void ChangeSize(GLsizei w,GLsizei h)if(h=0) h=1;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION); /指定设置投影参数glLoadIdentity();if(w=h)gluOrtho2D(0.0,5.0,0.0,6.0*(GLfloat)h/(GLfloat)w);elsegluOrtho2D(0.0,5.0*(GLfloat)w/(GLfloat)h,0.0,6.0);glMatrixMode(GL_MODELVIEW); /指定设置模型视图变换参数glLoadIdentity();void Displayt(void)glClear(GL_COLOR_BUFFER_BIT);glCallList(lineList); /调用显示列表glFlush();void Displayw(void)glClear(GL_COLOR_BUFFER_BIT);glEnable(GL_LINE_SMOOTH); /使用反走样glEnable(GL_BLEND); /启用混合函数glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); /指定混合函数glCallList(lineList); /调用显示列表glFlush();void main(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();五环:#include#include #pragma comment(linker,/subsystem:windows /entry:mainCRTStartup)const float PI=3.1415;void DrawCircle(GLfloat radius)GLfloat x,y,z;glBegin(GL_LINE_LOOP);for (int alpha=0;alpha360;alpha+)x=radius*cos(alpha*PI/180);y=radius*sin(alpha*PI/180);z=0;glVertex3f(x,y,z);glEnd();void Display()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();void reshape(int w,int h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45,GLdouble(w)/h,1,100);glMatrixMode(GL_MODELVIEW);void main(int argc,char *argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);glutInitWindowPosition(10,10);glutInitWindowSize(500,500);glutCreateWindow(Test);glutDisplayFunc(Display);glutReshapeFunc(reshape);glutMainLoop();多视区实验四实验四 多视区一、【实验目的】1.熟练掌握各种裁剪算法和二维观察变换。2.学会在屏幕坐标系下创建多个视区、指定视区的宽度和高度,了解二维观察变换中包含窗口到视区的映射。二、【实验内容】1.在一个显示窗口内指定多个视区,分别显示具有相同坐标、不同颜色和不同显示模式的各种图形面。2.在书本给定程序基础上,对程序做一些改变并在视区中绘制各种图形。三、【测试数据及其结果】四、【实验源代码】#include#includeconst float PI=3.1415;void initial(void)glClearColor(1.0,1.0,1.0,1.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-10.0,10.0,-10.0,10.0);void triangle(GLsizei mode)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();void polygon(GLsizei mode)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();void DrawCircle(GLfloat r)GLfloat x,y,z;glBegin(GL_LINE_LOOP);for (int alpha=0;alpha360;alpha+)x=r*cos(alpha*PI/180);y=r*sin(alpha*PI/180);z=0;glVertex3f(x,y,z);glEnd();void Display()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();void main(void)glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(10,10);glutInitWindowSize(400,200);glutCreateWindow(多视区);initial();glutDisplayFunc(Display);glutMainLoop();分子模型实验五实验五 分子模型一、【实验目的】1.熟练掌握二维、三维几何变换矩阵和透视投影的相关知识从而用opengl实现分子模型的运动。2.熟练掌握opengl中相关函数的调用和实现。二、【实验内容】1.显示分子模型:红色大球表示原子,三个黄色小球表示电子,分别绕原子旋转,采用透视投影变换显示电子旋转过程。2.启用深度测试和模型视图矩阵完成分子动画。三、【测试数据及其结果】四、【实验源代码】#includeGLint angleSelf=0;void Initial()glEnable(GL_DEPTH_TEST);glClearColor(1.0f,1.0f,1.0f,1.0f);void ChangeSize(int w,int h)if(h=0) h=1;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();GLfloat fAspect;fAspect=(float)w/(float)h;gluPerspective(45.0,fAspect,1,500.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();void Display(void)static float fElect1=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(fElect1360.0f) fElect1=10.0f;glutSwapBuffers();void RotateSelf(int value)if(value=1)angleSelf+=5;angleSelf%=360;glutPostRedisplay();glutTimerFunc(100,RotateSelf,1);void TimerFunc(int value)glutPostRedisplay();glutTimerFunc(100,TimerFunc,1);int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);glutCreateWindow(分子动画示例);glutReshapeFunc(ChangeSize);glutDisplayFunc(Display);glutTimerFunc(500,TimerFunc,1);glutTimerFunc(100,RotateSelf,1);Initial();glutMainLoop();return 0;Bezier曲线实验六实验六 Bezier曲线一、【实验目的】1.掌握Bezire曲线定义。2.掌握设计绘制一次、二次和三次Bezier曲线算法。二、【实验内容】1.绘制NURBS曲面。2.基于Bezier定义根据控制多边形的阶次绘制Bezier曲线。三、【测试数据及其结果】四、【实验源代码】原实验代码:#include#include#includeclass Pt3Dpublic:GLfloat x,y,z;void GetCnk(GLint n,GLint *c)GLint i,k;for(k=0;k=k+1;i-)ck=ck*i;for(i=n-k;i=2;i-)ck=ck/i;void GetPointPr(GLint *c,GLfloat t,Pt3D*Pt,int ControlN,Pt3D*ControlP)GLint k,n=ControlN-1;GLfloat Bernstein;Pt-x=0.0;Pt-y=0.0;Pt-z=0.0;for(k=0;kx+=ControlPk.x*Bernstein; Pt-y+=ControlPk.y*Bernstein; Pt-z+=ControlPk.z*Bernstein;void BezierCurve(GLint m,GLint ControlN,Pt3D *ControlP)GLint *C,i;Pt3D CurvePt;C=new GLintControlN;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;void initial(void)glClearColor(1.0,1.0,1.0,1.0);void Display(void)glClear(GL_COLOR_BUFFER_BIT);GLint ControlN=4,m=500;Pt3D ControlP4=-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(GLint i=0;i4;i+)glVertex3f(ControlPi.x,ControlPi.y,ControlPi.z);glEnd();glFlush();void reshape(GLint newWidth,GLint newHeight)glViewport(0,0,newWidth,newHeight);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-100.0,100.0,-100.0,100.0);void main(void)glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow(Bezier曲线);initial();glutDisplayFunc(Display);glutReshapeFunc(reshape);glutMainLoop();加改后的:#includevoid initial(void)glClearColor(1.0,1.0,1.0,1.0);glLineWidth(4.0);GLfloat ControlP43=-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);void Display(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();void Reshape(GLint newWidth,GLint newHeight)glViewport(0,0,newWidth,newHeight);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-100.0,100.0,-100.0,100.0);void main(void)glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(400,400);glutCreateWindow(Bezier曲线);initial();glutDisplayFunc(Display);glutReshapeFunc(Reshape);glutMainLoop();NURBS实验九实验七 NURBS曲面和Bezier曲面一、【实验目的】1.掌握NURBS曲线定义。2.掌握设计绘制一次、二次和三次NURBS曲面算法。二、【实验内容】1.在屏幕上单击鼠标左键绘制控制多边形,基于NURBS定义根据控制多边形的阶次绘制NURBS曲面。2.绘制的曲面中,红色的点表示曲面的控制点,并增加了光标键控制旋转的交互式方式,以获得更好的显示效果。三、【测试数据及其结果】四、【实验源代码】NURBS曲面:#include#include#includeGLUnurbsObj*pNurb=NULL;GLint nNumPoints=4;GLfloat ctrlPoints443= -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;GLfloat Knots8=0.0f,0.0f,0.0f,0.0f,1.0f,1.0f,1.0f,1.0f;static GLfloat xRot=0.0f;static GLfloat yRot=0.0f;void DrawPoints(void)int i,j;glPointSize(5.0f);glColor3ub(255,0,0);glBegin(GL_POINTS);for(i=0;i4;i+)for(j=0;j356.0f) xRot=0.0f;if(xRot356.0) yRot=0.0f;if(yRot-1.0f) yRot=355.0f;glutPostRedisplay();void ChangeSize(int w,int h)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);int main(int argc,char *argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);glutCreateWindow(NURBS曲面);glutReshapeFunc(ChangeSize);glutDisplayFunc(ReDraw);glutSpecialFunc(SpecialKeys);Initial();glutMainLoop();return 0;NURBS曲面和Bezier曲面实验七在原来的基础上加的:#include #include #include GLUnurbsObj*pNurb=NULL;GLint nNumPoints=4;GLfloat Knots8=0.0f,0.0f,0.0f,0.0f,1.0f,1.0f,1.0f,1.0f;GLfloat ControlP443=-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;void DrawPoints(void)int i,j;glPointSize(5.0f);glColor3ub(255,0,0);glBegin(GL_POINTS);for(i=0;i4;i+)for(j=0;j4;j+)glVertex3fv(ControlPij);glEnd();void ReDraw(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,&ControlP000);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();void ChangeSize(int w,int h)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);int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);glutCreateWindow(NURBS曲面);glutReshapeFunc(ChangeSize);glutDisplayFunc(ReDraw);glutMainLoop();return 0;两点光源在球体上的效果实验八实验八 两点光源在球体上的效果一、【实验目的】1.掌握漫反射光、镜面反射光和聚光源的含义。2.掌握opengl中不同点光源的设置。二、【实验内容】1.设置两个光源,一个是漫反射的蓝色点光源,另一个是红色聚光光源,他们都照在一个球体上,产生亮斑。2.调用opengl中的函数指定当前设定的材质应用于物体表面的哪个面,从而使光照下产生特殊的效果。三、【测试数据及其结果】四、【实验源代码】#include#includevoid Initial(void)GLfloat mat_ambient=0.2f,0.2f,0.2f,1.0f;GLfloat mat_diffuse=0.8f,0.8f,0.8f,1.0f;GLfloat mat_specular=1.0f,1.0f,1.0f,1.0f;GLfloat mat_shininess=50.0f;GLfloat light0_diffuse=0.0f,0.0f,1.0f,1.0f;GLfloat light0_position=1.0f,1.0f,1.0f,0.0f;GLfloat light1_ambient=0.2f,0.2f,0.2f,1.0f;GLfloat light1_diffuse=1.0f,0.0f,0.0f,1.0f;GLfloat light1_specular=1.0f,0.6f,0.6f,1.0f;GLfloat light1_position=-3.0f,-3.0f,3.0f,1.0f;GLfloat spot_direction=1.0f,1.0f,-1.0f;glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!