• 大小: 356KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: 其他
  • 标签:

资源简介

做的是把一个旋转立方体的6个面贴上6幅不同的图片,设置了两个键盘控制,一个是通过glutKeyboardFunc(keyboard);来控制灯光的开和关,用glutSpecialFunc(special);来分别改变立方体延x,y,z轴的旋转角度。

资源截图

代码片段和文件信息

#pragma comment (lib“glaux.lib“) 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

GLuint texture[6];    //存储纹理数据
GLfloat x = 0.0fy = 0.0fz = 0.0f;//旋转角度
GLfloat deltax = 0.0fdeltay = 0.0f;//旋转变化量
GLfloat depth = 0.0f;//缩放变化量
bool lightlp;
GLfloat LightAmbient[] = {0.0f0.0f1.0f1.0f};//环境光颜色:蓝色
GLfloat LightDiffuse[] = {1.0f1.0f1.0f1.0f};//散射光颜色
GLfloat LightPosition[] = {0.0f0.0f2.0f1.0f};//指定光源的位置

AUX_RGBImageRec *LoadBMP(char *Filename) // 载入位图图象 
{
FILE *File=NULL;

if (!Filename) //确定给定的文件名有效
{
return NULL; // 如果没提供,返回 NULL   
}

File = fopen(Filename“r“); // 打开文件

if (File) 
{
fclose(File); // 关闭文件句柄
File = NULL;
return auxDIBImageLoad(Filename);       // 载入位图并返回指针
}

return NULL; // 如果载入失败,返回 NULL   
}

int LoadGLTextures()         // 根据加载的位图创建纹理
{
int Status=FALSE;         // 指示纹理创建是否成功的标志

AUX_RGBImageRec *TextureImage[6];     // 创建一个纹理图像数组,这里指定数组大小为6

memset(TextureImage0sizeof(void *)*6);           // 初始化纹理图像数组,为其分配内存

char *pictures[] = { // 创建一个位图名称数组,对应6幅位图
“d:/我的文档/Visual Studio 2005/Projects/黄美燕的作业/Data/data1.bmp“
“d:/我的文档/Visual Studio 2005/Projects/黄美燕的作业/Data/data2.bmp“
“d:/我的文档/Visual Studio 2005/Projects/黄美燕的作业/Data/data3.bmp“
“d:/我的文档/Visual Studio 2005/Projects/黄美燕的作业/Data/data4.bmp“
“d:/我的文档/Visual Studio 2005/Projects/黄美燕的作业/Data/data5.bmp“
“d:/我的文档/Visual Studio 2005/Projects/黄美燕的作业/Data/data6.bmp“
};
for(int i=0; i<6; i++) // 遍历位图名称数组,根据位图名称分别生成
{
if (TextureImage[i]=LoadBMP(pictures[i])) // 加载位图i成功,修改状态标志变量Status为TRUE
{
Status=TRUE;       

glGenTextures(1 &texture[i]);     // 为第i个位图创建纹理
glBindTexture(GL_TEXTURE_2D texture[i]); // 将生成的纹理的名称绑定到指定的纹理上
glTexImage2D(GL_TEXTURE_2D 0 3 TextureImage[i]->sizeX TextureImage[i]->sizeY 0 GL_RGB GL_UNSIGNED_BYTE TextureImage[i]->data);//用来指定二维纹理图像
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_LINEAR);//实现线形滤波的功能,当纹理映射到图形表面以后,如果因为其它条件的设置导致纹理不能更好地显示的时候,进行过滤,按照指定的方式进行显示,可能会过滤掉显示不正常的纹理像素。
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_LINEAR);//线性滤波

}

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

free(TextureImage[i]); // 释放图像结构       
}
}
return Status;          // 创建纹理并加载,返回成功或者失败的标志Status
}

void reshape(int wint h)
{
glViewport(00(GLsizei)w(GLsizei)h);// 指定视口的位置和大小
glMatrixMode(GL_PROJECTION);// 切换当前矩阵到投影矩阵
glLoadIdentity();// 设置投影矩阵为一个单位矩阵
gluPerspective(6015-5);//设置透视投影矩阵
glMatrixMode(GL_MODELVIEW);// 切换当前矩形到模型视景矩阵
glLoadIdentity();// 设置模型视景矩阵为一个单位矩阵
gluLookAt(0.00.010.00.00.00.00.01.00.0);//设置眼睛参数
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
glPushMatrix()

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      10413  2011-01-06 10:17  opengl纹理贴图\aa.cpp

     文件     196662  2011-01-04 12:48  opengl纹理贴图\Data\data1.bmp

     文件     196662  2011-01-04 12:48  opengl纹理贴图\Data\data2.bmp

     文件     196662  2011-01-04 12:48  opengl纹理贴图\Data\data3.bmp

     文件     196662  2011-01-04 12:48  opengl纹理贴图\Data\data4.bmp

     文件     196662  2011-01-04 12:48  opengl纹理贴图\Data\data5.bmp

     文件     196662  2011-01-04 12:49  opengl纹理贴图\Data\data6.bmp

    ..A.SH.     82944  2011-01-04 12:49  opengl纹理贴图\Data\Thumbs.db

     目录          0  2011-03-11 17:04  opengl纹理贴图\Data

     目录          0  2011-03-11 17:04  opengl纹理贴图

----------- ---------  ---------- -----  ----

              1273329                    10


评论

共有 条评论

相关资源