计算机图形学黄欣212318.docx
《计算机图形学黄欣212318.docx》由会员分享,可在线阅读,更多相关《计算机图形学黄欣212318.docx(21页珍藏版)》请在冰豆网上搜索。
计算机图形学黄欣212318
计算机图形学黄欣2013212318
计算机图形学
姓名:
黄欣学号:
**********日期:
2015.12.27
1.创建新项目
1)点击文件-->新建-->项目
2)选择VisualC++中的Win32控制台应用程序,修改文件名,最后点击确定即可
3)点击下一步
4)勾选空项目,点击完成
5)右键点击新建好的test1下的资源文件-->添加-->新建项
6)选择C++文件,修改文件名即可
2.在创建的新项目中,写程序代码。
第二次作业地图绘制
#include
usingnamespacestd;
classMapPoint
{
public:
doublelongitude;//经度
doublelatitude;//纬度
};
classPolygon
vectorPoints;//多边形的顶点序列
vectorpolys;//多边形集合
vectorReadMapData(char*filename)//文件名
intPointCount;//计算点的个数
vectorPolygons;
ifstreamfs(filename);//寻找filename文件是否为空
while(fs.eof()!
=true)
Polygon*poly=newPolygon;//定点个数
fs>>PointCount;//定点个数赋值给fs
cout<for(inti=0;i{MapPointp;//地图名fs>>p.longitude>>p.latitude;poly->Points.push_back(p);}Polygons.push_back(poly);}returnPolygons;}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);//用蓝色绘制各省边界glColor3f(0.0,0.0,1.0);//设置正面为填充模式glPolygonMode(GL_BACK,GL_LINE);for(inti=0;i{vectorPoints=polys[i]->Points;glBegin(GL_LINE_LOOP);//使用闭合曲线方式绘制各省边界for(intj=0;j{glVertex3f(Points[j].longitude,Points[j].latitude,0.0);}glEnd();}glFlush();}voidinit(void){//设置背景颜色glClearColor(1.0,1.0,1.0,0.0);//初始化观察值glMatrixMode(GL_PROJECTION);//将矩阵模式设为投影glLoadIdentity();//对矩阵进行单位化glOrtho(108.0,120.0,30.0,38.0,-2.0,2.0);//构造平行投影矩阵,注意坐标的位置}intmain(intargc,char**argv)//主函数{char*filename="D:/HenanCounty.txt";//文件名与文件目录对应polys=ReadMapData(filename);//读定义的文件给ploysglutInit(&argc,argv);//初始化glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);//单存缓和RGBglutInitWindowPosition(100,100);//窗口位置glutInitWindowSize(450,450);//窗口大小glutCreateWindow("henancountry");//窗口标题init();glutDisplayFunc(display);//设置一个函数,当需要画图时,调用该函数glutMainLoop();//进行消息循环return0;}第五章、二维观察红蓝三角形#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);设置右视区glRotatef(90,0,0,1);关于z轴旋转triangle(v[0],v[1],v[2]);显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。四棱锥和立方体实体模型#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);//设置右视区glRotatef(90,0,0,1);//关于z轴旋转triangle(v[0],v[1],v[2]);//显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}第六章三维观察立方体透视投影#includeGLintwinWidth=600,winHeight=600;//设置初始化窗口大小/*观察坐标系参数设置*/GLfloatx0=0,y0=0,z0=5;//设置观察坐标系原点GLfloatxref=0.0,yref=0.0,zref=0.0;//设置观察坐标系参考点(视点)GLfloatVx=0.0,Vy=1.0,Vz=0.0;//设置观察坐标系向上向量(y轴)/*观察体(视见体)参数设置*/GLfloatxwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;//设置裁剪窗口坐标范围GLfloatdnear=1.5,dfar=20;//设置远、近裁剪面深度范围voidinit(void){glClearColor(1,1,1,0);//glShadeModel(GL_FLAT);//xz/*①观察变换*//*视点变换*/gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);//指定三维观察参数/*模型变换*/glMatrixMode(GL_MODELVIEW);glScalef(2,2,2);//比例放缩变换扩大两倍glRotatef(45,0,1,1);//旋转变换/*②投影变换*/glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);//透视投影,设置透视视景体}voiddisplayFcn(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,1,0);//设置前景色为绿色glutSolidCube(1);//绘制单位立方体实体glColor3f(0,0,0);//设置前景色为黑色glLineWidth(2);//设置线宽glutWireCube(1);//绘制单位立方体线框glFlush();}voidreshapeFcn(GLintnewWidth,GLintnewHeight){/*③视口变换*/glViewport(0,0,newWidth,newHeight);//定义视口大小winWidth=newWidth;winHeight=newHeight;}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("单位立方体的透视投影");init();glutDisplayFunc(displayFcn);glutReshapeFunc(reshapeFcn);glutMainLoop();} 第七章、BeZier曲线绘制#includeGLfloatctrlpoints[4][3]={{-4,-4,0},{-2,3,0},{2,4.5,0},{3,-3,0}};voidinit(void){glClearColor(1,1,1,0);glShadeModel(GL_FLAT);//下行用于定义曲线函数glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints[0][0]);glEnable(GL_MAP1_VERTEX_3);//将当前曲线激活}voiddisplay(void){inti;glClear(GL_COLOR_BUFFER_BIT);//下面用求值器按20等分计算BeZier曲线上的点glColor3f(0,0,0);glLineWidth(2);glBegin(GL_LINE_STRIP);for(i=0;i<20;i++)glEvalCoord1f((GLfloat)i/20);glEnd();glLineWidth(1);glColor3f(0,0,1);glBegin(GL_LINE_STRIP);for(i=0;i<4;i++)glVertex3fv(&ctrlpoints[i][0]);glEnd();glFlush();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-5,5,-5*(GLfloat)h/(GLfloat)w,5*(GLfloat)h/(GLfloat)w,-5,5);elseglOrtho(-5*(GLfloat)w/(GLfloat)h,5*(GLfloat)w/(GLfloat)h,-5,5,-5,5);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return0;}2.BeZier曲线绘制#includeGLfloatctrlpoints[4][4][3]={{{-3,-0,4},{-2,0,2},{-1,0,0},{0,0,2}},{{-3,1,1},{-2,1,3},{-1,1,6},{0,1,-1}},{{-3,2,4},{-2,2,0},{-1,2,3},{0,2,4}},{{-3,3,0},{-2,3,0},{-1,3,0},{0,3,0}}};voiddisplay(void){inti,j;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0,0,0);glPushMatrix();glRotatef(85,1,1,1);for(j=0;j<=20;j++){glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)i/20,(GLfloat)j/20);glEnd();glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)j/20,(GLfloat)i/20);glEnd();}glPopMatrix();glFlush();}voidinit(void){glClearColor(1,1,1,1);glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);glEnable(GL_MAP2_VERTEX_3);glOrtho(-5,5,-5,5,-5,5);}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutMainLoop();return0;}最后一次作业:茶壶绘制#include#includevoidinit(void){/*设置材质的镜面反射光的反射系数*/GLfloatmat_specular[]={1.0,1.0,1.0,1.0};/*设置材质的镜面反射系数*/GLfloatmat_shininess[]={50.0};/*设置光源位置的值*/GLfloatlight_position[]={1.0,1.0,1.0,0.0};/*设置漫反射光和折射光分量强度的值*/GLfloatwhite_light[]={1.0,1.0,1.0,1.0};/*设置点光源的颜色*/GLfloatLight_Model_Ambient[]={0.2,0.2,0.2,1.0};/*清除窗口的颜色,显示为黑色*/glClearColor(0.0,0.0,0.0,0.0);/*设置阴影模型*/glShadeModel(GL_SMOOTH);/*设置表面特性函数,指定物体正面被赋予制定材质,设置镜面反射光的反射系数和镜面反射系数*/glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //建立光源/*设置一个OpenGL光源,设置光源位置,light_position为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_POSITION,light_position);/*设置光源的设置漫反射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);/*设置光源的设置直射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);/*设置点光源的颜色*/glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient); /*启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/glEnable(GL_LIGHTING);/*启用GL_LIGHT0这个光源*/glEnable(GL_LIGHT0);/*启用更新深度缓存区功能*/glEnable(GL_DEPTH_TEST);}voiddisplay(void){/*清除颜色缓存和深度缓存*/glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//glutSolidSpehere(1.0,20,16);/*显示茶壶*/glutSolidTeapot(0.5);/*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/glFlush();}voidreshape(intw,inth){/*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/glViewport(0,0,(GLsizei)w,(GLsizei)h);/*指定GL_PROJECTION矩阵为当前矩阵*/glMatrixMode(GL_PROJECTION);/*重置当前矩阵为单位矩阵*/glLoadIdentity();/*for循环,glOrtho创建一个平行的视景体*/if(w<=h){glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);}elseglOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);/*指定GL_MODELVIEW矩阵为当前矩阵*/glMatrix
for(inti=0;i{MapPointp;//地图名fs>>p.longitude>>p.latitude;poly->Points.push_back(p);}Polygons.push_back(poly);}returnPolygons;}voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT);//用蓝色绘制各省边界glColor3f(0.0,0.0,1.0);//设置正面为填充模式glPolygonMode(GL_BACK,GL_LINE);for(inti=0;i{vectorPoints=polys[i]->Points;glBegin(GL_LINE_LOOP);//使用闭合曲线方式绘制各省边界for(intj=0;j{glVertex3f(Points[j].longitude,Points[j].latitude,0.0);}glEnd();}glFlush();}voidinit(void){//设置背景颜色glClearColor(1.0,1.0,1.0,0.0);//初始化观察值glMatrixMode(GL_PROJECTION);//将矩阵模式设为投影glLoadIdentity();//对矩阵进行单位化glOrtho(108.0,120.0,30.0,38.0,-2.0,2.0);//构造平行投影矩阵,注意坐标的位置}intmain(intargc,char**argv)//主函数{char*filename="D:/HenanCounty.txt";//文件名与文件目录对应polys=ReadMapData(filename);//读定义的文件给ploysglutInit(&argc,argv);//初始化glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);//单存缓和RGBglutInitWindowPosition(100,100);//窗口位置glutInitWindowSize(450,450);//窗口大小glutCreateWindow("henancountry");//窗口标题init();glutDisplayFunc(display);//设置一个函数,当需要画图时,调用该函数glutMainLoop();//进行消息循环return0;}第五章、二维观察红蓝三角形#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);设置右视区glRotatef(90,0,0,1);关于z轴旋转triangle(v[0],v[1],v[2]);显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。四棱锥和立方体实体模型#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);//设置右视区glRotatef(90,0,0,1);//关于z轴旋转triangle(v[0],v[1],v[2]);//显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}第六章三维观察立方体透视投影#includeGLintwinWidth=600,winHeight=600;//设置初始化窗口大小/*观察坐标系参数设置*/GLfloatx0=0,y0=0,z0=5;//设置观察坐标系原点GLfloatxref=0.0,yref=0.0,zref=0.0;//设置观察坐标系参考点(视点)GLfloatVx=0.0,Vy=1.0,Vz=0.0;//设置观察坐标系向上向量(y轴)/*观察体(视见体)参数设置*/GLfloatxwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;//设置裁剪窗口坐标范围GLfloatdnear=1.5,dfar=20;//设置远、近裁剪面深度范围voidinit(void){glClearColor(1,1,1,0);//glShadeModel(GL_FLAT);//xz/*①观察变换*//*视点变换*/gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);//指定三维观察参数/*模型变换*/glMatrixMode(GL_MODELVIEW);glScalef(2,2,2);//比例放缩变换扩大两倍glRotatef(45,0,1,1);//旋转变换/*②投影变换*/glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);//透视投影,设置透视视景体}voiddisplayFcn(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,1,0);//设置前景色为绿色glutSolidCube(1);//绘制单位立方体实体glColor3f(0,0,0);//设置前景色为黑色glLineWidth(2);//设置线宽glutWireCube(1);//绘制单位立方体线框glFlush();}voidreshapeFcn(GLintnewWidth,GLintnewHeight){/*③视口变换*/glViewport(0,0,newWidth,newHeight);//定义视口大小winWidth=newWidth;winHeight=newHeight;}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("单位立方体的透视投影");init();glutDisplayFunc(displayFcn);glutReshapeFunc(reshapeFcn);glutMainLoop();} 第七章、BeZier曲线绘制#includeGLfloatctrlpoints[4][3]={{-4,-4,0},{-2,3,0},{2,4.5,0},{3,-3,0}};voidinit(void){glClearColor(1,1,1,0);glShadeModel(GL_FLAT);//下行用于定义曲线函数glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints[0][0]);glEnable(GL_MAP1_VERTEX_3);//将当前曲线激活}voiddisplay(void){inti;glClear(GL_COLOR_BUFFER_BIT);//下面用求值器按20等分计算BeZier曲线上的点glColor3f(0,0,0);glLineWidth(2);glBegin(GL_LINE_STRIP);for(i=0;i<20;i++)glEvalCoord1f((GLfloat)i/20);glEnd();glLineWidth(1);glColor3f(0,0,1);glBegin(GL_LINE_STRIP);for(i=0;i<4;i++)glVertex3fv(&ctrlpoints[i][0]);glEnd();glFlush();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-5,5,-5*(GLfloat)h/(GLfloat)w,5*(GLfloat)h/(GLfloat)w,-5,5);elseglOrtho(-5*(GLfloat)w/(GLfloat)h,5*(GLfloat)w/(GLfloat)h,-5,5,-5,5);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return0;}2.BeZier曲线绘制#includeGLfloatctrlpoints[4][4][3]={{{-3,-0,4},{-2,0,2},{-1,0,0},{0,0,2}},{{-3,1,1},{-2,1,3},{-1,1,6},{0,1,-1}},{{-3,2,4},{-2,2,0},{-1,2,3},{0,2,4}},{{-3,3,0},{-2,3,0},{-1,3,0},{0,3,0}}};voiddisplay(void){inti,j;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0,0,0);glPushMatrix();glRotatef(85,1,1,1);for(j=0;j<=20;j++){glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)i/20,(GLfloat)j/20);glEnd();glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)j/20,(GLfloat)i/20);glEnd();}glPopMatrix();glFlush();}voidinit(void){glClearColor(1,1,1,1);glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);glEnable(GL_MAP2_VERTEX_3);glOrtho(-5,5,-5,5,-5,5);}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutMainLoop();return0;}最后一次作业:茶壶绘制#include#includevoidinit(void){/*设置材质的镜面反射光的反射系数*/GLfloatmat_specular[]={1.0,1.0,1.0,1.0};/*设置材质的镜面反射系数*/GLfloatmat_shininess[]={50.0};/*设置光源位置的值*/GLfloatlight_position[]={1.0,1.0,1.0,0.0};/*设置漫反射光和折射光分量强度的值*/GLfloatwhite_light[]={1.0,1.0,1.0,1.0};/*设置点光源的颜色*/GLfloatLight_Model_Ambient[]={0.2,0.2,0.2,1.0};/*清除窗口的颜色,显示为黑色*/glClearColor(0.0,0.0,0.0,0.0);/*设置阴影模型*/glShadeModel(GL_SMOOTH);/*设置表面特性函数,指定物体正面被赋予制定材质,设置镜面反射光的反射系数和镜面反射系数*/glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //建立光源/*设置一个OpenGL光源,设置光源位置,light_position为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_POSITION,light_position);/*设置光源的设置漫反射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);/*设置光源的设置直射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);/*设置点光源的颜色*/glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient); /*启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/glEnable(GL_LIGHTING);/*启用GL_LIGHT0这个光源*/glEnable(GL_LIGHT0);/*启用更新深度缓存区功能*/glEnable(GL_DEPTH_TEST);}voiddisplay(void){/*清除颜色缓存和深度缓存*/glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//glutSolidSpehere(1.0,20,16);/*显示茶壶*/glutSolidTeapot(0.5);/*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/glFlush();}voidreshape(intw,inth){/*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/glViewport(0,0,(GLsizei)w,(GLsizei)h);/*指定GL_PROJECTION矩阵为当前矩阵*/glMatrixMode(GL_PROJECTION);/*重置当前矩阵为单位矩阵*/glLoadIdentity();/*for循环,glOrtho创建一个平行的视景体*/if(w<=h){glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);}elseglOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);/*指定GL_MODELVIEW矩阵为当前矩阵*/glMatrix
MapPointp;//地图名
fs>>p.longitude>>p.latitude;
poly->Points.push_back(p);
}
Polygons.push_back(poly);
returnPolygons;
voiddisplay(void)
glClear(GL_COLOR_BUFFER_BIT);//用蓝色绘制各省边界
glColor3f(0.0,0.0,1.0);//设置正面为填充模式
glPolygonMode(GL_BACK,GL_LINE);
for(inti=0;i{vectorPoints=polys[i]->Points;glBegin(GL_LINE_LOOP);//使用闭合曲线方式绘制各省边界for(intj=0;j{glVertex3f(Points[j].longitude,Points[j].latitude,0.0);}glEnd();}glFlush();}voidinit(void){//设置背景颜色glClearColor(1.0,1.0,1.0,0.0);//初始化观察值glMatrixMode(GL_PROJECTION);//将矩阵模式设为投影glLoadIdentity();//对矩阵进行单位化glOrtho(108.0,120.0,30.0,38.0,-2.0,2.0);//构造平行投影矩阵,注意坐标的位置}intmain(intargc,char**argv)//主函数{char*filename="D:/HenanCounty.txt";//文件名与文件目录对应polys=ReadMapData(filename);//读定义的文件给ploysglutInit(&argc,argv);//初始化glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);//单存缓和RGBglutInitWindowPosition(100,100);//窗口位置glutInitWindowSize(450,450);//窗口大小glutCreateWindow("henancountry");//窗口标题init();glutDisplayFunc(display);//设置一个函数,当需要画图时,调用该函数glutMainLoop();//进行消息循环return0;}第五章、二维观察红蓝三角形#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);设置右视区glRotatef(90,0,0,1);关于z轴旋转triangle(v[0],v[1],v[2]);显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。四棱锥和立方体实体模型#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);//设置右视区glRotatef(90,0,0,1);//关于z轴旋转triangle(v[0],v[1],v[2]);//显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}第六章三维观察立方体透视投影#includeGLintwinWidth=600,winHeight=600;//设置初始化窗口大小/*观察坐标系参数设置*/GLfloatx0=0,y0=0,z0=5;//设置观察坐标系原点GLfloatxref=0.0,yref=0.0,zref=0.0;//设置观察坐标系参考点(视点)GLfloatVx=0.0,Vy=1.0,Vz=0.0;//设置观察坐标系向上向量(y轴)/*观察体(视见体)参数设置*/GLfloatxwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;//设置裁剪窗口坐标范围GLfloatdnear=1.5,dfar=20;//设置远、近裁剪面深度范围voidinit(void){glClearColor(1,1,1,0);//glShadeModel(GL_FLAT);//xz/*①观察变换*//*视点变换*/gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);//指定三维观察参数/*模型变换*/glMatrixMode(GL_MODELVIEW);glScalef(2,2,2);//比例放缩变换扩大两倍glRotatef(45,0,1,1);//旋转变换/*②投影变换*/glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);//透视投影,设置透视视景体}voiddisplayFcn(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,1,0);//设置前景色为绿色glutSolidCube(1);//绘制单位立方体实体glColor3f(0,0,0);//设置前景色为黑色glLineWidth(2);//设置线宽glutWireCube(1);//绘制单位立方体线框glFlush();}voidreshapeFcn(GLintnewWidth,GLintnewHeight){/*③视口变换*/glViewport(0,0,newWidth,newHeight);//定义视口大小winWidth=newWidth;winHeight=newHeight;}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("单位立方体的透视投影");init();glutDisplayFunc(displayFcn);glutReshapeFunc(reshapeFcn);glutMainLoop();} 第七章、BeZier曲线绘制#includeGLfloatctrlpoints[4][3]={{-4,-4,0},{-2,3,0},{2,4.5,0},{3,-3,0}};voidinit(void){glClearColor(1,1,1,0);glShadeModel(GL_FLAT);//下行用于定义曲线函数glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints[0][0]);glEnable(GL_MAP1_VERTEX_3);//将当前曲线激活}voiddisplay(void){inti;glClear(GL_COLOR_BUFFER_BIT);//下面用求值器按20等分计算BeZier曲线上的点glColor3f(0,0,0);glLineWidth(2);glBegin(GL_LINE_STRIP);for(i=0;i<20;i++)glEvalCoord1f((GLfloat)i/20);glEnd();glLineWidth(1);glColor3f(0,0,1);glBegin(GL_LINE_STRIP);for(i=0;i<4;i++)glVertex3fv(&ctrlpoints[i][0]);glEnd();glFlush();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-5,5,-5*(GLfloat)h/(GLfloat)w,5*(GLfloat)h/(GLfloat)w,-5,5);elseglOrtho(-5*(GLfloat)w/(GLfloat)h,5*(GLfloat)w/(GLfloat)h,-5,5,-5,5);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return0;}2.BeZier曲线绘制#includeGLfloatctrlpoints[4][4][3]={{{-3,-0,4},{-2,0,2},{-1,0,0},{0,0,2}},{{-3,1,1},{-2,1,3},{-1,1,6},{0,1,-1}},{{-3,2,4},{-2,2,0},{-1,2,3},{0,2,4}},{{-3,3,0},{-2,3,0},{-1,3,0},{0,3,0}}};voiddisplay(void){inti,j;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0,0,0);glPushMatrix();glRotatef(85,1,1,1);for(j=0;j<=20;j++){glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)i/20,(GLfloat)j/20);glEnd();glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)j/20,(GLfloat)i/20);glEnd();}glPopMatrix();glFlush();}voidinit(void){glClearColor(1,1,1,1);glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);glEnable(GL_MAP2_VERTEX_3);glOrtho(-5,5,-5,5,-5,5);}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutMainLoop();return0;}最后一次作业:茶壶绘制#include#includevoidinit(void){/*设置材质的镜面反射光的反射系数*/GLfloatmat_specular[]={1.0,1.0,1.0,1.0};/*设置材质的镜面反射系数*/GLfloatmat_shininess[]={50.0};/*设置光源位置的值*/GLfloatlight_position[]={1.0,1.0,1.0,0.0};/*设置漫反射光和折射光分量强度的值*/GLfloatwhite_light[]={1.0,1.0,1.0,1.0};/*设置点光源的颜色*/GLfloatLight_Model_Ambient[]={0.2,0.2,0.2,1.0};/*清除窗口的颜色,显示为黑色*/glClearColor(0.0,0.0,0.0,0.0);/*设置阴影模型*/glShadeModel(GL_SMOOTH);/*设置表面特性函数,指定物体正面被赋予制定材质,设置镜面反射光的反射系数和镜面反射系数*/glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //建立光源/*设置一个OpenGL光源,设置光源位置,light_position为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_POSITION,light_position);/*设置光源的设置漫反射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);/*设置光源的设置直射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);/*设置点光源的颜色*/glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient); /*启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/glEnable(GL_LIGHTING);/*启用GL_LIGHT0这个光源*/glEnable(GL_LIGHT0);/*启用更新深度缓存区功能*/glEnable(GL_DEPTH_TEST);}voiddisplay(void){/*清除颜色缓存和深度缓存*/glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//glutSolidSpehere(1.0,20,16);/*显示茶壶*/glutSolidTeapot(0.5);/*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/glFlush();}voidreshape(intw,inth){/*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/glViewport(0,0,(GLsizei)w,(GLsizei)h);/*指定GL_PROJECTION矩阵为当前矩阵*/glMatrixMode(GL_PROJECTION);/*重置当前矩阵为单位矩阵*/glLoadIdentity();/*for循环,glOrtho创建一个平行的视景体*/if(w<=h){glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);}elseglOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);/*指定GL_MODELVIEW矩阵为当前矩阵*/glMatrix
vectorPoints=polys[i]->Points;
glBegin(GL_LINE_LOOP);//使用闭合曲线方式绘制各省边界
for(intj=0;j{glVertex3f(Points[j].longitude,Points[j].latitude,0.0);}glEnd();}glFlush();}voidinit(void){//设置背景颜色glClearColor(1.0,1.0,1.0,0.0);//初始化观察值glMatrixMode(GL_PROJECTION);//将矩阵模式设为投影glLoadIdentity();//对矩阵进行单位化glOrtho(108.0,120.0,30.0,38.0,-2.0,2.0);//构造平行投影矩阵,注意坐标的位置}intmain(intargc,char**argv)//主函数{char*filename="D:/HenanCounty.txt";//文件名与文件目录对应polys=ReadMapData(filename);//读定义的文件给ploysglutInit(&argc,argv);//初始化glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);//单存缓和RGBglutInitWindowPosition(100,100);//窗口位置glutInitWindowSize(450,450);//窗口大小glutCreateWindow("henancountry");//窗口标题init();glutDisplayFunc(display);//设置一个函数,当需要画图时,调用该函数glutMainLoop();//进行消息循环return0;}第五章、二维观察红蓝三角形#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);设置右视区glRotatef(90,0,0,1);关于z轴旋转triangle(v[0],v[1],v[2]);显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。四棱锥和立方体实体模型#includetypedefGLfloatpoint2d[2];//点数据类型voidtriangle(point2da,point2db,point2dc)//显示一个三角形{glBegin(GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();}voiddisplay(void){point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口glColor3f(0,0,1);//设置填充颜色为蓝色glViewport(0,0,300,400);//设置左视区triangle(v[0],v[1],v[2]);//三个顶点glColor3f(1,0,0);//设置填充颜色为红色glViewport(300,0,300,400);//设置右视区glRotatef(90,0,0,1);//关于z轴旋转triangle(v[0],v[1],v[2]);//显示蓝色三角形glFlush();}voidinit(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);//蓝色}voidmain(intargc,char**argv)//显示窗体{glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow("Triangle");glutDisplayFunc(display);init();glutMainLoop();}第六章三维观察立方体透视投影#includeGLintwinWidth=600,winHeight=600;//设置初始化窗口大小/*观察坐标系参数设置*/GLfloatx0=0,y0=0,z0=5;//设置观察坐标系原点GLfloatxref=0.0,yref=0.0,zref=0.0;//设置观察坐标系参考点(视点)GLfloatVx=0.0,Vy=1.0,Vz=0.0;//设置观察坐标系向上向量(y轴)/*观察体(视见体)参数设置*/GLfloatxwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;//设置裁剪窗口坐标范围GLfloatdnear=1.5,dfar=20;//设置远、近裁剪面深度范围voidinit(void){glClearColor(1,1,1,0);//glShadeModel(GL_FLAT);//xz/*①观察变换*//*视点变换*/gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);//指定三维观察参数/*模型变换*/glMatrixMode(GL_MODELVIEW);glScalef(2,2,2);//比例放缩变换扩大两倍glRotatef(45,0,1,1);//旋转变换/*②投影变换*/glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);//透视投影,设置透视视景体}voiddisplayFcn(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,1,0);//设置前景色为绿色glutSolidCube(1);//绘制单位立方体实体glColor3f(0,0,0);//设置前景色为黑色glLineWidth(2);//设置线宽glutWireCube(1);//绘制单位立方体线框glFlush();}voidreshapeFcn(GLintnewWidth,GLintnewHeight){/*③视口变换*/glViewport(0,0,newWidth,newHeight);//定义视口大小winWidth=newWidth;winHeight=newHeight;}voidmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(winWidth,winHeight);glutCreateWindow("单位立方体的透视投影");init();glutDisplayFunc(displayFcn);glutReshapeFunc(reshapeFcn);glutMainLoop();} 第七章、BeZier曲线绘制#includeGLfloatctrlpoints[4][3]={{-4,-4,0},{-2,3,0},{2,4.5,0},{3,-3,0}};voidinit(void){glClearColor(1,1,1,0);glShadeModel(GL_FLAT);//下行用于定义曲线函数glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints[0][0]);glEnable(GL_MAP1_VERTEX_3);//将当前曲线激活}voiddisplay(void){inti;glClear(GL_COLOR_BUFFER_BIT);//下面用求值器按20等分计算BeZier曲线上的点glColor3f(0,0,0);glLineWidth(2);glBegin(GL_LINE_STRIP);for(i=0;i<20;i++)glEvalCoord1f((GLfloat)i/20);glEnd();glLineWidth(1);glColor3f(0,0,1);glBegin(GL_LINE_STRIP);for(i=0;i<4;i++)glVertex3fv(&ctrlpoints[i][0]);glEnd();glFlush();}voidreshape(intw,inth){glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-5,5,-5*(GLfloat)h/(GLfloat)w,5*(GLfloat)h/(GLfloat)w,-5,5);elseglOrtho(-5*(GLfloat)w/(GLfloat)h,5*(GLfloat)w/(GLfloat)h,-5,5,-5,5);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return0;}2.BeZier曲线绘制#includeGLfloatctrlpoints[4][4][3]={{{-3,-0,4},{-2,0,2},{-1,0,0},{0,0,2}},{{-3,1,1},{-2,1,3},{-1,1,6},{0,1,-1}},{{-3,2,4},{-2,2,0},{-1,2,3},{0,2,4}},{{-3,3,0},{-2,3,0},{-1,3,0},{0,3,0}}};voiddisplay(void){inti,j;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0,0,0);glPushMatrix();glRotatef(85,1,1,1);for(j=0;j<=20;j++){glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)i/20,(GLfloat)j/20);glEnd();glBegin(GL_LINE_STRIP);for(i=0;i<=20;i++)glEvalCoord2f((GLfloat)j/20,(GLfloat)i/20);glEnd();}glPopMatrix();glFlush();}voidinit(void){glClearColor(1,1,1,1);glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);glEnable(GL_MAP2_VERTEX_3);glOrtho(-5,5,-5,5,-5,5);}intmain(intargc,char**argv){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutMainLoop();return0;}最后一次作业:茶壶绘制#include#includevoidinit(void){/*设置材质的镜面反射光的反射系数*/GLfloatmat_specular[]={1.0,1.0,1.0,1.0};/*设置材质的镜面反射系数*/GLfloatmat_shininess[]={50.0};/*设置光源位置的值*/GLfloatlight_position[]={1.0,1.0,1.0,0.0};/*设置漫反射光和折射光分量强度的值*/GLfloatwhite_light[]={1.0,1.0,1.0,1.0};/*设置点光源的颜色*/GLfloatLight_Model_Ambient[]={0.2,0.2,0.2,1.0};/*清除窗口的颜色,显示为黑色*/glClearColor(0.0,0.0,0.0,0.0);/*设置阴影模型*/glShadeModel(GL_SMOOTH);/*设置表面特性函数,指定物体正面被赋予制定材质,设置镜面反射光的反射系数和镜面反射系数*/glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //建立光源/*设置一个OpenGL光源,设置光源位置,light_position为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_POSITION,light_position);/*设置光源的设置漫反射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);/*设置光源的设置直射光分量强度,white_light为它的属性值,这是先前设置的量*/glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);/*设置点光源的颜色*/glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient); /*启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/glEnable(GL_LIGHTING);/*启用GL_LIGHT0这个光源*/glEnable(GL_LIGHT0);/*启用更新深度缓存区功能*/glEnable(GL_DEPTH_TEST);}voiddisplay(void){/*清除颜色缓存和深度缓存*/glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//glutSolidSpehere(1.0,20,16);/*显示茶壶*/glutSolidTeapot(0.5);/*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/glFlush();}voidreshape(intw,inth){/*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/glViewport(0,0,(GLsizei)w,(GLsizei)h);/*指定GL_PROJECTION矩阵为当前矩阵*/glMatrixMode(GL_PROJECTION);/*重置当前矩阵为单位矩阵*/glLoadIdentity();/*for循环,glOrtho创建一个平行的视景体*/if(w<=h){glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);}elseglOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);/*指定GL_MODELVIEW矩阵为当前矩阵*/glMatrix
glVertex3f(Points[j].longitude,Points[j].latitude,0.0);
glEnd();
glFlush();
voidinit(void)
//设置背景颜色
glClearColor(1.0,1.0,1.0,0.0);
//初始化观察值
glMatrixMode(GL_PROJECTION);//将矩阵模式设为投影
glLoadIdentity();//对矩阵进行单位化
glOrtho(108.0,120.0,30.0,38.0,-2.0,2.0);
//构造平行投影矩阵,注意坐标的位置
intmain(intargc,char**argv)//主函数
char*filename="D:
/HenanCounty.txt";//文件名与文件目录对应
polys=ReadMapData(filename);//读定义的文件给ploys
glutInit(&argc,argv);//初始化
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);//单存缓和RGB
glutInitWindowPosition(100,100);//窗口位置
glutInitWindowSize(450,450);//窗口大小
glutCreateWindow("henancountry");//窗口标题
init();
glutDisplayFunc(display);//设置一个函数,当需要画图时,调用该函数
glutMainLoop();//进行消息循环
return0;
第五章、二维观察
红蓝三角形
typedefGLfloatpoint2d[2];//点数据类型
voidtriangle(point2da,point2db,point2dc)//显示一个三角形
glBegin(GL_TRIANGLES);
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
point2dv[3]={{-1,-0.58},{1,-0.58},{0,1.15}};//设置初始三角形顶点
glClear(GL_COLOR_BUFFER_BIT);//清空显示窗口
glColor3f(0,0,1);//设置填充颜色为蓝色
glViewport(0,0,300,400);//设置左视区
triangle(v[0],v[1],v[2]);//三个顶点
glColor3f(1,0,0);//设置填充颜色为红色
glViewport(300,0,300,400);设置右视区
glRotatef(90,0,0,1);关于z轴旋转
triangle(v[0],v[1],v[2]);显示蓝色三角形
voidinit()
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-2,2,-2,2);
glMatrixMode(GL_MODELVIEW);
glClearColor(1,1,1,1);//蓝色
voidmain(intargc,char**argv)//显示窗体
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(600,400);
glutCreateWindow("Triangle");
glutDisplayFunc(display);
glutMainLoop();
这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。
四棱锥和立方体实体模型
glViewport(300,0,300,400);//设置右视区
glRotatef(90,0,0,1);//关于z轴旋转
triangle(v[0],v[1],v[2]);//显示蓝色三角形
第六章三维观察
立方体透视投影
GLintwinWidth=600,winHeight=600;//设置初始化窗口大小
/*观察坐标系参数设置*/
GLfloatx0=0,y0=0,z0=5;//设置观察坐标系原点
GLfloatxref=0.0,yref=0.0,zref=0.0;//设置观察坐标系参考点(视点)
GLfloatVx=0.0,Vy=1.0,Vz=0.0;//设置观察坐标系向上向量(y轴)
/*观察体(视见体)参数设置*/
GLfloatxwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;//设置裁剪窗口坐标范围
GLfloatdnear=1.5,dfar=20;//设置远、近裁剪面深度范围
glClearColor(1,1,1,0);
//glShadeModel(GL_FLAT);//xz
/*①观察变换*/
/*视点变换*/
gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);//指定三维观察参数
/*模型变换*/
glScalef(2,2,2);//比例放缩变换扩大两倍
glRotatef(45,0,1,1);//旋转变换
/*②投影变换*/
glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);//透视投影,设置透视视景体
voiddisplayFcn(void)
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0,1,0);//设置前景色为绿色
glutSolidCube
(1);//绘制单位立方体实体
glColor3f(0,0,0);//设置前景色为黑色
glLineWidth
(2);//设置线宽
glutWireCube
(1);//绘制单位立方体线框
voidreshapeFcn(GLintnewWidth,GLintnewHeight)
/*③视口变换*/
glViewport(0,0,newWidth,newHeight);//定义视口大小
winWidth=newWidth;
winHeight=newHeight;
voidmain(intargc,char**argv)
glutInitWindowPosition(100,100);
glutInitWindowSize(winWidth,winHeight);
glutCreateWindow("单位立方体的透视投影");
glutDisplayFunc(displayFcn);
glutReshapeFunc(reshapeFcn);
第七章、BeZier曲线绘制
GLfloatctrlpoints[4][3]={{-4,-4,0},{-2,3,0},{2,4.5,0},{3,-3,0}};
glShadeModel(GL_FLAT);
//下行用于定义曲线函数
glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3);//将当前曲线激活
inti;
//下面用求值器按20等分计算BeZier曲线上的点
glColor3f(0,0,0);
(2);
glBegin(GL_LINE_STRIP);
for(i=0;i<20;i++)
glEvalCoord1f((GLfloat)i/20);
(1);
glColor3f(0,0,1);
for(i=0;i<4;i++)
glVertex3fv(&ctrlpoints[i][0]);
voidreshape(intw,inth)
glViewport(0,0,(GLsizei)w,(GLsizei)h);
if(w<=h)
glOrtho(-5,5,-5*(GLfloat)h/(GLfloat)w,5*(GLfloat)h/(GLfloat)w,-5,5);
else
glOrtho(-5*(GLfloat)w/(GLfloat)h,5*(GLfloat)w/(GLfloat)h,-5,5,-5,5);
intmain(intargc,char**argv)
glutInitWindowSize(500,500);
glutCreateWindow(argv[0]);
glutReshapeFunc(reshape);
2.BeZier曲线绘制
GLfloatctrlpoints[4][4][3]={{{-3,-0,4},{-2,0,2},{-1,0,0},{0,0,2}},{{-3,1,1},{-2,1,3},{-1,1,6},{0,1,-1}},
{{-3,2,4},{-2,2,0},{-1,2,3},{0,2,4}},{{-3,3,0},{-2,3,0},{-1,3,0},{0,3,0}}};
inti,j;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(85,1,1,1);
for(j=0;j<=20;j++)
for(i=0;i<=20;i++)
glEvalCoord2f((GLfloat)i/20,(GLfloat)j/20);
glEvalCoord2f((GLfloat)j/20,(GLfloat)i/20);
glPopMatrix();
glClearColor(1,1,1,1);
glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);
glOrtho(-5,5,-5,5,-5,5);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
最后一次作业:
茶壶绘制
/*设置材质的镜面反射光的反射系数*/
GLfloatmat_specular[]={1.0,1.0,1.0,1.0};
/*设置材质的镜面反射系数*/
GLfloatmat_shininess[]={50.0};
/*设置光源位置的值*/
GLfloatlight_position[]={1.0,1.0,1.0,0.0};
/*设置漫反射光和折射光分量强度的值*/
GLfloatwhite_light[]={1.0,1.0,1.0,1.0};
/*设置点光源的颜色*/
GLfloatLight_Model_Ambient[]={0.2,0.2,0.2,1.0};
/*清除窗口的颜色,显示为黑色*/
glClearColor(0.0,0.0,0.0,0.0);
/*设置阴影模型*/
glShadeModel(GL_SMOOTH);
/*设置表面特性函数,指定物体正面被赋予制定材质,设置镜面反射光的反射系数和镜面反射系数*/
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
//建立光源
/*设置一个OpenGL光源,设置光源位置,light_position为它的属性值,
这是先前设置的量*/
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
/*设置光源的设置漫反射光分量强度,white_light为它的属性值,这是先前设置的量*/
glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light);
/*设置光源的设置直射光分量强度,white_light为它的属性值,这是先前设置的量*/
glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient);
/*启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/
glEnable(GL_LIGHTING);
/*启用GL_LIGHT0这个光源*/
glEnable(GL_LIGHT0);
/*启用更新深度缓存区功能*/
glEnable(GL_DEPTH_TEST);
/*清除颜色缓存和深度缓存*/
//glutSolidSpehere(1.0,20,16);
/*显示茶壶*/
glutSolidTeapot(0.5);
/*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/
/*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/
/*指定GL_PROJECTION矩阵为当前矩阵*/
/*重置当前矩阵为单位矩阵*/
/*for循环,glOrtho创建一个平行的视景体*/
glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);
glOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);
/*指定GL_MODELVIEW矩阵为当前矩阵*/
glMatrix
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1