SETP1
:读入位图文件
//
读入位图文件
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}
return NULL;
}
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}
return NULL;
}
AUX_RGBImageRec *TextureImage[1];//这个结构
将持有图像的宽度, 高度和数据
TextureImage[0]=LoadBMP("Data/NeHe.bmp")//
载入位图
SETP 2:
产生所需数量的纹理名
glGenTextures(1, //
需要产生纹理名的数目
&texture[0] ); //
保存纹理名的数组
SETP 3:
创建纹理
创建纹理这个步骤分为几个小步,对于每一个纹理来说它们必须作为原子操作一起调用,然后才能设置第二个纹理
1.创建纹理对象
glBindTexture(GL_TEXTURE_2D, texture[0]); // 给texture data 分配name。
glBindTexture(GL_TEXTURE_2D, texture[0]); // 给texture data 分配name。
2. 指定一个二维纹理
glTexImage2D(GL_TEXTURE_2D,
0,//LOD
级数
3,//
指定纹素中存储哪些分量(R,G,B,A,深度,辉度或强度)
//这里只指定有关RGBA数据成分,1:选择R; 2:选择R A;3:选择R G B;4:选择R G B A;
TextureImage[0]->sizeX,
//这里只指定有关RGBA数据成分,1:选择R; 2:选择R A;3:选择R G B;4:选择R G B A;
TextureImage[0]->sizeX,
TextureImage[0]->sizeY,
0,//
纹理边界
GL_RGB,//
图像数据格式
GL_UNSIGNED_BYTE,//
像素数据类型
TextureImage[0]->data);
3.设置过滤方式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);// Linear Filtering
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);// Linear Filtering
SETP 4
:使用纹理
glEnable(GL_TEXTURE_2D);
// Enable Texture Mapping
当绑定后纹理对象可以用一个的无符号整数表示。
glBindTexture(GL_TEXTURE_2D, texture[0]); // Select Our Texture
glBegin() 和 glEnd()之间为每个顶点设置纹理坐标,glTexCoord2f 的第一个参数是x坐标0.0f 就是
纹理的左边,1.0f 就是纹理的右边。glTexCoord2f 的第二个参数是y坐标0.0f 就是纹理的底边,而1.0f 就是纹理的顶边。
如果想变换纹理,
就需要绑定另一个纹理。
有一点很重要,
那就是绑定纹理操作不能在
glBegin()
和
glEnd()
之间进行。