虚拟现实与数据可视化课程作业董元 22011207
caseGLUT_KEY_PAGE_DOWN: Eye.z -= 0.5;
break;
caseGLUT_KEY_PAGE_UP: Eye.z += 0.5;
break;
caseGLUT_KEY_F1: glEnable(GL_LIGHT6);
break;
caseGLUT_KEY_F2: glDisable(GL_LIGHT6);
break;
caseGLUT_KEY_F3: glutIdleFunc(projector_dispaly2);
break;
caseGLUT_KEY_F4: glutIdleFunc(projector_dispaly1); break;
caseGLUT_KEY_F5: if(blackboard1_y>=-16) blackboard1_y-=0.5; break;
caseGLUT_KEY_F6:
if(blackboard1_y<0) blackboard1_y+=0.5;
break;
caseGLUT_KEY_F7: if(blackboard2_y>=-16) blackboard2_y-=0.5; break;
caseGLUT_KEY_F8:
if(blackboard2_y<0) blackboard2_y+=0.5;
break;
caseGLUT_KEY_F9:
if(blackboard3_y>=-16)
36 / 40
虚拟现实与数据可视化课程作业董元 22011207
}
}
blackboard3_y-=0.5; break;
if(blackboard3_y<0) blackboard3_y+=0.5; break; InitFMOD(); break;
FSOUND_Sample_Free (handle1); FSOUND_Close(); break;
caseGLUT_KEY_F10:
caseGLUT_KEY_F11:
caseGLUT_KEY_F12:
reshape(WinWidth, WinHeight); glutPostRedisplay();
GLvoid OnIdle() { }
/***************函数名称:
InitFMOD************************************************************** ****************函数作用:载入并播放音乐
********************************************************/ GLvoid InitFMOD(void) { }
/***************函数名称:
PrintInformation*******************************************************
37 / 40
glutPostRedisplay();
// 载入音频文件
if (FSOUND_Init(44100, 32, 0)) { }
// 载入文件bgmusic.mp3
handle1=FSOUND_Sample_Load (0,\春晖曲.mp3\,0, 0); FSOUND_PlaySound (0,handle1);
// 把声音初始化为44khz
虚拟现实与数据可视化课程作业董元 22011207
****************函数作用:在窗口中显示提示信息
***************************************************/ GLvoid PrintInformation() { }
------------------main.cpp结束--------------------------------------- printf(\); printf(\虚拟现实与数据可视化课程作业************** \\n\); printf(\东南大学仪器科学与工程学院董元22011207****** \\n\); printf(\);
printf(\相关操作按键信息: \\n\); printf(\键关闭窗口 \\n\);
printf(\上下左右及PgUp PgDn键控制变化视角和前进后退 \\n\); printf(\、F2键分别控制开灯、关灯 \\n\); printf(\、F4键分别控制投影仪放下和收起 \\n\); printf(\、F6键控制左边黑板上下 \\n\); printf(\、F8键控制中间黑板上下 \\n\); printf(\、F10键控制右边黑板上下 \\n\);
printf(\、F12键控制播放以及停止播放春晖曲 \\n\); printf(\如对本源码有意见与建议望请分享. QQ529693812\\n\); printf(\);
printf(\); printf(\最后,我知道……***************** \\n\); printf(\这个教室画风有点奇怪***************** \\n\); printf(\看起来也不是那么漂亮******************* \\n\); printf(\但最终版就是这样了**************** \\n\); printf(\虽然花了很多时间但是是个很有趣的过程********* \\n\); printf(\谢谢观赏……********************** \\n\);
printf(\);
printf(\);
2、头文件
//--------------------定义视点结构
----------------------------------------------- typedefstructEyePoint {
//-------------------纹理相关的一些定义----------------------------------------- #define
WIDTH
64
//位图宽度
38 / 40
GLfloat x; GLfloat y; GLfloat z;
}EYEPOINT;
虚拟现实与数据可视化课程作业董元 22011207
#define GLubyte GLfloat GLint
HEIGHT 64 //位图高度
#definePI 3.14159
Image[WIDTH][HEIGHT][4]; xRot = 0.0f;
Image1;
iWidth, iHeight, iMode; pImage;
//位图数据
AUX_RGBImageRec * GLubyte *
//------------------------光照相关的一些参数---------------------------------------- GLfloat mat_specular[]={0.8,1.0,1.0,1.0}; GLfloat mat_shininess[]={5.0};
GLfloat mat_ambient[]={0.1,0.1,0.1,1}; GLfloat light_position[]={40,19,-70,1.0}; GLfloat light_position0[]={40,19.9,-60,1.0}; GLfloat light_position1[]={40,19.9,-0,1.0}; GLfloat light_position2[]={20,19.9,-60,1.0}; GLfloat light_position3[]={20,19.9,0,1.0}; GLfloat light_position4[]={-20,19.9,-60,1.0}; GLfloat light_position5[]={-20,19.9,0,1.0}; GLfloat light_position6[]={-40,19.9,-60,1.0}; GLfloat light_position7[]={-40,19.9,0,1.0}; GLfloat white_light[]={1.0,1.0,1.0,1.0}; //------------------------材质相关的一些参数---------------------------------------- GLfloat mat_amb_diff1[]={1,1,0.45,1.0}; GLfloat mat_spec1[]={1.0f,1.0f,1.0f,1.0f}; GLfloat mat_shine1[]={10.0f};
GLfloat mat_amb_diff2[]={0.3f,0.35f,0.3f,1.0}; GLfloat mat_amb_diff3[]={0.0664,0.2578,0.1211,1.0}; GLfloat mat_amb_diff4[]={1.0f,1.0f,1.0f,1.0}; GLfloat mat_amb_diff5[]={0.0f,0.0f,0.0f,1.0}; GLfloat mat_amb_diff6[]={0.0f,0.0f,0.0f,1.0}; GLfloat model_ambient[]={0.05f,0.05f,0.05f,1.0f}; GLfloat mat_emiss[]={0.65f,0.65f,0.4f,0.0f}; GLfloat no_mat[]
= {0.0f, 0.0f, 0.0f, 1.0f};
//无材质色
//彩色环境色 //漫反射 //无反光 //低反光 //自发光
GLfloat mat_ambient_color[] = {0.8f, 0.8f, 0.2f, 1.0f}; GLfloat mat_diffuse1[] GLfloat no_shininess[] GLfloat low_shininess[] GLfloat mat_emission[] GLfloat projectory=28.0;
GLfloat blackboard1_y=0,blackboard2_y=0,blackboard3_y=0; EYEPOINT Eye;
39 / 40
= {0.1f, 0.5f, 0.8f, 1.0f}; = {0.0f}; = {5.0f};
GLfloat high_shininess[] = {100.0f}; //高反光
= {0.3f, 0.2f, 0.2f, 0.0f};
虚拟现实与数据可视化课程作业董元 22011207
GLint WinWidth; GLint
WinHeight;
GLuint texture[5];
//--------------------------函数声明
-------------------------------------------------- AUX_RGBImageRec *LoadBitmap(char *Filename); int LoadTexture1(); int LoadTexture2(); int LoadTexture3(); int LoadTexture4(); void initlight(void); void init(void); void DrawRoom(void); void DrawDesk(void); void DrawOtherThings(void); void DrawBlackboard(void); void display(void);
void projector_dispaly1(void); void projector_dispaly2(void); void reshape(int w,int h);
GLvoid OnKeyboard(unsignedchar key, int x, int y); GLvoid OnSpecial(int key, int x, int y); GLvoid OnIdle();
GLvoid PrintInformation();
GLvoid InitFMOD(void);
40 / 40