openGL绘制虚拟教室
这是我用openGL绘制的虚拟教室,有各种教室必备物品,代码已测试通过,能实现漫游功能,含可执行程序和源码
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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可执行部分ackwall.bmp
文件 481338 2014-12-08 18:44 虚拟教室_张琦_22012206可执行部分lackboard.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工程部分ackwall.bmp
文件 353110 2014-12-13 13:43 虚拟教室_张琦_22012206工程部分lackboard.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工程部分DebugMyclassroom.exe
文件 329728 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.ilk
文件 77534 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.obj
I.A.... 3705128 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.pch
文件 517120 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.pdb
文件 140288 2014-12-13 21:48 虚拟教室_张琦_22012206工程部分Debugvc60.idb
文件 77824 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分Debugvc60.pdb
文件 196662 2014-11-29 20:23 虚拟教室_张琦_22012206工程部分desk.bmp
文件 39386934 2014-12-13 14:42 虚拟教室_张琦_22012206工程部分door.bmp
............此处省略21个文件信息
#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可执行部分ackwall.bmp
文件 481338 2014-12-08 18:44 虚拟教室_张琦_22012206可执行部分lackboard.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工程部分ackwall.bmp
文件 353110 2014-12-13 13:43 虚拟教室_张琦_22012206工程部分lackboard.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工程部分DebugMyclassroom.exe
文件 329728 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.ilk
文件 77534 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.obj
I.A.... 3705128 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.pch
文件 517120 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分DebugMyclassroom.pdb
文件 140288 2014-12-13 21:48 虚拟教室_张琦_22012206工程部分Debugvc60.idb
文件 77824 2014-12-13 21:47 虚拟教室_张琦_22012206工程部分Debugvc60.pdb
文件 196662 2014-11-29 20:23 虚拟教室_张琦_22012206工程部分desk.bmp
文件 39386934 2014-12-13 14:42 虚拟教室_张琦_22012206工程部分door.bmp
............此处省略21个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)