资源简介
这是我用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个文件信息
相关资源
- 基于OpenGL的3D赛车游戏的研究与实现源
- OpenGL绘制一个多边形 添加颜色
- OpenGL三维图形系统开发与实用技术 基
- OpenGL鼠标交互3D模型
- 图形学的几道基础练习计算机图形学
- 交互式计算机:图形学基于OpenGL着色
- 基于opencv与opengl实现增强现实
- OpenGl三维镂垫绘制附使用说明
- OpenGL三维图形系统开发与实用技术基
- opengl导入FBX模型代码
- OPENGL载入3DS
- opengl超级宝典第七版
- 高级着色语言GLSL渲染obj文件
- Visual Studio 搭建好的OpenGL环境GLFW3+GL
- OpenGL实现三维仿真系统
- 山东大学计算机图形学实验1
- 直线的四种裁剪算法
- Computer graphics with opengl 4th edition 计算
- 山东大学计算机图形学实验课程资源
- 计算机图形学(OpenGL版)第3版.pdf
- OpenGL SuperBible 7 pdf
- OpenGL编程指南(原书第8版) + OpenGL超
- VS2017OpenGL 配置步骤
- 读OBJ模型,加载多纹理
- OpenGL红宝书第七版带目录完整版PDF+源
- opengl自定义函数实现平移旋转缩放
- OpenGL 3D场景绘制 SiriusPrx 荒岛古堡.r
- OpenGL一个室内三维渲染OBJ文件导入和
- NeHe OpenGL Qt4教学代码
- Opengl 蘑菇、萤火虫、地形三维建模
评论
共有 条评论