阅读新闻

使用FreeImage库加载纹理

[日期:2007-07-30] 来源:www.azure.com.cn  作者: [字体: ]
         
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<FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); 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;
  }


阅读:
录入:admin

评论 】 【 推荐 】 【 打印
上一篇:创造anisotropic lightting 效果.
下一篇:解决Z-fighting, 使用Polygon Offset
相关新闻      
本文评论       全部评论
发表评论
字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款