文正学院图形学-实验四报告_第1页
文正学院图形学-实验四报告_第2页
文正学院图形学-实验四报告_第3页
文正学院图形学-实验四报告_第4页
文正学院图形学-实验四报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

苏州大学文正学院计算机图形学实验报告实验名称 马的设计 姓名 _许志杰_ 学号 _ 专业班级 _信计_实验日期 _2011_年_12_月_16_日 上课教师 _王平_实验成绩 _一、 实验的目的掌握VC+程序开发环境下,控制台框架下OpenGL基本程序结构;编程实现平面图形的平移、旋转和放缩变换。二、 实验的内容与步骤(可提供屏幕抓图)a. VC+ 6.0控制台程序框架下的OpenGL绘图环境的设置b. VC+ 6.0控制台对于实现马的程序的运行的操作c. 调用实验一中自己中文姓名,从而获取字符的坐标信息,利用这些坐标基于OpenGL中的线段或者多边形绘制自己的姓名于马的下方,并设计上学号。程序设计程序修改程序调试三、 实验结果与分析(可提供屏幕抓图)中文名字的调用上有待提高,试了很多次还是只能放在左脚下,对于马的运行上面的调用还是要细心。其他结果正常,无明显偏差。四、 实验的使用说明和测试的数据无五、 实验中的问题总结与心得体会1、中文名字的调用还不是很熟悉,对于名字位置的导入对于我来说还是有点难度的,还没能掌握;2、在学号的设计上,显得有点繁琐,虽然最后是出来了,但是可以看出写了很多的程序,显得十分累赘;3、调试测试方面有待提高,对于错误的把握方面不能做到一看就知道。六、 源代码清单:#include stdafx.h#include #include #include #include #include #include point.h#include trans.h#define PI 3.14159#define D 4float alpha=0;using namespace std;vector vertices;vectorvector triangles;vector _trans;int v_num,tri_num;void unify_data(void);void read_data(const string &filename);void myinit(void);void normal_key(unsigned char key, int x, int y);void special_key(int key, int x, int y);void reshape(int w, int h);void transformation();void read_data(const string &filename)ifstream fp;fp.open(filename.c_str();POINT tmp;int i0,i1,i2;vector ind;vertices.clear();triangles.clear();int i;fpv_numtri_num;for(i=0;itmp.xtmp.ytmp.z;vertices.push_back(tmp);unify_data();/couttri_numendl;for(i=0;ii0i1i2;ind.push_back(i0); ind.push_back(i1); ind.push_back(i2);triangles.push_back(ind);ind.clear();fp.close();coutreadyendl;void unify_data(void)double minx,maxx,miny,maxy,minz,maxz;minx=maxx=vertices0.x;miny=maxy=vertices0.y;minz=maxz=vertices0.z;int i;for(i=1;iverticesi.x) minx=verticesi.x;if(maxxverticesi.y) miny=verticesi.y;if(maxyverticesi.z) minz=verticesi.z;if(maxzverticesi.z) maxz=verticesi.z;double midx=0.5*(minx+maxx), midy=0.5*(miny+maxy), midz=0.5*(minz+maxz);for(i=0;iv_num;i+) verticesi.x-=midx;verticesi.y-=midy;verticesi.z-=midz;double widx=maxx-minx, widy=maxy-miny, widz=maxz-minz;if(widzwidy) widz=widy;if(widzwidx) widz=widx;for(i=0;iv_num;i+) verticesi/=widz;void myinit(void) glClearColor(1.0, 1.0, 1.0, 1.0); /* white background */ glColor3f(1.0, 0.0, 0.0); /* draw in red */ glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1, 1.0, -1.0, 1, -10, 10); glMatrixMode(GL_MODELVIEW); GLfloat diffuseMaterial4 = 0.5, 0.5, 0.5, 1.0 ; GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ; GLfloat light0_position = 1.0, 1.0, -1.0, 0.0 ; GLfloat light0_ambient = 0.5,0.5,0.5,1.0; /The following codes will be clear after we learn lighting glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMaterial); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialf(GL_FRONT, GL_SHININESS, 25.0); glLightfv(GL_LIGHT0, GL_POSITION, light0_position); glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); /Read data string filename(horse.tri); read_data(filename);void draw(void)int i;POINT tmp;glBegin(GL_TRIANGLES);for(i=0;itri_num;i+)tmp = verticestrianglesi0;glVertex3d(tmp.x,tmp.y,tmp.z);tmp = verticestrianglesi1;glVertex3d(tmp.x,tmp.y,tmp.z);tmp = verticestrianglesi2;glVertex3d(tmp.x,tmp.y,tmp.z);glEnd();void xuehao()glMatrixMode(GL_MODELVIEW);glLoadIdentity();glScaled(1,1,1);glBegin(GL_LINE_LOOP);glColor3f(1.0,0.5,1.0);glVertex2f(0.01,-0.9);glVertex2f(0.01,-0.8);glVertex2f(0.05,-0.8);glVertex2f(0.05,-0.9);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.11,-0.85);glVertex2f(0.07,-0.85);glVertex2f(0.07,-0.8);glVertex2f(0.11,-0.8);glVertex2f(0.11,-0.9);glVertex2f(0.07,-0.9);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.17,-0.9);glVertex2f(0.17,-0.8);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.19,-0.82);glVertex2f(0.19,-0.8);glVertex2f(0.23,-0.8);glVertex2f(0.23,-0.9);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.25,-0.8);glVertex2f(0.25,-0.85);glVertex2f(0.29,-0.85);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.29,-0.8);glVertex2f(0.29,-0.9);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.35,-0.8);glVertex2f(0.35,-0.9);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.37,-0.82);glVertex2f(0.37,-0.8);glVertex2f(0.41,-0.8);glVertex2f(0.41,-0.9);glEnd();glBegin(GL_LINE_LOOP);glColor3f(1.0,0.5,1.0);glVertex2f(0.43,-0.9);glVertex2f(0.43,-0.8);glVertex2f(0.47,-0.8);glVertex2f(0.47,-0.9);glEnd();glBegin(GL_LINE_LOOP);glColor3f(1.0,0.5,1.0);glVertex2f(0.49,-0.9);glVertex2f(0.49,-0.8);glVertex2f(0.53,-0.8);glVertex2f(0.53,-0.9);glEnd();glBegin(GL_LINE_STRIP);glColor3f(1.0,0.5,1.0);glVertex2f(0.59,-0.8);glVertex2f(0.59,-0.9);glEnd();/glFlush();void xingming()glMatrixMode(GL_MODELVIEW);glLoadIdentity();glScaled(0.0005,0.0005,0.0005);glTranslatef(100.5,-1500.12,100.12); glColor3f(1.0,0.0,1.0); glBegin(GL_POLYGON);/点 glVertex2i (10, 100); glVertex2i (20, 100);glVertex2i (10, 120);glVertex2i (15, 100);glVertex2i (20, 100); glVertex2i (10, 20);glVertex2i (10, 20);glVertex2i (18, 30);glVertex2i (25, 100);glVertex2i (41, 100);glVertex2i (30, 120);glVertex2i (24, 90);glVertex2i (25, 60);glVertex2i (41, 60);glVertex2i (33, 100);glVertex2i (33, 20);glVertex2i (45, 100);glVertex2i (61, 100);glVertex2i (53, 120);glVertex2i (53, 60);glVertex2i (49, 60);glVertex2i (57, 60);glVertex2i (45, 40);glVertex2i (43, 20);glVertex2i (47, 40);glVertex2i (47, 20);glVertex2i (47, 20);glVertex2i (59, 20);glVertex2i (59, 20);glVertex2i (59, 40);glVertex2i (49, 40);glVertex2i (57, 30);glVertex2i (60, 40);glVertex2i (62, 20);glVertex2i (67, 100);glVertex2i (87, 100);glVertex2i (77, 120);glVertex2i (77, 50);glVertex2i (77, 100);glVertex2i (68, 50);glVertex2i (77, 100);glVertex2i (86, 50);glVertex2i (65, 20);glVertex2i (69, 40);glVertex2i (72, 40);glVertex2i (76, 20);glVertex2i (79, 40);glVertex2i (83, 20);glVertex2i (85, 40);glVertex2i (89, 20); glFlush();/* Handle window resize */void reshape(int w, int h) GLsizei wh=w;if(h=0;i-)switch(_transi)case TRANXP:px+=_delpos;break;case TRANXM:px-=_delpos;break;case TRANYP:py+=_delpos;break;case TRANYM:py-=_delpos;break;case TRANZP:pz+=_delpos;break;case TRANZM:pz-=_delpos;break;default:break;glRotated(45,px,py,pz);glTranslatef(px,py,pz);/光照void init()GLfloat lightposition = 0.0, 0.0, 3.0, 1.0 ;glClearColor(1.0,1.0,1.0,0.0);glShadeModel(GL_SMOOTH);glEnable(GL_DEPTH_TEST);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);GLfloat lightambient = 1.0,1.0,1.0,1.0;/环境光GLfloat lightdiffuse = 1.0,1.0,1.0,1.0;/漫反射GLfloat lightspecular = 1.0,1.0,1.0,1.0 ;/镜面反射光glLightfv(GL_LIGHT0,GL_AMBIENT,lightambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,lightdiffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,lightspecular);glLightModelf(GL_LIGHT_MODEL_AMBIENT, (0.0, 0.0, 0.0);GLfloat emission = 0.0, 0.0, 0.0, 1.0;/发射光GLfloat ambient =0.2,0.2,0.2,0.0;/环境光GLfloat diffuse =1.0,0.5,0.5,0.5;/漫反射特性GLfloat specular =0.5,0.5,0.5,0.0 ;/镜面反射光色GLfloat shininess =100.0; /镜面反射的光亮度glMaterialfv(GL_FRONT,GL_AMBIENT,ambient);glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,specular);glMaterialfv(GL_FRONT,GL_SHININESS,shininess);glMaterialfv(GL_FRO

温馨提示

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

评论

0/150

提交评论