虚拟现实与数据可视化课程作业董元 22011207
glTexCoord2f(1,0);glVertex3f( -34.9f, -30.0f, -65.9f); glTexCoord2f(0,0);glVertex3f( -49.9f, -30.0f, -65.9f);
glEnd();
glBindTexture(GL_TEXTURE_2D,texture[3]);//贴空调纹理 glBegin(GL_QUADS);
glNormal3f(-1.0f, 0.0f, 0.0f);
glTexCoord2f(0,1);glVertex3f( -34.9f, 10.0f, -65.9f); glTexCoord2f(1,1);glVertex3f( -34.9f, 10.0f, -72.9f); glTexCoord2f(1,0);glVertex3f( -34.9f, -30.0f, -72.9f); glTexCoord2f(0,0);glVertex3f( -34.9f, -30.0f, -65.9f);
glEnd();
glBegin(GL_QUADS);
glNormal3f(-1.0f, 0.0f, 0.0f);
//贴空调纹理
glTexCoord2f(0,1);glVertex3f( -49.9f, 10.2f, -65.9f); glTexCoord2f(1,1);glVertex3f( -34.9f, 10.1f, -65.9f); glTexCoord2f(1,0);glVertex3f( -34.9f, 10.1f, -72.9f); glTexCoord2f(0,0);glVertex3f( -49.9f, 10.1f, -72.9f);
glEnd();
glDisable(GL_TEXTURE_2D);
glBegin(GL_QUADS);//绘制投影仪 glColor3f(1,1,1);
//glNormal3f(-1.0f, 0.0f, 0.0f); glVertex3f( 5.0f, 29.9f, -78.0f);
glVertex3f( -32.0f, 29.9f, -78.0f);
glVertex3f( 5.0f, projectory, -78.0f); glVertex3f( -32.0f, projectory, -78.0f);
glEnd();
glColor3f(0.521f,0.121f,0.0547f);
GLfloat diffusion2[]={0.521f,0.121f,0.0547f,1.0};
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,diffusion2); glEnable(GL_TEXTURE_2D);//启用二维纹理 glBindTexture(GL_TEXTURE_2D,texture[1]); glBegin(GL_QUADS);
glNormal3f(-1.0f, 0.0f, 0.0f);
//绘制门
glTexCoord2f(0,1);glVertex3f( 49.9f, 20.0f, -69.9f); glTexCoord2f(1,1);glVertex3f( 49.9f, 20.0f, -45.0f); glTexCoord2f(1,0);glVertex3f( 49.9f, -30.0f, -45.0f); glTexCoord2f(0,0);glVertex3f( 49.9f, -30.0f, -69.9f);
31 / 40
虚拟现实与数据可视化课程作业董元 22011207
glEnd();
glBindTexture(GL_TEXTURE_2D,texture[0]); GLint x=0,y=0; for(;x<3;x++) { }
glDisable(GL_TEXTURE_2D); GLuint i=0,j=0;//画天花板上的灯 glColor3f(1,1,1); for(;i<5;i++) {
for (;j<6;j++) {
glBegin(GL_QUADS);
glNormal3f(0.0f, -1.0f, 0.0f);
glVertex3f( -40.0f+i*18, 29.9f, -75.0f+j*20); glVertex3f( -40.0f+i*18, 29.9f, -70.0f+j*20); glVertex3f(-35.0f+i*18, 29.9f, -70.0f+j*20); glVertex3f( -35.0f+i*18, 29.9f, -75.0f+j*20); glEnd();
32 / 40
glBegin(GL_QUADS);
glTexCoord2f(0,1);
glColor3f(0.521f,0.121f,0.0547f); //绘制右窗户 glVertex3f( 49.9f, 20.0f, -30.9f+x*30); glTexCoord2f(1,1);
glVertex3f( 49.9f, 20.0f, -13.9f+x*30); glTexCoord2f(1,0);
glVertex3f( 49.9f, 0.0f, -13.9f+x*30); glTexCoord2f(0,0);
glVertex3f( 49.9f, 0.0f, -30.9f+x*30);
glEnd();
glBegin(GL_QUADS);
//glNormal3f(-1.0f, 0.0f, 0.0f);
//绘制窗户
glTexCoord2f(0,1);glVertex3f( -49.9f, 20.0f, -60.9f+x*28); glTexCoord2f(1,1);glVertex3f( -49.9f, 20.0f, -43.9f+x*28); glTexCoord2f(1,0);glVertex3f( -49.9f, 0.0f, -43.9f+x*28); glTexCoord2f(0,0);glVertex3f( -49.9f, 0.0f, -60.9f+x*28);
glEnd();
虚拟现实与数据可视化课程作业董元 22011207
}
}
} j=0;
glPushMatrix();//黑板前一块高地 glColor3f(0.8f,1.0f,0.8f);
glTranslatef(0.0f,-29.0f,-70.0f);//
glScalef(65.0f,3.0f,10.0f);//将立方体变成长方体 glutSolidCube(1.0); glPopMatrix();
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);
glPushMatrix();
glColor3f(0.521f,0.121f,0.0547f);//讲台 glTranslatef(-0.0f,-20.0f,-65.0f);//
glScalef(20.0f,30.0f,6.0f);//将立方体变成长方体 glutSolidCube(1.0); glPopMatrix();
glPushMatrix();
glColor3f(0.521f,0.121f,0.0547f);//讲台 glTranslatef(0.0f,-5.0f,-60.0f);//
glScalef(30.0f,2.0f,8.0f);//将立方体变成长方体 glutSolidCube(1.0); glPopMatrix();
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE,mat_amb_diff1);
/***************函数名称:
projector_dispaly1*************************************************** ****************函数作用:制造投影仪收起效果
****************************************************/ void projector_dispaly1(void) { }
33 / 40
projectory=projectory+0.05f; if(projectory>=28.0f) { }
glutPostRedisplay();
projectory=28.0f;
虚拟现实与数据可视化课程作业董元 22011207
/***************函数名称:
projector_dispaly2*************************************************** ****************函数作用:制造投影仪放下效果
****************************************************/ void projector_dispaly2(void) { }
/***************函数名称:
dispaly*************************************************************** ****************函数作用:显示回调函数
**********************************************************/ void display(void) { }
/***************函数名称:
reshape*************************************************************** ****************函数作用:窗口大小改变回调函数
***************************************************/ void reshape(intw,inth) {
WinWidth = w; WinHeight
= h;
glViewport(0,0,(GLsizei) w, (GLsizei) h);//???????
glMatrixMode( GL_PROJECTION);//指定哪一个矩阵是当前矩阵(看的程序好像都有这glLoadIdentity();//?????
gluPerspective(75.0f, (GLfloat)w/(GLfloat)h, 0.01f, 120.0f);
34 / 40
projectory=projectory-0.05f; if(projectory<=-5.0f) { }
glutPostRedisplay();
projectory=-5.0f;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(1,1,1); DrawRoom(); DrawBlackboard(); DrawOtherThings(); DrawDesk(); glFlush();
个)?????
虚拟现实与数据可视化课程作业董元 22011207
}
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glLightfv(GL_LIGHT0,GL_POSITION,light_position); gluLookAt(Eye.x, Eye.y, Eye.z, 0, 0, 0, 0, 1, 0);
/***************函数名称:
OnKeyboard************************************************************ ****************函数作用:响应键盘操作
**********************************************************/ GLvoid OnKeyboard(unsignedcharkey, intx, inty) { }
/***************函数名称:
OnSpecial************************************************************* ****************函数作用:响应特殊事件操作(其实也是响应键盘操作)********************************/ GLvoid OnSpecial(intkey, intx, inty) {
35 / 40
switch(key) { case 27: }
exit(0); break;
switch(key) {
caseGLUT_KEY_LEFT:
Eye.x -= 0.5; break;
caseGLUT_KEY_RIGHT:
Eye.x += 0.5; break;
caseGLUT_KEY_UP:
Eye.y += 0.5; break;
caseGLUT_KEY_DOWN:
Eye.y -= 0.5; break;