关于Opengl创建多个纹理

来源:互联网 发布:多空指标优化 编辑:程序博客网 时间:2024/06/15 14:17

关于纹理映射(以下简称贴图),在正六面体的各个表面贴图,网上有几种错误的示例,编译没有语法问题,但是不能被执行:

1CSDN上看到有人采用for循环,逐个创建纹理,代码如下:

char *pictures[] = { // 创建一个位图名称数组,对应6幅位图
   "Data/No1.bmp", 
   "Data/No2.bmp", 
   "Data/No3.bmp", 
   "Data/No4.bmp", 
   "Data/No5.bmp", 
   "Data/No6.bmp"
};
for(int i=0; i<6; i++) // 遍历位图名称数组,根据位图名称分别生成
{
   if (TextureImage[i]=LoadBMP(pictures[i])) // 加载位图i成功,修改状态标志变量StatusTRUE
   {
     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_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
   }

    if (TextureImage[i])         // 释放位图数组占用的内存空间

 {
    if (TextureImage[i]->data)       
    {
     free(TextureImage[i]->data);    
    }

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

}

 

2.有人用数组名称来创建纹理,如下所示:

GLuint texture[6]; // Storage For One Texture ( NEW ) 定义6个纹理,为6个纹理分配空间

glGenTextures(5, texture); // Create The Texture  创建纹理

 

正确的方法:

GLuinttexture[6];// Storage For One Texture ( NEW ) 定义6个纹理,为6个纹理分配空间

glGenTextures(5, &texture[0]);// Create The Texture  创建纹理

for(int i=0;i<6;i++)

{

if(TextureImage[i]=LoadBMP(picture[i]) ) //加载位图成功,则修改状态标志变量StatusTRUE

{    

Status=TRUE;// Set The Status To TRUE

// Typical Texture Generation Using Data From The Bitmap使用来自位图数据生成 的典型纹理

glBindTexture(GL_TEXTURE_2D, texture[i]);       //纹理名字 texture[0] 绑定到纹理目标上。2D纹理只有高度(在 轴上)和宽度(在 轴上)

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); //线性滤波

}                

效果图如下,可自由旋转,放大缩小:


0 0
原创粉丝点击