您的位置:首页 > 运维架构

关于Opengl创建多个纹理

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

1:CSDN上看到有人采用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成功,修改状态标志变量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_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  创建纹理

 

正确的方法:

GLuint
texture[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]) ) //加载位图成功,则修改状态标志变量Status为TRUE

{    

Status=TRUE;
// Set The Status To TRUE

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

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

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

}                

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息