计算机图形学黄欣2013212318_第1页
计算机图形学黄欣2013212318_第2页
计算机图形学黄欣2013212318_第3页
计算机图形学黄欣2013212318_第4页
计算机图形学黄欣2013212318_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、计算机图形学姓名:黄欣 学号:2013212318 日期:2015.12.271创建新项目1)点击文件-新建-项目2)选择Visual C+中的Win32控制台应用程序,修改文件名,最后点击确定即可 3)点击下一步4)勾选空项目,点击完成5)右键点击新建好的test1下的资源文件-添加-新建项6)选择C+文件,修改文件名即可2在创建的新项目中,写程序代码。第二次作业 地图绘制#include#include#include#includeusing namespace std ;class MapPoint public :double longitude ;/经度double latitud

2、e ;/纬度;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;/定点个数赋值给fscout PointCountendl ;for (

3、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 ;glBe

4、gin (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,3

5、8.0,-2.0,2.0);/构造平行投影矩阵,注意坐标的位置int main(int argc,char*argv)/主函数char *filename=D:/HenanCounty.txt;/文件名与文件目录对应polys=ReadMapData(filename);/读定义的文件给ploysglutInit(&argc,argv);/初始化glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);/单存缓和RGBglutInitWindowPosition(100,100);/窗口位置glutInitWindowSize(450,450); /窗口大小 glut

6、CreateWindow(henancountry); /窗口标题init();glutDisplayFunc(display);/设置一个函数,当需要画图时,调用该函数glutMainLoop();/进行消息循环return 0;第五章、二维观察红蓝三角形#includetypedef GLfloat point2d2;/点数据类型void triangle (point2d a,point2d b,point2d c)/显示一个三角形glBegin (GL_TRIANGLES);glVertex2fv(a);glVertex2fv(b);glVertex2fv(c);glEnd();voi

7、d display(void)point2d v3 = -1,-0.58,1,-0.58,0,1.15;/设置初始三角形顶点glClear(GL_COLOR_BUFFER_BIT);/清空显示窗口glColor3f(0,0,1);/设置填充颜色为蓝色glViewport(0,0,300,400);/设置左视区triangle (v0,v1,v2);/三个顶点glColor3f(1,0,0);/设置填充颜色为红色glViewport(300,0,300,400);设置右视区glRotatef(90,0,0,1);关于z轴旋转triangle (v0,v1,v2);显示蓝色三角形glFlush()

8、;void init()glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);/蓝色void main (int argc,char *argv)/显示窗体glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow(Triangle);glutDisplayFunc

9、(display);init();glutMainLoop();这次编程让我学会了画三角形,填充三角形颜色,还有旋转三角形。四棱锥和立方体实体模型#includetypedef 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.58,1,-0.58,0,1.15;/设置初

10、始三角形顶点glClear(GL_COLOR_BUFFER_BIT);/清空显示窗口glColor3f(0,0,1);/设置填充颜色为蓝色glViewport(0,0,300,400);/设置左视区triangle (v0,v1,v2);/三个顶点glColor3f(1,0,0);/设置填充颜色为红色glViewport(300,0,300,400);/设置右视区glRotatef(90,0,0,1);/关于z轴旋转triangle (v0,v1,v2);/显示蓝色三角形glFlush();void init()glMatrixMode(GL_PROJECTION);glLoadIdentit

11、y();gluOrtho2D(-2,2,-2,2);glMatrixMode(GL_MODELVIEW);glClearColor(1,1,1,1);/蓝色void main (int argc,char *argv)/显示窗体glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(600,400);glutCreateWindow(Triangle);glutDisplayFunc(display);init();glutMainLoop();第六章三维观察立方体透视投影#includ

12、eGLint winWidth = 600,winHeight = 600;/设置初始化窗口大小/*观察坐标系参数设置*/GLfloat x0 = 0,y0 = 0,z0=5;/ 设置观察坐标系原点 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;/设置裁剪窗

