資源簡介
這是我用openGL繪制的虛擬教室,有各種教室必備物品,代碼已測試通過,能實現漫游功能,含可執行程序和源碼
代碼片段和文件信息
#include
#include
#include
#include?
#include?
/*******************************定義程序中所用的常數變量******************************************/
GLfloat?light_position1[]={028-201.0};
GLfloat?model_ambient[]={0.05f0.05f0.05f1.0f};
GLfloat?mat_specular[]={0.81.01.01.0};
GLfloat?mat_shininess[]={5.0};
GLfloat?mat_ambient[]={0.10.10.11};
GLfloat?white_light[]={1.01.01.01.0};
GLfloat?light[]={1.01.01.01};
GLfloat?light_position0[]={028201.0};
GLfloat no_mat[]=?{0.0f?0.0f?0.0f?1.0f};
GLfloat mat_diffuse1[]=?{0.1f?0.5f?0.8f?1.0f};
GLfloat no_shininess[]=?{0.0f};
GLfloat?sound[]={0.90.90.91};
GLint WinWidth;
GLint WinHeight;
/************************定義視點結構*********************************************************/
typedef?struct?EyePoint
{
GLfloat x;
GLfloat?y;
GLfloat?z;
}EyePoint;
EyePoint? myEye;
EyePoint????vPoint;
GLfloat?pro_up_down=29.0f;
GLfloat?vAngle=0;
/****************************載入位圖作為紋理的相關函數************************************/
#define?BMP_Header_Length?54
void?grab(void)
{
FILE*?pDummyFile;?FILE*?pWritingFile;?
GLubyte*?pPixelData;
GLubyte?BMP_Header[BMP_Header_Length];?
GLint????i?j;
GLint????PixelDataLength;
//?計算像素數據的實際長度
i?=?WinWidth?*?3;??//?得到每一行的像素數據長度
while(?i%4?!=?0?)??????//?補充數據,直到?i?是的倍數
++i; ??????????????????????//?本來還有更快的算法,
PixelDataLength?=?i?*?WinHeight;//?但這里僅追求直觀,對速度沒有太高要求
????pPixelData?=?(GLubyte*)malloc(PixelDataLength);//?分配內存和打開文件
????if(?pPixelData?==?0?)
exit(0);
pDummyFile?=?fopen(“dummy.bmp“?“rb“);
if(?pDummyFile?==?0?)
exit(0);
pWritingFile?=?fopen(“grab.bmp“?“wb“);
if(?pWritingFile?==?0?)
exit(0);
glPixelStorei(GL_UNPACK_ALIGNMENT?4);?
glReadPixels(0?0?WinWidth?WinHeightGL_BGR_EXT?GL_UNSIGNED_BYTE?pPixelData);
//?把?dummy.bmp?的文件頭復制為新文件的文件頭
fread(BMP_Header?sizeof(BMP_Header)?1?pDummyFile);?
fwrite(BMP_Header?sizeof(BMP_Header)?1?pWritingFile);?
fseek(pWritingFile?0x0012?SEEK_SET);
i?=?WinWidth;?
j?=?WinHeight;
fwrite(&i?sizeof(i)?1?pWritingFile);
fwrite(&j?sizeof(j)?1?pWritingFile);
fseek(pWritingFile?0?SEEK_END);
fwrite(pPixelData?PixelDataLength?1?pWritingFile);
fclose(pDummyFile);?fclose(pWritingFile);?free(pPixelData);
}
//判斷一個數是否是2的整數次方
int?power_of_two(int?n)
{
if(?n?<=?0?)
return?0;
????return?(n?&?(n-1))?==?0;
}
/****************************載入一副位圖作為紋理,返回的是紋理編號**********************************************/
GLuint?load_texture(const?char*?file_name)
{
????GLint?width?height?total_bytes;?
GLubyte*?pixels?=?0;
GLint?last_texture_ID=0;
GLuint?texture_ID?=?0;
//?打開文件,如果失敗,返回
????FILE*?pFile?=?fopen(file_name?“rb“);
if(?pFile?==?0?)
return?0;
//?讀取文件中圖象的寬度和高度
fseek(pFile?0x0012?SEEK_SET);
fread(&width?4?1?pFile);
fread(&height?4?1?pFile);
fseek(pFile?BMP_Header_Length?SEEK_SET);
//?計算每行像素所占字節數,并根據此數據計算總像素字節數
{
????GLint?line_bytes?=?width?*?3;
wh
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???39386934??2014-12-05?18:03??虛擬教室_張琦_22012206\可執行部分\airconditionback.bmp
?????文件?????180150??2014-12-05?18:43??虛擬教室_張琦_22012206\可執行部分\airconditionfront.bmp
?????文件??????98358??2007-12-09?14:41??虛擬教室_張琦_22012206\可執行部分\backwall.bmp
?????文件?????481338??2014-12-08?18:44??虛擬教室_張琦_22012206\可執行部分\blackboard.bmp
?????文件?????208614??2014-12-11?20:28??虛擬教室_張琦_22012206\可執行部分\ceiling.bmp
?????文件??????90014??2014-12-13?11:21??虛擬教室_張琦_22012206\可執行部分\clock.bmp
?????文件?????196662??2014-11-29?20:23??虛擬教室_張琦_22012206\可執行部分\desk.bmp
?????文件???39386934??2014-12-01?21:30??虛擬教室_張琦_22012206\可執行部分\door.bmp
?????文件?????145254??2014-12-08?19:49??虛擬教室_張琦_22012206\可執行部分\floor.bmp
?????文件?????145254??2014-12-08?19:47??虛擬教室_張琦_22012206\可執行部分\gaodi.bmp
?????文件?????217183??2014-12-13?21:47??虛擬教室_張琦_22012206\可執行部分\Myclassroom.exe
?????文件?????383096??2007-12-07?13:10??虛擬教室_張琦_22012206\可執行部分\pole.bmp
?????文件?????389454??2014-12-08?19:52??虛擬教室_張琦_22012206\可執行部分\sdesk.bmp
?????文件??????33558??2007-12-09?13:42??虛擬教室_張琦_22012206\可執行部分\sound.bmp
?????文件????1407654??2014-12-08?20:27??虛擬教室_張琦_22012206\可執行部分\window.bmp
?????文件???39386934??2014-12-05?18:03??虛擬教室_張琦_22012206\工程部分\airconditionback.bmp
?????文件?????180150??2014-12-05?18:43??虛擬教室_張琦_22012206\工程部分\airconditionfront.bmp
?????文件??????98358??2007-12-09?14:41??虛擬教室_張琦_22012206\工程部分\backwall.bmp
?????文件?????353110??2014-12-13?13:43??虛擬教室_張琦_22012206\工程部分\blackboard.bmp
?????文件?????208614??2014-12-11?20:28??虛擬教室_張琦_22012206\工程部分\ceiling.bmp
?????文件??????90014??2014-12-13?11:21??虛擬教室_張琦_22012206\工程部分\clock.bmp
?????文件?????217183??2014-12-13?21:47??虛擬教室_張琦_22012206\工程部分\Debug\Myclassroom.exe
?????文件?????329728??2014-12-13?21:47??虛擬教室_張琦_22012206\工程部分\Debug\Myclassroom.ilk
?????文件??????77534??2014-12-13?21:47??虛擬教室_張琦_22012206\工程部分\Debug\Myclassroom.obj
????I.A....???3705128??2014-12-13?21:47??虛擬教室_張琦_22012206\工程部分\Debug\Myclassroom.pch
?????文件?????517120??2014-12-13?21:47??虛擬教室_張琦_22012206\工程部分\Debug\Myclassroom.pdb
?????文件?????140288??2014-12-13?21:48??虛擬教室_張琦_22012206\工程部分\Debug\vc60.idb
?????文件??????77824??2014-12-13?21:47??虛擬教室_張琦_22012206\工程部分\Debug\vc60.pdb
?????文件?????196662??2014-11-29?20:23??虛擬教室_張琦_22012206\工程部分\desk.bmp
?????文件???39386934??2014-12-13?14:42??虛擬教室_張琦_22012206\工程部分\door.bmp
............此處省略21個文件信息
評論
共有 條評論