opengl绘制教室大作业源代码wp

更新时间:2023-09-21 09:45:01 阅读量: 工程科技 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

wp.h

#include // Windows的头文件 #include // 包含OpenGL实用库 #include // 标准输入/输出库的头文件 #include // GLaux库的头文件 #include #include #include #include

//..................................定义变量区............................................................//

//.............................用于场景漫游有关变量........................................// GLfloat xrot=0.0f; // X 旋转量 GLfloat yrot=0.0f; // Y 旋转量 GLfloat x=0.0f; // X 平移量 GLfloat y=0.0f; // Y 平移量 GLfloat z=-40.0f; // 深入屏幕的距离 //.............................用于键盘操作有关变量.......................................// BOOL light=TRUE; // 光源的开/关

BOOL lp; // L键按下了么?

BOOL fp; // F键按下了么?

BOOL TurnOn=FALSE; // 开灯 GLUquadricObj *qobj;

int fantheta=0; // 风扇转过角度

HGLRC hRC=NULL; // 窗口着色描述表句柄

HDC hDC=NULL; // OpenGL渲染描述表句柄

HWND hWnd=NULL; // 保存我们的窗口句柄

HINSTANCE hInstance; // 保存程序的实例

bool keys[256]; // 保存键盘按键的数组

bool active=TRUE; // 窗口的活动标志,缺省为TRUE

bool fullscreen=TRUE; // 全屏标志缺省,缺省设定成全屏模式

//.................................光照材质有关变量......................................//

GLfloat light_Ambient[]= { 0.1f, 0.1f, 0.1f, 1.0f }; // 环境光参数 GLfloat light_Diffuse[]= { 1.0f, 1.0f, 0.45f, 1.0f }; // 漫射光参数 GLfloat light_position[]={0.0,29.9,0.0,1.0}; // 光源位置 GLfloat light_position1[]={20.0,29.9,0.0,1.0};

GLfloat mat_ambient[]={0.05f,0.05f,0.05f,1.0f}; // 材质环境光参数

GLfloat mat_specular[]={0.8,1.0,1.0,1.0}; // 材质镜面光参数

GLfloat mat_shininess[]={5.0};

GLfloat white_light[]={1.0,1.0,1.0,1.0}; // 光 GLfloat no_mat[]= {0.0f, 0.0f, 0.0f, 1.0f}; // 无材质色 GLfloat no_shininess[]= {0.0f}; // 无反光 GLfloat mat_diffuse[]= {1.0f, 1.0f, 1.0f, 1.0f}; // 漫反射 GLfloat diffusion[]={0.521f,0.121f,0.0547f,1.0};

//......................................纹理...........................................................// GLuint texture[6]; // 7种纹理的储存空间

//.....................................时钟有关变量...................................................// GLfloat cx=35.0,cy=15.0,cz=-79.9,radius=5.0; GLfloat hradius=2.0,mradius=3.0,sradius=4.0; GLfloat sangle,mangle,hangle; GLuint second,miniter,hour; char timebuffer[9];

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc的定义

wp.cpp

#include\

//......................................创建纹理..........................................................// AUX_RGBImageRec *LoadBMP(char *Filename) // 载入位图图象 { FILE *File=NULL; // 文件句柄 if (!Filename) // 确保文件名已提供 { return NULL; // 如果没提供,返回 NULL } File=fopen(Filename,\ // 尝试打开文件 if (File) // 文件存在

么? { fclose(File); // 关闭句柄 return auxDIBImageLoad(Filename); // 载入位图并返回指针 } return NULL; } // 如果载入失败,返回 NULL

int LoadGLTextures() // 载入位图并转换成纹理 {

int Status=FALSE; // 状态指示器 AUX_RGBImageRec *TextureImage[6]; // 创建纹理的存储空间 memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL // 载入位图,检查有无错误,如果位图没找到则退出 Status=TRUE; // 将 Status 设为 TRUE

//...............................创建第一个纹理,地板.......................................// if (TextureImage[0]=LoadBMP(\ {

glGenTextures(1, &texture[0]);// 创建纹理 glBindTexture(GL_TEXTURE_2D, texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//远处采用线性滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);//近处采用MipMapped滤波 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);//绑定纹理 }

if (TextureImage[0])//纹理是否存在 { if (TextureImage[0]->data)//纹理图像是否存在 { free(TextureImage[0]->data);//释放纹理图像占用的内存 } free(TextureImage[0]);//释放图像结构

}

//...............................创建第二个纹理,墙.......................................// if (TextureImage[1]=LoadBMP(\ {

glGenTextures(1, &texture[1]); //创建纹理 glBindTexture(GL_TEXTURE_2D, texture[1]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//远处采用线性滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);//近处采用MipMapped滤波 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data);//绑定纹理 }

if (TextureImage[1])//纹理是否存在 {

if (TextureImage[1]->data)//纹理图像是否存在 { free(TextureImage[1]->data);//释放纹理图像占用的内存 } free(TextureImage[1]);//释放图像结构 }

//...............................创建第三个纹理,窗户.......................................// if (TextureImage[2]=LoadBMP(\ {

glGenTextures(1, &texture[2]);//创建纹理 glBindTexture(GL_TEXTURE_2D, texture[2]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//远处采用线性滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);//近处采用MipMapped滤波 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[2]->sizeX, TextureImage[2]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[2]->data);//绑定纹理 }

if (TextureImage[2])//纹理是否存在 { if (TextureImage[2]->data)//纹理图像是否存在 { free(TextureImage[2]->data);//释放纹理图像占用的内存 } free(TextureImage[2]);//释放图像结构

}

//...............................创建第四个纹理,门.......................................// if (TextureImage[3]=LoadBMP(\ {

glGenTextures(1, &texture[3]);//创建纹理 glBindTexture(GL_TEXTURE_2D, texture[3]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//远处采用线性滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);//近处采用MipMapped滤波 gluBuild2DMipmaps(GL_TEXTURE_2D,

3,

TextureImage[3]->sizeX,

TextureImage[3]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[3]->data);//绑定纹理 } if (TextureImage[3])//纹理是否存在 {

}

if (TextureImage[3]->data)//纹理图像是否存在 { free(TextureImage[3]->data);//释放纹理图像占用的内存 }

free(TextureImage[3]);//释放图像结构

//...............................创建第五个纹理,灯.......................................// if (TextureImage[4]=LoadBMP(\ { Status=TRUE; glGenTextures(1, &texture[4]);//创建纹理 glBindTexture(GL_TEXTURE_2D, texture[4]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//远处采用线性滤波 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);//近处采用MipMapped滤波 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[4]->sizeX, TextureImage[4]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[4]->data);//绑定纹理 }

if (TextureImage[4])//纹理是否存在 { if (TextureImage[4]->data)//纹理图像是否存在 { free(TextureImage[4]->data);//释放纹理图像占用的内存 } free(TextureImage[4]);//释放图像结构 }

本文来源:https://www.bwwdw.com/article/gy3h.html

Top