在OpenGL中进行多纹理贴图

参照NeHe的教程,尝试着做了一个六个面的多纹理贴图立方体,修改代码如下:

GLuint texture[6]; // Storage For Six textures ( NEW )

................

..............


adGLTextures() // 载入位图(调用上面的代码)并转换成纹理
{

int Status=FALSE; // 状态指示器
AUX_RGBImageRec *TextureImage[6]; // 创建纹理的存储空间
memset(TextureImage,0,sizeof(void *)*6); // 将指针设为 NULL
// 载入位图,检查有无错误,如果位图没找到则退出
if ((TextureImage[0]=LoadBMP("MM/01.bmp"))&&(TextureImage[1]=LoadBMP("MM/02.bmp"))&&(TextureImage[2]=LoadBMP("MM/03.bmp"))&&(TextureImage[3]=LoadBMP("MM/04.bmp"))&&(TextureImage[4]=LoadBMP("MM/05.bmp"))&&(TextureImage[5]=LoadBMP("MM/06.bmp")) )
{
Status=TRUE; // 将 Status 设为 TRUE
glGenTextures(6, &texture[0]); // 创建纹理

// 使用来自位图数据生成 的典型纹理
for(int i=0;i<6;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_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 线形滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // 线形滤波


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

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

}
}
return Status; // 返回 Status
}
.............

............

其实最关键的就是给各个纹理存储空间进行参数设计。运行效果如下所示:

在OpenGL中进行多纹理贴图_第1张图片

转载自:http://foronedream.blog.163.com/blog/static/74573080200871295652214/

你可能感兴趣的:(OpenGL)