• 大小: 2.52MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-12
  • 语言: 其他
  • 标签:

资源简介

Nehe第6课纹理映射,如何把纹理映射到立方体的六个面。

资源截图

代码片段和文件信息

#include 		// Windows的头文件
#include  // 包含最新的gl.hglu.h库
#include  // 包含OpenGL实用库
#include  // GLaux库的头文件
#include  // 标准输入/输出库的头文件

GLfloat xrot;
GLfloat yrot;
GLfloat zrot;
GLuint texture[1]; //存储纹理,如果纹理大于1个改为相应数值
HGLRC hRC=NULL; //窗口着色描述表句柄
HDC hDC=NULL; //设备渲染描述表句柄
HWND hWND=NULL; //窗口句柄
HINSTANCE hInstance; //保存程序的实例

bool keys[256];
bool active=TRUE; //窗口的活动状态,缺省为true
bool fullscreen=TRUE; //全屏的缺省状态=true
GLfloat rtri=7; //用于三角形角度
GLfloat rquad=45; //用于四边形角度
LRESULT CALLBACK WndProc(HWND UINTWPARAM LPARAM);


/* 在 ReSizeGLScene() 之前,我们增加了下面这一段代码。这段代码用来加载位图文件。
 * 如果文件不存在,返回 NULL 告知程序无法加载位图。
 * 关于用作纹理的图像。图像的宽和高必须是2的n次方;宽度和高度最小必须是64象素;
 * 并且出于兼容性的原因,图像的宽度和高度不应超过256象素。如果您的原始素材的宽度
 * 和高度不是64128256象素的话,使用图像处理软件重新改变图像的大小。*/
AUX_RGBImageRec *LoadBMP(char*Filename)
{
// 首先,我们创建一个文件句柄。句柄是个用来鉴别资源的数值,它使程序能够
//访问此资源。我们开始先将句柄设为 NULL 。
FILE *File=NULL;
if (!Filename) //确保文件名已提供
{
return NULL;
}
File=fopen(Filename“r“);
if (File)// 文件存在么?
{
fclose(File);
return auxDIBImageLoad(Filename); // 载入位图并返回指针
}
return NULL;
}
int LoadGLTextures()//载入位图(调用上面的代码)并转换成纹理
{
//然后设置一个叫做 Status 的变量。我们使用它来跟踪是否能够载入位图以及能否创建纹理。 
//Status 缺省设为 FALSE (表示没有载入或创建任何东东)。
int Status=FALSE;
//创建存储位图的图像记录。次记录包含位图的宽度、高度和数据。
AUX_RGBImageRec *TextureImage[1]; // 创建纹理的存储空间
//清除图像记录,确保其内容为空
memset(TextureImage0sizeof(void *)*1); // 将指针设为 NULL
if (TextureImage[0]=LoadBMP(“Data/Nehe.bmp“))
{
Status=true;

/*
使用TextureImage[0] 的数据创建纹理。第一行 glGenTextures(1 &texture[0]) 告诉OpenGL
我们想生成一个纹理名字(如果您想载入多个纹理,加大数字)。
第二行 glBindTexture(GL_TEXTURE_2D texture[0]) 告诉OpenGL将纹理名字 texture[0] 绑定
到纹理目标上。2D纹理只有高度(在 Y 轴上)和宽度(在 X 轴上)。主函数将纹理名字指派给纹理
数据。本例中我们告知OpenGL,&texture[0] 处的内存已经可用。我们创建的纹理将存储在 
&texture[0] 的 指向的内存区域。
*/
glGenTextures(1&texture[0]);
glBindTexture(GL_TEXTURE_2Dtexture[0]);
/*
下面一行告诉OpenGL此纹理是一个2D纹理 ( GL_TEXTURE_2D )。参数“0”代表图像的详细程度,
通常就由它为零去了。参数三是数据的成分数。因为图像是由红色数据,绿色数据,蓝色数据
三种组分组成。 TextureImage[0]->sizeX 是纹理的宽度。如果您知道宽度,您可以在这里填入,
但计算机可以很容易的为您指出此值。 TextureImage[0]->sizey 是纹理的高度。参数零是边框
的值,一般就是“0”。 GL_RGB 告诉OpenGL图像数据由红、绿、蓝三色数据组成。
GL_UNSIGNED_BYTE 意味着组成图像的数据是无符号字节类型的。最后... TextureImage[0]->data
告诉OpenGL纹理数据的来源。此例中指向存放在 TextureImage[0] 记录中的数据。
*/
glTexImage2D(GL_TEXTURE_2D03TextureImage[0]->sizeXTextureImage[0]->sizeY0
GL_RGBGL_UNSIGNED_BYTETextureImage[0]->data);
/*
下面的两行告诉OpenGL在显示图像时,当它比放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER )或
缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )时OpenGL采用的滤波方式。通常这两种情况下
我都采用 GL_LINEAR 。这使得纹理从很远处到离屏幕很近时都平滑显示。使用 GL_LINEAR 需要
CPU和显卡做更多的运算。如果您的机器很慢,您也许应该采用 GL_NEAREST 。过滤的纹理在放大
的时候,看起来斑驳的很『译者注:马赛克啦』。您也可以结合这两种滤波方式。在近处时使用 
GL_LINEAR ,远处时 GL_NEAREST 。
*/
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_LINEAR);
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_LINEAR);//线性滤波

}
/*
现在我们释放

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

     文件     196664  2000-03-06 02:10  Nehe第6课纹理映射20120318\Data\NeHe.bmp

     文件    2769920  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\Nehe.bsc

     文件     217158  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\Nehe.exe

     文件     349768  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\Nehe.ilk

     文件     109832  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\nehe.obj

     文件    6183932  2012-03-18 12:19  Nehe第6课纹理映射20120318\Debug\Nehe.pch

     文件     631808  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\Nehe.pdb

     文件          0  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\nehe.sbr

     文件     156672  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\vc60.idb

     文件     110592  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug\vc60.pdb

     文件      18624  2012-03-18 12:26  Nehe第6课纹理映射20120318\nehe.cpp

     文件       3959  2012-03-18 10:59  Nehe第6课纹理映射20120318\Nehe.dsp

     文件        531  2012-03-03 16:22  Nehe第6课纹理映射20120318\Nehe.dsw

     文件      50176  2012-03-18 12:26  Nehe第6课纹理映射20120318\Nehe.ncb

     文件      54784  2012-03-18 12:26  Nehe第6课纹理映射20120318\Nehe.opt

     文件       1307  2012-03-18 12:26  Nehe第6课纹理映射20120318\Nehe.plg

     目录          0  2012-03-18 11:54  Nehe第6课纹理映射20120318\Data

     目录          0  2012-03-18 12:26  Nehe第6课纹理映射20120318\Debug

     目录          0  2012-03-18 12:26  Nehe第6课纹理映射20120318

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

             10855727                    19


评论

共有 条评论

相关资源