openGL绘制虚拟教室


这是我用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可执行部分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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)