OpenGL所有作业简述.doc_第1页
OpenGL所有作业简述.doc_第2页
OpenGL所有作业简述.doc_第3页
OpenGL所有作业简述.doc_第4页
OpenGL所有作业简述.doc_第5页
免费预览已结束,剩余15页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一次绘制简单图像直线、圆.第二次基于OpenGL的地图绘制 #include头文件#include#include#includeusing namespace std ;class MapPoint 自己定义的类public :double longitude ;/经度double latitude ;/纬度;class Polygon 定义多边形的函数,起容器的作用public :vector Points;/多边形的顶点序列;vector polys ;/多边形集合vector ReadMapData (char *filename )/文件名int PointCount ;/计算点的个数vector Polygons;ifstream fs (filename );/寻找filename文件是否为空while (fs .eof ()!=true ) Polygon* poly =new Polygon;/定点个数fsPointCount;/定点个数赋值给fs读入数据cout PointCountendl ;for (int i=0;i p .longitudep .latitude;poly -Points .push_back (p);Polygons.push_back (poly );return Polygons;void display (void )glClear (GL_COLOR_BUFFER_BIT);/用蓝色绘制各省边界glColor3f (0.0,0.0,1.0);/设置正面为填充模式glPolygonMode (GL_BACK,GL_LINE );for (int i=0;i polys .size ();i +)vector Points=polys i-Points ;绘图函数glBegin (GL_LINE_LOOP );/使用闭合曲线方式绘制各省边界for (int j =0;j Points.size ();j +)glVertex3f (Pointsj.longitude ,Pointsj.latitude ,0.0);glEnd ();glFlush ();void init (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);/构造平行投影矩阵,注意坐标的位置int main(int argc,char*argv)/主函数char *filename=F:/HenanCounty.txt;/文件名与文件目录对应polys=ReadMapData(filename);/读定义的文件给ploysglutInit(&argc,argv);/初始化初始化、创建窗口(标题、位置、大小)、 指示显示窗口的内容;glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);/单存缓和RGBglutInitWindowPosition(100,100);/窗口位置glutInitWindowSize(450,450); /窗口大小 glutCreateWindow(hello); /窗口标题init();glutDisplayFunc(display);/设置一个函数,当需要画图时,调用该函数glutMainLoop();/进行消息循环return 0;第三次OpenGL几何变换编程 #include#include#includeGLsizei winWidth=600,winHeight=600;/初始化窗口大小对称坐标系GLfloat ywcMin=-200.0,xwcMax=400.0;/设置世界坐标系的显示范围GLfloat xwcMin=-200.0,ywcMax=400.0;void init(void)/初始化glClearColor(1.0,1.0,1.0,0.0);/设置显示窗口的背景颜色为白色class wcpt3D自己定义的类public:GLfloat x, y, z;void rotate3D(wcpt3D P1,wcpt3D p2,GLfloat thetaDegrees)三维旋转变换,绕任意角度设置旋转轴的矢量float vx =(p2.x-P1.x);float vy =(p2.y-P1.y);float vz =(p2.z-P1.z);通过平移旋转平移复合变化序列完成绕任意轴的旋转glTranslated(P1.x,p2.y,P1.z);/移动p1到原始位置glRotatef(thetaDegrees,vx,vy,vz);/通过坐标原点的坐标旋转glTranslated(-P1.x,-P1.y,-P1.z);/移动p1到原点位置三维比例缩放变换绕固定 点void scaled3D (GLfloat sx,GLfloat sy,GLfloat sz,wcpt3D fixedPt)glTranslated(fixedPt.x,fixedPt.y,fixedPt.z);/反平移到原始位置glScalef(sx,sy,sz); /基于原点的比例缩放变换glTranslated(-fixedPt.x,-fixedPt.y,-fixedPt.z); /移动固定点到坐标原点void glutDisplayFcn(void)wcpt3D centroidPt,R_p1,R_p2;centroidPt.x=50;设置中心点位置centroidPt.y=100;centroidPt.z=0;R_p1=centroidPt;R_p2.x=50;R_p2.y=100;R_p2.z=1;wcpt3D p1,p2,fixedPt;p1=R_p1;显示函数p2=R_p2;设置几何变换参数fixedPt=centroidPt;GLfloat tx=0.0,ty=100.0,tz=0;GLfloat sx=0.5,sy=1.0,sz=0.5;GLdouble thetaDegraees=90;glClear(GL_COLOR_BUFFER_BIT);/清空显示窗口glMatrixMode(GL_MODELVIEW);glLoadIdentity();/清空变换矩阵为单位矩阵,恢复原始坐标系环境glColor3f(0.0,0.0,1.0);/设置前景色为蓝色glRecti(50,100,200,150);/变换前显示蓝色矩形glTranslatef(tx,ty,tz);/平移变换执行几何变换scaled3D(sx,sy,sz,fixedPt);/比例缩放变换rotate3D(p1,p2,thetaDegraees);/旋转变换显示变换后几何对象glColor3f(1.0,0.0,0.0);/重新设置前景色为红色glRecti(50,100,200,150);/变换后显示红色矩阵glFinish();void winReshapeFcn(GLint newWidth,GLint newHeight)glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(xwcMin,xwcMax,ywcMin,ywcMax);glClear(GL_COLOR_BUFFER_BIT);void main(int argc,char*argv)/带命令行参数的main函数glutInit(&argc,argv);/ 对GLUT进行初始化主函数glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);/ 设置显示方式glutInitWindowPosition(50,50);/ 窗口在屏幕中的位置glutInitWindowSize(winWidth,winHeight);/ 窗口的大小glutCreateWindow(三维几何变换实例-OpenGL版符合变换);/根据前面设置的信息创建窗口init();glutDisplayFunc(glutDisplayFcn);/ 设置一个函数,当需要进行画图时,这个函数就会被调用glutReshapeFunc(winReshapeFcn);/进行一个消息循环glutMainLoop();第四次二维观察-红蓝三角形#include typedef GLfloat point2d2;void triangle(point2d a,point2d b,point2d c)glBegin(GL_TRIANGLES);定义三角形函数glVertex2fv(a); glVertex2fv(b);glVertex2fv(c);glEnd();void display(void)point2d v3=-1.0,-0.58,1.0,-0.58,0.0,1.15;glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.0,1.0);绘图函数glViewport(0,0,300,400); triangle(v0,v1,v2);glColor3f(1.0,0.0,0.0);glViewport(300,0,300,400);glRotatef(90.0,0.0,0.0,1.0); 视区改变 triangle(v0,v1,v2); glFlush();void init()glMatrixMode(GL_PROJECTION);初始化函数glLoadIdentity();gluOrtho2D(-2.0,2.0,-2.0,2.0);glMatrixMode(GL_MODELVIEW);glClearColor(1.0,1.0,1.0,1.0);void main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);主函数,显示窗口glutInitWindowSize(600,400); glutCreateWindow(Triangle); glutDisplayFunc(display);init();glutMainLoop();第五次立方体透视投影 #includeGLint winWidth=600,winHeight=600;/初始化窗口大小GLfloat x0=0.0,y0=0.0,z0=5.0;/坐标原点观察坐标系的参数设置GLfloat xref=0.0,yref=0.0,zref=0.0;/参考点GLfloat Vx=0.0,Vy=1.0,Vz=0.0;/向上矢量(Y轴)GLfloat xwMin=-1.0,ywMin=-1.0,xwMax=1.0,ywMax=1.0;GLfloat dnear=1.5,dfar=20.0;void init (void)glClearColor(1.0,1.0,1.0,0.0);gluLookAt(x0,y0,z0,xref,yref,zref,Vx,Vy,Vz);初始化函数glMatrixMode(GL_MODELVIEW);glScalef(2.0,2.0,2.0);glRotatef(45.0,0.0,1.0,1.0);glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);void displayFcn(void)glClear (GL_COLOR_BUFFER_BIT);显示函数glColor3f(0.0,1.0,0.0);glutSolidCube(1.0);glColor3f(0.0,0.0,0.0);glLineWidth(2.0);glutWireCube(1.0);glFlush();void reshapeFcn(GLint newWidth,GLint newHeight)视口变换函数glViewport(0,0,newWidth,newHeight);winWidth=newWidth;winHeight=newHeight;void main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowPosition(200,200);主函数,显示窗口信息glutInitWindowSize(winWidth,winHeight); glutCreateWindow(单位立方体的透视投影); init();glutDisplayFunc(displayFcn);glutReshapeFunc(reshapeFcn);glutMainLoop();第六次 四棱锥和立方体实体模型#include#include#includeusing namespace std;全局变量定义float rtri;float rquad;定点坐标GLfloat points053=0,1,0,-1,-1,1,1,-1,1,1,-1,-1,-1,-1,-1;GLfloatpoints183=1,1,-1,-1,1,-1,-1,1,1,1,1,1,1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1;面颜色GLfloat Colors043=1,0,0.5,0.5,1,0.5,0.5,0,1,1,1,0;GLfloat Colors163=0,1,0,1,0.5,0,1,0,0,1,1,0,0,0,1,1,0,1;顶点序列int vertice043=0,1,2,0,2,3,0,3,4,0,4,1;int vertice164=0,1,2,3,4,5,6,7,3,2,5,4,7,6,1,0,2,1,6,5,0,3,4,7;void InitGL(GLvoid)glShadeModel(GL_SMOOTH);/阴影模型glClearColor(1.0f,1.0f,1.0f,1.0f);glClearDepth(1.0f);/清楚缓存glEnable(GL_DEPTH_TEST);/开启深度缓存glDepthFunc(GL_LEQUAL);glEnable(GL_COLOR_MATERIAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);/最佳效果校正void CreatePyramid()glBegin (GL_TRIANGLES);/绘线,每三个点连成一个多边形构建三角形函数for (int i=0;i4;i+)glColor3fv(Colors0i);for (int j=0;j3;j+)int VtxId=vertice0ij;/读点序列glVertex3fv(points0VtxId);glEnd();glBegin (GL_QUADS);构底面建glColor3f(1.0f,1.0f,1.0f);for(int i=1;i5;i+)glVertex3fv(points0i);glEnd();void CreateCube()glBegin(GL_QUADS);for(int i=0;i6;i+)构建立方体glColor3fv(Colors1i);for(int j=0;j4;j+) int VtxId=vertice1ij; glVertex3fv(points1VtxId);glEnd();void display(void)glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();glPushMatrix();glTranslatef(-1.5f,0.0f,-6.0f);glRotatef(rtri,0.0f,1.0f,0.0f);CreatePyramid();glLoadIdentity();glTranslatef(1.5f,0.0f,-6.0f);glRotatef(rquad,1.0f,0.0f,0.0f);绘图函数CreateCube();glPopMatrix();rtri+=0.2f;rquad-=0.15f;glutSwapBuffers();void reshape(int width,int height)if (height=0)height =1;glViewport (0,0,width,height);glMatrixMode(GL_PROJECTION);gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();void main(int argc,char*argv)绘制窗口函数glutInit (&argc,argv);glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);glutInitWindowSize(800,400);glutCreateWindow(PYramid and cube);InitGL();glutDisplayFunc(display);glutReshapeFunc(reshape);glutIdleFunc(display);glutMainLoop();第七次 Bezier曲面曲线绘制#include GLfloat ctrlpoints43=-4.0,-4.0,0.0,-2.0,3.0,0.0,2.0,4.5,0.0,3.0,-3.0,0.0;/一维求值器void init (void)glClearColor(1.0,1.0,1.0,0.0);glShadeModel(GL_FLAT);glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,4,&ctrlpoints00);/定义曲线函数glEnable(GL_MAP1_VERTEX_3);/曲线函数激活void display(void)int i;glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.0,0.0);glLineWidth(2);glBegin(GL_LINE_STRIP);绘制曲线函数for(i=0;i20;i+)glEvalCoord1f(GLfloat) i/20.0);glEnd();glLineWidth(1);glColor3f(0.0,0.0,1.0);glBegin(GL_LINE_STRIP);for(i=0;i4;i+)glVertex3fv(&ctrlpointsi0);glEnd();glFlush();void reshape(int w,int h)/函数指针glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w=h)glOrtho(-5.0,5.0,-5.0*(GLfloat)h/(GLfloat)w,5.0*(GLfloat)h/(GLfloat)w,-5.0,5.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(500,500);glutInitWindowPosition(100,100);设置绘图函数显示窗口信息glutCreateWindow(argv0);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;#includeGLfloat ctrlpoints443=-3,0,4.0,-2,0,2.0,-1,0,0.0,0,0,2.0,-3,1,1.0,-2,1,3.0,-1,1,6.0,0,1,-1.0,-3,2,4.0,-2,2,0.0,-1,2,3.0,0,2,4.0,-3,3,0.0,-2,3,0.0,-1,3,0.0,0,3,0.0;/二维求值器void display(void)int i,j;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0.0,0.0,0.0);/图像颜色glPushMatrix();/压入当前矩阵堆栈,入栈glRotatef(85.0,1.0,1.0,1.0);/指定旋转for(j=0;j=20;j+)绘制曲面函数glBegin(GL_LINE_STRIP);/绘制从第一个顶点到最后一个顶点依次相连的一组线段for(i=0;i=20;i+)glEvalCoord2f(GLfloat)i/20.0,(GLfloat)j/20.0);/启动二维计算器glEnd(); glBegin(GL_LINE_STRIP);/在三维空间里生成Beczr曲线for(i=0;i=20;i+)glEvalCoord2f(GLfloat)j/20.0,(GLfloat)i/20.0);glEnd();glPopMatrix();/出栈glFlush();void init(void)glClearColor(1.0,1.0,1.0,0.0);glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12,4,&ctrlpoints000);glEnable(GL_MAP2_VERTEX_3);glOrtho(-5.0,5.0,-5.0,5.0,-5.0,5.0);/编程验证几何变换(平移、缩放和旋转)的后指定-先应用的特点int main(int argc,char*argv)glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);绘图函数显示的窗口信息设置glutInitWindowSize(500,500);glutInitWindowPosition(100,100);glutCreateWindow(argv0);init();glutDisplayFunc(display);glutMainLoop();return 0;第八次OpenGL水壶的光照设计#include #includevoid init(void) GLfloat mat_specular=1.0,1.0,1.0,1.0;/材料镜面反射颜色GLfloat mat_shininess=50.0;/镜面指数(光亮度) GLfloat light_position=1.0,1.0,1.0,0.0;/最后一个参数为0表示该光源是directional的。GLfloat white_light=1.0,1.0,1.0,1.0; GLfloat Light_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);glMat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论