首页>
知识库>
详情

使用FreeImage库加载纹理

2020-08-05 来源:CloudBest 阅读量: 0
关键词:

    FreeImage是按GPL和FIPL发行的自由软件。目前支持26种图像格式,如bmp,jpeg,gif,png,tiff等等。可以在Windows, Linux or Mac OS X 平台上面使用。
    要使用FreeImage当然我们首先包含其头文件。
    #include "FreeImage.h"
    然后在工程的附加依赖项中添加 FreeImage.lib
    使用FreeImage加载纹理的代码如下:
    const char textName[64] = ".\\woodfloor.tga";
    // 获得图像文件的类型
    FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(textName, 0);
    // 加载此文件
    FIBITMAP *dib = FreeImage_Load(fifmt, textName,0);
    // 对于不是24位的图片,强制转换成24位 , RGB
    dib = FreeImage_ConvertTo24Bits(dib);
    if( dib != NULL )
    {
    glGenTextures( 1, &g_textureID );
    glBindTexture( GL_TEXTURE_2D, g_textureID );
    glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    //为纹理数据分配空间
    BYTE *bits = new BYTE[FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib) * 3];
    //获得纹理数据的指针
    BYTE *pixels = (BYTE*)FreeImage_GetBits(dib);
    //图像文件的储存顺序是 BGR, 我们需要把它转换成RGB来生成纹理。
    for(int pix=0; pix {
    bits[pix*3+0]=pixels[pix*3+2];
    bits[pix*3+1]=pixels[pix*3+1];
    bits[pix*3+2]=pixels[pix*3+0];
    }
    //创建纹理
    glTexImage2D( GL_TEXTURE_2D, 0, 3, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), 0,
    GL_RGB, GL_UNSIGNED_BYTE, bits );
    //释放
    FreeImage_Unload(dib);
    delete bits;
    }