虚拟现实与数据可视化课程作业董元 22011207
}
{ }
// 以只读方式打开文件测试文件是否能够打开 File=fopen(Filename,\); // 文件是否存在 if (File) { }
// 文件装入失败,返回NULL returnNULL;
// 存在,则关闭文件 fclose(File);
// 装入测试过已存在的文件
returnauxDIBImageLoad(Filename);
returnNULL;
/***************函数名称:
LoadTexture1********************************************************* ****************函数作用:装入位图文件并作为纹理贴图********************************************/ int LoadTexture1() {
int Status=FALSE;
AUX_RGBImageRec *TextureImage=0; glGenTextures(1, &texture[0]); {
Status=TRUE;
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); if (TextureImage) {
if (TextureImage->data) { }
11 / 40
if (TextureImage=LoadBitmap(\))
TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
// 释放资源
free (TextureImage->data);
虚拟现实与数据可视化课程作业董元 22011207
}
}
}
free(TextureImage);
return Status;
/***************函数名称:
LoadTexture2********************************************************* ****************函数作用:装入位图文件并作为纹理贴图********************************************/ int LoadTexture2() { }
/***************函数名称:
LoadTexture3********************************************************* ****************函数作用:装入位图文件并作为纹理贴图********************************************/ int LoadTexture3() {
int Status=FALSE;
12 / 40
int Status=FALSE;
AUX_RGBImageRec *TextureImage=0; glGenTextures(2, &texture[1]); { }
return Status;
Status=TRUE;
if (TextureImage=LoadBitmap(\))
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); if (TextureImage) { }
if (TextureImage->data) { }
free(TextureImage);
free (TextureImage->data);
// 释放资源
TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
AUX_RGBImageRec *TextureImage=0; glGenTextures(1, &texture[2]);
虚拟现实与数据可视化课程作业董元 22011207
}
if (TextureImage=LoadBitmap(\)) { }
return Status;
Status=TRUE;
glBindTexture(GL_TEXTURE_2D, texture[2]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); if (TextureImage) { }
if (TextureImage->data) { }
free(TextureImage);
free (TextureImage->data);
// 释放资源
TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
/***************函数名称:
LoadTexture4********************************************************* ****************函数作用:装入位图文件并作为纹理贴图********************************************/ int LoadTexture4() {
int Status=FALSE;
AUX_RGBImageRec *TextureImage=0; glGenTextures(1, &texture[3]); {
Status=TRUE;
glBindTexture(GL_TEXTURE_2D, texture[3]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TextureImage->sizeX, glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); if (TextureImage) {
if (TextureImage->data) { }
13 / 40
if (TextureImage=LoadBitmap(\))
TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
// 释放资源
free (TextureImage->data);
虚拟现实与数据可视化课程作业董元 22011207
free(TextureImage);
}
}
return Status;
}
/***************函数名称:
intlight************************************************************ ****************函数作用:初始化灯光设置
*******************************************************/ void initlight(void) {
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,model_ambient); glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE); glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_POSITION,light_position0); glLightfv(GL_LIGHT0,GL_AMBIENT,mat_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light); glLightfv(GL_LIGHT0,GL_SPECULAR,white_light);
glLightfv(GL_LIGHT6,GL_POSITION,light_position6); glLightfv(GL_LIGHT6,GL_AMBIENT,mat_ambient); glLightfv(GL_LIGHT6,GL_DIFFUSE,white_light); glLightfv(GL_LIGHT6,GL_SPECULAR,white_light);
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
}
/***************函数名称:
init**************************************************************** ****************函数作用:初始化设置
**********************************************************/ void init(void) { glClearColor(0,0,0,0); glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
LoadTexture1();
14 / 40
虚拟现实与数据可视化课程作业董元 22011207
}
initlight();
glShadeModel(GL_SMOOTH);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); //指定材料着色的面 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); //指定材料对镜面光的反射 glEnable(GL_DEPTH_TEST);// LoadTexture1();//载入纹理1 LoadTexture2();//载入纹理2 LoadTexture3();//载入纹理3 LoadTexture4();//载入纹理4
/***************函数名称:
DrawRoom************************************************************ ****************函数作用:绘制教室墙面以及两侧石柱*********************************************/ void DrawRoom() {
glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse1); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
//----------------开始绘制房间
---------------------------------------------------------
15 / 40
glColor3f(0.8f, 1.0f, 0.8f);
glBegin(GL_QUADS); //glNormal3f用于定义点的法向量
glNormal3f(0.0f, 1.0f, 0.0f);
//绘制地板
glVertex3f(-50.0f, -30.0f, -80.0f); glVertex3f(-50.0f, -30.0f, 20.0f); glVertex3f( 50.0f, -30.0f, 20.0f); glVertex3f( 50.0f, -30.0f, -80.0f); glEnd();
glBegin(GL_QUADS); glColor3f(0.3,0.3,0.3);
glNormal3f(0.0f, -1.0f, 0.0f); glVertex3f(-50.0f, 30.0f, 20.0f); glVertex3f(-50.0f, 30.0f, -80.0f); glVertex3f( 50.0f, 30.0f, -80.0f); glVertex3f( 50.0f, 30.0f, 20.0f);
//绘制天花板
glEnd();