




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)報(bào)告課程名稱:三維圖形程序設(shè)計(jì)學(xué)院:計(jì)算機(jī)科學(xué)與工程專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)指導(dǎo)教師:曹躍學(xué)生姓名:郭小明學(xué)號(hào):2011060100010實(shí)驗(yàn)成績(jī):日期:2013年5月10日電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告一、實(shí)驗(yàn)一:OpenGL光照與材質(zhì)編程實(shí)驗(yàn)二、實(shí)驗(yàn)室名稱:A2三、實(shí)驗(yàn)?zāi)康模?、理解OpenGL光照模型的相關(guān)原理,掌握與光照參數(shù)和對(duì)象材質(zhì)設(shè)置相關(guān)的OpenGL API函數(shù)的用法,熟悉光照與材質(zhì)參數(shù)設(shè)置的基本技巧;2、理解OpenGL混合(融合)的基本原理,掌握與混合相關(guān)的OpenGL API函數(shù)的用法。四、實(shí)驗(yàn)原理:OpenGL編程原理五、實(shí)驗(yàn)內(nèi)容:(
2、一)編程任務(wù)1繪制一個(gè)具有光照的房間建立光照?qǐng)鼍安閳?chǎng)景中的幾何對(duì)象設(shè)置材質(zhì)屬性void CreateWorld()四面墻壁 void CreateWall()屋頂 void CreateCeiling()地板 void CreateGround()一個(gè)圓錐體和一個(gè)球體 void CreateFurnishings()在房間中創(chuàng)建并放置兩個(gè)光源 void CreateLightAndProxy(void)一個(gè)是點(diǎn)光源一個(gè)是聚光燈;為光源創(chuàng)建代理幾何體(Proxy),可以通過鼠標(biāo)拖動(dòng)光源代理來交互式的移動(dòng)光源;繪制場(chǎng)景void DrawWorld(void)繪制四面墻壁 void DrawWal
3、l()繪制屋頂 void DrawCeiling()繪制地板 void DrawGround()繪制屋內(nèi)物品 void DrawFurnishings()繪制光源代理 voidDrawLightProxy()其它要求:1、可交互式移動(dòng)光源;2、可用右鍵菜單交互式的開啟或關(guān)閉場(chǎng)景光照;3、可利用鍵盤快捷鍵調(diào)整球的材質(zhì)屬性,如輝度系數(shù)(GL_SHININESS)等。分析材質(zhì)是如何影響幾何對(duì)象的光照效果的。(二)編程任務(wù)2繪制一個(gè)具有地板反光效果的房間利用OpenGL混合功能可以模擬地板反光效果,這需要將地板和場(chǎng)景中其它物體分開處理,其基本思路如下:1、首先以上下顛倒的方式來繪制出地板鏡像場(chǎng)景(即沿
4、著地板面將光源和場(chǎng)景進(jìn)行鏡像);2、接者利用混合在上述鏡像場(chǎng)景之上繪制出半透明的地板;3、最后以正常的光源和場(chǎng)景位置來繪制場(chǎng)景。參考代碼如下:void RenderScene(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); / 光源鏡像移動(dòng)到地板下,以照射這個(gè)“鏡像”場(chǎng)景 glLightfv(GL_LIGHT0, GL_POSITION, fLightPosMirror); glPushMatrix(); /場(chǎng)景被鏡像,同時(shí)交換正反面 glFrontFace(GL_CW); glScalef(1
5、.0f, -1.0f, 1.0f); DrawWorldExGround(); glFrontFace(GL_CCW); glPopMatrix(); / 在鏡像場(chǎng)景上繪制一個(gè)半透明的地板 glDisable(GL_LIGHTING); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); DrawGround(); glDisable(GL_BLEND); glEnable(GL_LIGHTING); / 恢復(fù)正常的光照,并正確繪制場(chǎng)景 glLightfv(GL_LIGHT0, GL_POSITION,
6、fLightPos); DrawWorldExGround(); glPopMatrix(); glutSwapBuffers(); 六、實(shí)驗(yàn)器材(設(shè)備、元器件):Microsoft Windows XP Professional 版本2002 Service Pack 3 VC+ 6.0七、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:(一)編程任務(wù)1繪制一個(gè)具有光照的房間#include #include #include #define SIZE 512GLint HITS;int flag_xyz = 1;int flag_light = 1;int mousex,mousey;float movex,move
7、y,movez;float PI = 3.1415926;void display();void drawSphere(GLfloat,GLfloat,GLfloat,int);float wide=0.8,height=0.8,Dept=0.8;void init()glEnable(GL_DEPTH_TEST);glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);int wide_screen=300,height_screen=300;float eyex = 0.0,eyey = 0.0,eyez = 1.8;void reshape(
8、int w, int h)wide_screen = w;height_screen = h;glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,1,1,3);/3.設(shè)置視景體,glFrustumgluLookAt(eyex,eyey,eyez,0,0,0,0,1,0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();float light_postion4=wide-0.2,height-0.2,-Dept,1;float light
9、_ambient 4=1.0,1.0,1.0,0.5;float light_diffuse 4=1.0,1.0,1.0,0.5;float light_specular 4=1.0,1.0,1.0,0.5;/float light_ambient 4=0.6,0.6,0.6,0.5;/float light_diffuse 4=0.4,0.4,0.4,0.5;/float light_specular 4=0.8,0.8,0.8,0.5;float proxy3 = wide-0.2,height-0.2,-Dept;void createLightAndProxy(GLenum mode)
10、glTranslatef(2*movex/wide_screen,2*movey/height_screen,2*movez/wide_screen);glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,1.5);glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,0);/glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,0.0125);glLightfv(GL_LIGHT0,GL_POSITION,light_postion);glLightfv(GL_LIGHT0,GL_AMBIENT,l
11、ight_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);if(mode = GL_SELECT)glLoadName(1);drawSphere(proxy0,proxy1-wide/12,proxy2,1);glTranslatef(-2*movex/wide_screen,-2*movey/height_screen,-2*movez/wide_screen);if(mode = GL_SELECT)glLoadName(2);vo
12、id create_wall()/glEnable(GL_FRONT_AND_BACK);/設(shè)置墻壁材質(zhì)GLfloat Material_ambient4=0.6,0.2,0.5,0.5;GLfloat Material_diffuse4=0.8,0.2,0.5,0.5;GLfloat Material_specular4=0.0,0.0,0.5,1.0;GLfloat Material_shiness = 64.0;glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,Material_ambient);glMaterialfv(GL_FRONT_AND_BAC
13、K,GL_DIFFUSE,Material_diffuse);glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,Material_specular);glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,Material_shiness);glBegin(GL_QUADS);/近處的墻glColor3f(1.0,0,0.0);glNormal3f(0,0,-1);glVertex3f(wide,-height,Dept);glVertex3f(wide,height,Dept);glVertex3f(-wide,height,
14、Dept);glVertex3f(-wide,-height,Dept);/右邊的墻glColor3f(1.0,0.5,0.8);glNormal3f(-1,0,0);glVertex3f(wide,-height,Dept);glVertex3f(wide,height,Dept);glVertex3f(wide,height,-Dept);glVertex3f(wide,-height,-Dept);/左邊的墻glColor3f(0.0,1.0,0.0);glNormal3f(1,0,0);glVertex3f(-wide,-height,-Dept);glVertex3f(-wide,h
15、eight,-Dept);glVertex3f(-wide,height,Dept);glVertex3f(-wide,-height,Dept);/遠(yuǎn)處的墻glColor3f(1.0,0.5,0.4);glNormal3f(0,0,1);glVertex3f(wide,-height,-Dept);glVertex3f(wide,height,-Dept);glVertex3f(-wide,height,-Dept);glVertex3f(-wide,-height,-Dept);glEnd();void create_floor()glBegin(GL_QUADS);glColor4f(0
16、.5,0.4,0.4,0.6);glNormal3f(0,1,0);glVertex3f(-wide,-height,-Dept);glVertex3f(-wide,-height,Dept);glVertex3f(wide,-height,Dept);glVertex3f(wide,-height,-Dept);glEnd();void create_quad(int i,int j)if(i+j)%2 = 1 )glColor3f(0.0,0.5,0.5);elseglColor3f(0.0,0.0,0.0);glBegin(GL_QUADS);glVertex3f(-wide/16,0,
17、Dept/16);glVertex3f(-wide/16,0,-Dept/16);glVertex3f(wide/16,0,-Dept/16);glVertex3f(wide/16,0,Dept/16);glEnd();void create_ceil()int j =1;int i=1;glTranslatef(0,height,0);glNormal3f(0,-1,0);for(;j=16;j+)glTranslatef(-wide+j*wide/8-wide/16,0,0);/printf(%d ,j);for(i=1;i=16;i+)glTranslatef(0,0,-Dept+i*D
18、ept/8-Dept/16);create_quad(i,j);glTranslatef(0,0,Dept-i*Dept/8+Dept/16);glTranslatef(wide-j*wide/8+wide/16,0,0);glTranslatef(0,-height,0);void drawSphere(GLfloat xx=0,GLfloat yy=0,GLfloat zz=0,int flag=0)GLfloat radius;if(flag = 0)radius=2*wide/8;elseradius=wide/16;GLfloat M=20;GLfloat N=20;float st
19、ep_z = PI/M;float step_xy = 2*PI/N;float x4,y4,z4;float angle_z = 0.0;float angle_xy = 0.0;int i=0, j=0;if(flag = 0)glColor3f(0.5,0.25,0);elseglColor3f(1.0,1.0,1.0);glBegin(GL_QUADS);for(i=0; iM; i+)angle_z = i * step_z;for(j=0; jN; j+)angle_xy = j * step_xy; x0 = radius * sin(angle_z) * cos(angle_x
20、y);y0 = radius * sin(angle_z) * sin(angle_xy);z0 = radius * cos(angle_z);x1 = radius * sin(angle_z + step_z) * cos(angle_xy);y1 = radius * sin(angle_z + step_z) * sin(angle_xy);z1 = radius * cos(angle_z + step_z);x2 = radius*sin(angle_z + step_z)*cos(angle_xy + step_xy);y2 = radius*sin(angle_z + ste
21、p_z)*sin(angle_xy + step_xy);z2 = radius*cos(angle_z + step_z);x3 = radius * sin(angle_z) * cos(angle_xy + step_xy);y3 = radius * sin(angle_z) * sin(angle_xy + step_xy);z3 = radius * cos(angle_z);for(int k=0; k4; k+)glNormal3f(xk,yk,zk);glVertex3f(xx+xk, yy+yk,zz+zk);glEnd();void yuanzhui()glTransla
22、tef(-wide/2,-height,-Dept/2);glBegin(GL_TRIANGLE_FAN);glColor3f(0,0.25,0.5);glNormal3f(1,1,1);glVertex3f(0,height/1.2,0);for(int i=0;i=32;i+)glVertex3f(0.2*cos(i*PI/16),0,0.2*sin(i*PI/16);glEnd();glTranslatef(wide/2,height,Dept/2);void createFurnishings()/glSolidSphere();glTranslatef(0,-height+2*wid
23、e/8,-Dept+2*Dept/8);drawSphere();glTranslatef(0,height-2*wide/8,Dept-2*Dept/8);yuanzhui();void draw(GLenum mode)glMatrixMode(GL_MODELVIEW);if(flag_light = 1)glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);elseglDisable(GL_LIGHTING);glDisable(GL_LIGHT0);createLightAndProxy(mode);create_wall();create_floor(
24、);create_ceil();createFurnishings();void RenderScene(GLenum mode)glTranslatef(0.0,2*height,0.0);glLightfv(GL_LIGHT0, GL_POSITION, light_postion);glFrontFace(GL_CW);glScalef(1.0f, -1.0f, 1.0f);create_wall();create_ceil();createFurnishings();/DrawWorldExGround();glScalef(1.0f, -1.0f, 1.0f);glFrontFace
25、(GL_CCW);glTranslatef(0.0,-2*height,0.0);glDisable(GL_LIGHTING);glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);/DrawGround();create_floor();glDisable(GL_BLEND);glEnable(GL_LIGHTING);glLightfv(GL_LIGHT0, GL_POSITION, light_postion);/DrawWorldExGround();draw(GL_RENDER);void displ
26、ay()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,1,1,3);gluLookAt(eyex,eyey,eyez,0,0,0,0,1,0);draw(GL_RENDER);glFlush();glutSwapBuffers();int flag_move = 0 ;void process(GLint hits,GLuint buffer)unsigned int i, j;GLint names, *ptr;/p
27、rintf (hits = %dn, hits);ptr = (GLint *) buffer;for (i = 0; i hits; i+) /* for each hit */names = *ptr;ptr+=3;for (j = 0; j names; j+) /* for each name */if(*ptr=1)flag_move = 1;ptr+;GLuint select_BufferSIZE;void mouse(int key,int state,int x,int y)GLint hits;GLint viewport4;if(key = GLUT_LEFT_BUTTO
28、N & state = GLUT_DOWN)mousex = x;mousey = y;glGetIntegerv(GL_VIEWPORT,viewport);glSelectBuffer(SIZE,select_Buffer);glRenderMode(GL_SELECT);glInitNames();glPushName(0);glMatrixMode(GL_PROJECTION);glPushMatrix();glLoadIdentity();gluPickMatrix(GLdouble)x,(GLdouble)(viewport3-y),5,5,viewport);gluPerspec
29、tive(60,1,1,3);gluLookAt(eyex,eyey,eyez,0,0,0,0,1,0);draw(GL_SELECT);glMatrixMode(GL_PROJECTION);glPopMatrix();glFlush();hits = glRenderMode(GL_RENDER);process(hits,select_Buffer);HITS = hits;glutPostRedisplay();if(key = GLUT_LEFT_BUTTON & state = GLUT_UP)flag_move = 0;void motion(int x,int y)if(fla
30、g_move = 0)return;elseswitch(flag_xyz)case 1:case 2:movex = x-mousex+movex;movey = -y+mousey+movey;break;case 3:movez = x-mousex+movez;break;/display(GL_RENDER);glutPostRedisplay();mousex = x;mousey = y;/printf(%fn,movey);void keyboard(unsigned char key,int x,int y)/printf(%c ,key);switch(key)case x
31、:eyex -=0.1;break;case y:eyey -=0.1;break;case z:eyez -=0.1;break;case X:eyex +=0.1;break;case Y:eyey +=0.1;break;case Z:eyez +=0.1;break;case h:case H:flag_xyz = 1;break;case s:case S:flag_xyz = 2;break;case l:case L:flag_xyz = 3;break;default:return;break;/printf( %f %f %fn,eyex,eyey,eyez);glutPos
32、tRedisplay();void MenuFunc(int data)switch(data)case 1:flag_light = 0;break;case 2:flag_light = 1;break;default:break;glutPostRedisplay();int Menu;int main(int argc,char * argv)glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);glutInit(&argc,argv);glutInitWindowSize(wide_screen,height_screen);glu
33、tCreateWindow(“郭小明的房間”);init();Menu = glutCreateMenu(MenuFunc);glutAddMenuEntry(關(guān)閉光源!,1);glutAddMenuEntry(打開光源!,2);glutAttachMenu(GLUT_RIGHT_BUTTON);glutDisplayFunc(display);glutKeyboardFunc(keyboard);glutMouseFunc(mouse);glutMotionFunc(motion);glutKeyboardFunc(keyboard);glutReshapeFunc(reshape);glu
34、tMainLoop();return 0;打開光源時(shí)郭小明的房間的情形通過右鍵菜單關(guān)閉光源之后郭小明房間的情形改變視角方向和位置之后的看到的房間的外圍圖形(二)編程任務(wù)2繪制一個(gè)具有地板反光效果的房間#include #include #include #define SIZE 512GLint HITS;int flag_xyz = 1;int flag_light = 1;int mousex,mousey;float movex,movey,movez;float PI = 3.1415926;void display();void drawSphere(GLfloat,GLfloat,
35、GLfloat,int);float wide=0.8,height=0.8,Dept=0.8;void init()glEnable(GL_DEPTH_TEST);glEnable(GL_NORMALIZE);glEnable(GL_COLOR_MATERIAL);int wide_screen=300,height_screen=300;float eyex = 0,eyey = 0,eyez = 1.7;void reshape(int w, int h)wide_screen = w;height_screen = h;glViewport(0, 0, w, h);glMatrixMo
36、de(GL_PROJECTION);glLoadIdentity();/gluOrtho2D (-2.0*wide, 2.0*wide, -2.0*height, 2.0*height);gluPerspective(60,1,1,30);/3.設(shè)置視景體,glFrustum/glFrustum(-0.8,0.8,-0.8,0.8,1,3);gluLookAt(eyex,eyey,eyez,0,0,0,0,1,0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();float light_postion4=wide-0.2,height-0.2,-Dept
37、,1;float light_ambient 4=1.0,1.0,1.0,0.5;float light_diffuse 4=1.0,1.0,1.0,0.5;float light_specular 4=1.0,1.0,1.0,0.5;float proxy3 = wide-0.2,height-0.2,-Dept;void createLightAndProxy(GLenum mode)glTranslatef(2*movex/wide_screen,2*movey/height_screen,2*movez/wide_screen);/設(shè)置光源相關(guān)glLightf(GL_LIGHT0,GL
38、_CONSTANT_ATTENUATION,1.5);glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,0);glLightfv(GL_LIGHT0,GL_POSITION,light_postion);glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);if(mode = GL_SELECT)glLoadName(1);if(flag_
39、light = 1)drawSphere(proxy0,proxy1-wide/12,proxy2,1);glTranslatef(-2*movex/wide_screen,-2*movey/height_screen,-2*movez/wide_screen);if(mode = GL_SELECT)glLoadName(2);void create_wall()/glEnable(GL_FRONT_AND_BACK);/設(shè)置墻壁材質(zhì)GLfloat Material_ambient4=0.6,0.2,0.5,0.5;GLfloat Material_diffuse4=0.8,0.2,0.5,
40、0.5;GLfloat Material_specular4=0.0,0.0,0.5,1.0;GLfloat Material_shiness = 64.0;glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,Material_ambient);glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,Material_diffuse);glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,Material_specular);glMaterialf(GL_FRONT_AND_BACK,GL_SHININ
41、ESS,Material_shiness);glBegin(GL_QUADS);/近處的墻glColor3f(0.6,0,0.0);glNormal3f(0,0,-1);glVertex3f(wide,-height,Dept);glVertex3f(wide,height,Dept);glVertex3f(-wide,height,Dept);glVertex3f(-wide,-height,Dept);/右邊的墻glColor3f(0.5,0.5,0.8);glNormal3f(-1,0,0);glVertex3f(wide,-height,Dept);glVertex3f(wide,he
42、ight,Dept);glVertex3f(wide,height,-Dept);glVertex3f(wide,-height,-Dept);/左邊的墻glColor3f(0.5,0.5,0.8);glNormal3f(1,0,0);glVertex3f(-wide,-height,-Dept);glVertex3f(-wide,height,-Dept);glVertex3f(-wide,height,Dept);glVertex3f(-wide,-height,Dept);/遠(yuǎn)處的墻glColor3f(0.5,0.5,0.8);glNormal3f(0,0,1);glVertex3f(w
43、ide,-height,-Dept);glVertex3f(wide,height,-Dept);glVertex3f(-wide,height,-Dept);glVertex3f(-wide,-height,-Dept);glEnd();void create_floor()glBegin(GL_QUADS);glColor4f(0.4,0.3,0.3,0.6);glNormal3f(0,-1,0);glVertex3f(-wide,-height,-Dept);glVertex3f(wide,-height,-Dept);glVertex3f(wide,-height,Dept);glVe
44、rtex3f(-wide,-height,Dept);glEnd();void create_quad(int i,int j)if(i+j)%2 = 1 )glColor3f(0.0,0.5,0.5);elseglColor3f(0.0,0.0,0.0);glBegin(GL_QUADS);glVertex3f(-wide/16,0,Dept/16);glVertex3f(wide/16,0,Dept/16);glVertex3f(wide/16,0,-Dept/16);glVertex3f(-wide/16,0,-Dept/16);glEnd();void create_ceil()int
45、 j =1;int i=1;glTranslatef(0,height,0);glNormal3f(0,1,0);for(;j=16;j+)glTranslatef(-wide+j*wide/8-wide/16,0,0);/printf(%d ,j);for(i=1;i=16;i+)glTranslatef(0,0,-Dept+i*Dept/8-Dept/16);create_quad(i,j);glTranslatef(0,0,Dept-i*Dept/8+Dept/16);glTranslatef(wide-j*wide/8+wide/16,0,0);glTranslatef(0,-heig
46、ht,0);void drawSphere(GLfloat xx=0,GLfloat yy=0,GLfloat zz=0,int flag=0)GLfloat radius;if(flag = 0)radius=2*wide/8;elseradius=wide/16;GLfloat M=20;GLfloat N=20;float step_z = PI/M;float step_xy = 2*PI/N;float x4,y4,z4;float angle_z = 0.0;float angle_xy = 0.0;int i=0, j=0;if(flag = 0)glColor3f(0.5,0.
47、25,0);elseglColor3f(1.0,1.0,1.0);glBegin(GL_QUADS);for(i=0; iM; i+)angle_z = i * step_z;for(j=0; jN; j+)angle_xy = j * step_xy; x0 = radius * sin(angle_z) * cos(angle_xy);y0 = radius * sin(angle_z) * sin(angle_xy);z0 = radius * cos(angle_z);x1 = radius * sin(angle_z + step_z) * cos(angle_xy);y1 = ra
48、dius * sin(angle_z + step_z) * sin(angle_xy);z1 = radius * cos(angle_z + step_z);x2 = radius*sin(angle_z + step_z)*cos(angle_xy + step_xy);y2 = radius*sin(angle_z + step_z)*sin(angle_xy + step_xy);z2 = radius*cos(angle_z + step_z);x3 = radius * sin(angle_z) * cos(angle_xy + step_xy);y3 = radius * si
49、n(angle_z) * sin(angle_xy + step_xy);z3 = radius * cos(angle_z);for(int k=0; k4; k+)glNormal3f(xk,yk,zk);glVertex3f(xx+xk, yy+yk,zz+zk);glEnd();void yuanzhui()glTranslatef(-wide/2,-height,-Dept/2);glBegin(GL_TRIANGLE_FAN);glColor3f(0,0.25,0.5);glNormal3f(1,1,1);glVertex3f(0,height/1.2,0);for(int i=0
50、;i=32;i+)glVertex3f(0.2*cos(i*PI/16),0,0.2*sin(i*PI/16);glEnd();glBegin(GL_TRIANGLE_FAN);glColor3f(0,0.25,0.5);glNormal3f(0,1,0);glVertex3f(0,0,0);for(int i=0;i=32;i+)glVertex3f(0.2*cos(i*PI/16), 0.01 , 0.2*sin(i*PI/16);glEnd();glTranslatef(wide/2,height,Dept/2);void createFurnishings()/glSolidSpher
51、e();glTranslatef(0,-height+2*wide/8,-Dept+2*Dept/8);drawSphere();glTranslatef(0,height-2*wide/8,Dept-2*Dept/8);yuanzhui();void draw(GLenum mode)glMatrixMode(GL_MODELVIEW);if(flag_light = 1)glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);elseglDisable(GL_LIGHTING);glDisable(GL_LIGHT0);createLightAndProxy(m
52、ode);create_wall();create_floor();create_ceil();createFurnishings();void RenderScene(GLenum mode)glMatrixMode(GL_MODELVIEW);if(flag_light = 1)glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);elseglDisable(GL_LIGHTING);glDisable(GL_LIGHT0);glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,1.5);glLightf(GL_LIGHT0,G
53、L_LINEAR_ATTENUATION,0);glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular);glTranslatef(0.0 , -2*height , 0.0);glFrontFace(GL_CW);glScalef(1.0f, -1.0f, 1.0f);glTranslatef(2*movex/wide_screen,2*movey/height_scree
54、n,2*movez/wide_screen);glLightfv(GL_LIGHT0,GL_POSITION,light_postion);glTranslatef(-2*movex/wide_screen,-2*movey/height_screen,-2*movez/wide_screen);create_wall();create_ceil();createFurnishings();glScalef(1.0f, -1.0f, 1.0f);glTranslatef(0.0 , 2*height , 0.0);glFrontFace(GL_CCW);glDisable(GL_LIGHTIN
55、G);glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);create_floor();glDisable(GL_BLEND);glEnable(GL_LIGHTING);draw(mode);void display()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,1,1,30);gluLookAt(eyex,eyey,eyez,0
56、,0,0,0,1,0);/draw(GL_RENDER);RenderScene(GL_RENDER);glFlush();glutSwapBuffers();int flag_move = 0 ;void process(GLint hits,GLuint buffer)unsigned int i, j;GLint names, *ptr;/printf (hits = %dn, hits);ptr = (GLint *) buffer;for (i = 0; i hits; i+) /* for each hit */names = *ptr;ptr+=3;for (j = 0; j n
57、ames; j+) /* for each name */if(*ptr=1)flag_move = 1;ptr+;GLuint select_BufferSIZE;void mouse(int key,int state,int x,int y)GLint hits;GLint viewport4;if(key = GLUT_LEFT_BUTTON & state = GLUT_DOWN)mousex = x;mousey = y;glGetIntegerv(GL_VIEWPORT,viewport);glSelectBuffer(SIZE,select_Buffer);glRenderMode(G
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度新能源汽車充電設(shè)施建設(shè)經(jīng)典同借款合同
- 2025年度監(jiān)護(hù)人與被監(jiān)護(hù)人安全保護(hù)協(xié)議書
- 二零二五年度貓咪寵物寵物店加盟與買賣合同
- 2025年度老舊房屋產(chǎn)權(quán)轉(zhuǎn)讓及裝修改造一體化協(xié)議書
- 二零二五年度服裝行業(yè)退貨及賠償協(xié)議
- 臨時(shí)工協(xié)議書(2025年度短期任務(wù))
- 2025年度汽車制造業(yè)勞動(dòng)合同解除證書
- 2025年度餐飲公司服務(wù)員崗位培訓(xùn)與用工合同
- 2025年度綠色建筑項(xiàng)目簽訂協(xié)議流程規(guī)范
- 二零二五年度石材產(chǎn)品售后服務(wù)保障協(xié)議
- 2024-2030年中國(guó)不銹鋼電纜橋架行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 零星維修服務(wù)方案
- DL-T5706-2014火力發(fā)電工程施工組織設(shè)計(jì)導(dǎo)則
- 外科打結(jié)法課件
- 崔允漷教授的課堂觀察框架:4個(gè)要素20個(gè)視角68個(gè)觀察點(diǎn)
- 普通外科臨床路徑(2019年版)
- 三D打印公開課
- 高低壓成套產(chǎn)品標(biāo)準(zhǔn)及檢測(cè)要求
- 空壓機(jī)節(jié)能改造方案
- 語文-山東省泰安市2024屆高三下學(xué)期一模檢測(cè)試題和答案
- 傷口造口工作總結(jié)
評(píng)論
0/150
提交評(píng)論