13、口坐标范围 GLfloat dnear = 1.5,dfar = 20;/设置远、近裁剪面深度范围void init(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_P

14、ROJECTION); glLoadIdentity();glFrustum(xwMin,xwMax,ywMin,ywMax,dnear,dfar);/透视投影,设置透视视景体void displayFcn(void)glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,1,0); /设置前景色为绿色glutSolidCube(1);/绘制单位立方体实体glColor3f(0,0,0);/ 设置前景色为黑色glLineWidth(2);/设置线宽glutWireCube(1);/绘制单位立方体线框 glFlush();void reshapeFcn (GLint n

15、ewWidth, 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(100,100);glutInitWindowSize(winWidth,winHeight)

16、;glutCreateWindow(单位立方体的透视投影);init();glutDisplayFunc(displayFcn);glutReshapeFunc(reshapeFcn);glutMainLoop();第七章、BeZier曲线绘制#includeGLfloat ctrlpoints 43 = -4,-4,0,-2,3,0,2,4.5,0,3,-3,0;void init(void)glClearColor(1,1,1,0);glShadeModel(GL_FLAT);/下行用于定义曲线函数glMap1f(GL_MAP1_VERTEX_3,0,1,3,4,&ctrlpoints00

17、);glEnable(GL_MAP1_VERTEX_3);/将当前曲线激活void display(void)int i;glClear(GL_COLOR_BUFFER_BIT);/下面用求值器按20等分计算BeZier曲线上的点glColor3f(0,0,0);glLineWidth(2);glBegin(GL_LINE_STRIP);for (i = 0;i20;i+)glEvalCoord1f(GLfloat) i/20);glEnd();glLineWidth(1);glColor3f(0,0,1);glBegin(GL_LINE_STRIP);for (i = 0;i4;i+)glV

18、ertex3fv(&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,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)

19、;glMatrixMode(GL_MODELVIEW);glLoadIdentity();int main (int argc,char* argv) glutInit (&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv0);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop(

20、);return 0;2BeZier曲线绘制#includeGLfloat ctrlpoints 443 = -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;void display(void)int i,j;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glColor3f(0,0,0);glPushMatrix ();glRotatef(85,1,1,1);for (j

21、= 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();void init(void)glClearColor(1,1,1,1);glMap2f(GL_MAP2_VERTEX_3,0,1,3,4,0,1,12

22、,4,&ctrlpoints000);glEnable(GL_MAP2_VERTEX_3);glOrtho(-5,5,-5,5,-5,5);int main (int argc,char* argv) glutInit (&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB|GLUT_DEPTH); glutInitWindowPosition(100,100);glutInitWindowSize(500,500);glutCreateWindow(argv0);init();glutDisplayFunc(display);gl

23、utMainLoop();return 0;最后一次作业:茶壶绘制#include #include void 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;/* 设置漫反射光和折射光分量强度的值*/GLfloat white_light=1.0,1.0,1.0,1.0;/* 设置点光源的颜色*/GLfloat Lig

24、ht_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_posi

25、tion为它的属性值,这是先前设置的量*/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_AM

26、BIENT,Light_Model_Ambient);/* 启用光照模型,glEnable()是用于启用各种功能,与glDisabale()相对应*/glEnable(GL_LIGHTING); /*启用GL_LIGHT0这个光源*/glEnable(GL_LIGHT0); /*启用更新深度缓存区功能*/glEnable(GL_DEPTH_TEST);void display(void ) /*清除颜色缓存和深度缓存*/glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);/glutSolidSpehere(1.0,20,16); /*显示茶壶*/glutSolidTeapot(0.5); /*强制刷新缓冲,保证绘图的命令将被执行,而不是存储在缓冲区等待其他命令*/glFlush();void reshape(int w,int h ) /*视口函数,0,0是指定了窗口的左下角,以(0,0)为原点位置,指定已定义的w,h为视口矩形的宽度和高度*/glViewport(0,0,(GLsizei)w,(GL

温馨提示

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

评论

0/150

提交评论