文正學(xué)院圖形學(xué)-實驗四報告(共13頁)_第1頁
文正學(xué)院圖形學(xué)-實驗四報告(共13頁)_第2頁
文正學(xué)院圖形學(xué)-實驗四報告(共13頁)_第3頁
文正學(xué)院圖形學(xué)-實驗四報告(共13頁)_第4頁
文正學(xué)院圖形學(xué)-實驗四報告(共13頁)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 蘇州大學(xué)文正學(xué)院計算機(jī)圖形學(xué)實驗報告實驗名稱 馬的設(shè)計 姓名 _許志杰_ 學(xué)號 _ 專業(yè)班級 _信計_實驗日期 _2011_年_12_月_16_日 上課教師 _王平_實驗成績 _一、 實驗的目的掌握VC+程序開發(fā)環(huán)境下,控制臺框架下OpenGL基本程序結(jié)構(gòu);編程實現(xiàn)平面圖形的平移、旋轉(zhuǎn)和放縮變換。二、 實驗的內(nèi)容與步驟(可提供屏幕抓圖)a. VC+ 6.0控制臺程序框架下的OpenGL繪圖環(huán)境的設(shè)置b. VC+ 6.0控制臺對于實現(xiàn)馬的程序的運行的操作c. 調(diào)用實驗一中自己中文姓名,從而獲取字符的坐標(biāo)信息,利用這些坐標(biāo)基于OpenGL中的線段或者多邊形繪制自己的姓名

2、于馬的下方,并設(shè)計上學(xué)號。程序設(shè)計程序修改程序調(diào)試三、 實驗結(jié)果與分析(可提供屏幕抓圖)中文名字的調(diào)用上有待提高,試了很多次還是只能放在左腳下,對于馬的運行上面的調(diào)用還是要細(xì)心。其他結(jié)果正常,無明顯偏差。四、 實驗的使用說明和測試的數(shù)據(jù)無五、 實驗中的問題總結(jié)與心得體會1、中文名字的調(diào)用還不是很熟悉,對于名字位置的導(dǎo)入對于我來說還是有點難度的,還沒能掌握;2、在學(xué)號的設(shè)計上,顯得有點繁瑣,雖然最后是出來了,但是可以看出寫了很多的程序,顯得十分累贅;3、調(diào)試測試方面有待提高,對于錯誤的把握方面不能做到一看就知道。六、 源代碼清單:#include "stdafx.h"#inc

3、lude <GL/glut.h>#include <iostream>#include <fstream>#include <vector>#include <string>#include "point.h"#include "trans.h"#define PI 3.14159#define D 4float alpha=0;using namespace std;vector<POINT> vertices;vector<vector<int> > tr

4、iangles;vector<int> _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

5、&filename)ifstream fp;fp.open(filename.c_str();POINT tmp;int i0,i1,i2;vector<int> ind;vertices.clear();triangles.clear();int i;fp>>v_num>>tri_num;for(i=0;i<v_num;i+)fp>>tmp.x>>tmp.y>>tmp.z;vertices.push_back(tmp);unify_data();/cout<<tri_num<<end

6、l;for(i=0;i<tri_num;i+) fp>>i0>>i1>>i2;ind.push_back(i0); ind.push_back(i1); ind.push_back(i2);triangles.push_back(ind);ind.clear();fp.close();cout<<"ready"<<endl;void unify_data(void)double minx,maxx,miny,maxy,minz,maxz;minx=maxx=vertices0.x;miny=maxy=vert

7、ices0.y;minz=maxz=vertices0.z;int i;for(i=1;i<v_num;i+) if(minx>verticesi.x) minx=verticesi.x;if(maxx<verticesi.x) maxx=verticesi.x;if(miny>verticesi.y) miny=verticesi.y;if(maxy<verticesi.y) maxy=verticesi.y;if(minz>verticesi.z) minz=verticesi.z;if(maxz<verticesi.z) maxz=vertice

8、si.z;double midx=0.5*(minx+maxx), midy=0.5*(miny+maxy), midz=0.5*(minz+maxz);for(i=0;i<v_num;i+) verticesi.x-=midx;verticesi.y-=midy;verticesi.z-=midz;double widx=maxx-minx, widy=maxy-miny, widz=maxz-minz;if(widz<widy) widz=widy;if(widz<widx) widz=widx;for(i=0;i<v_num;i+) verticesi/=widz

9、;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

10、= 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

11、_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_MATERIA

12、L); /Read data string filename("horse.tri"); read_data(filename);void draw(void)int i;POINT tmp;glBegin(GL_TRIANGLES);for(i=0;i<tri_num;i+)tmp = verticestrianglesi0;glVertex3d(tmp.x,tmp.y,tmp.z);tmp = verticestrianglesi1;glVertex3d(tmp.x,tmp.y,tmp.z);tmp = verticestrianglesi2;glVertex3d

13、(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

14、.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);glV

15、ertex2f(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(G

16、L_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);g

17、lVertex2f(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

18、.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, 10

19、0); 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);glVertex2

20、i (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);glVertex2

21、i (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);glVe

22、rtex2i (89, 20); glFlush();/* Handle window resize */void reshape(int w, int h) GLsizei wh=w;if(h<w) wh=h; glViewport(0, 0, (GLsizei) wh, (GLsizei) wh); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1,1,-1,1,-10,10); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); /gluLookAt(0, 0, 2, 0, 0

23、, 0, 0, 1, 0);void special_key(int key, int x, int y)switch(key)case GLUT_KEY_UP:_trans.push_back(TRANYP);glutPostRedisplay();break;case GLUT_KEY_DOWN:_trans.push_back(TRANYM);glutPostRedisplay();break;case GLUT_KEY_LEFT:_trans.push_back(TRANXM);glutPostRedisplay();break;case GLUT_KEY_RIGHT:_trans.p

24、ush_back(TRANXP);glutPostRedisplay();break;case GLUT_KEY_PAGE_UP:_trans.push_back(TRANZP);glutPostRedisplay();break;case GLUT_KEY_PAGE_DOWN:_trans.push_back(TRANZM);glutPostRedisplay();break;void transformation()int num=_trans.size();double px=0,py=0,pz=0;int i;glLoadIdentity();for(i=num-1;i>=0;i

25、-)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 =

26、 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;/環(huán)境光GLfloat lightdiffuse = 1.0,1.0,1.0,1.0;/漫反射GLfloat lightspecular = 1.0,1.0,1.0,1.0 ;/鏡面反射光glLightfv(GL_LIGHT0,GL_AMB

27、IENT,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;/發(fā)射光GLfloat ambient =0.2,0.2,0.2,0.0;/環(huán)境光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);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論