• 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://whatagoodboy.blogbus.com/logs/4590963.html

    BMP图像的载入可以用于纹理贴图,这里介绍这种方法。这里用到的主要是auxDIBImageLoad函数,来自glaux.h库。所以在程序中一定要加上#include <GL\glaux.h>在工程中也要加载相关的.lib文件。代码加了注释,应该可以看懂。 

    #include <GL\glaux.h>
    #include <string>
    #include <fstream>
    using namespace std;

    GLuint texture;                            // 用来绑定纹理

    /*
     * 载入图像函数
     * 返回图像的指针,发生错误返回NULL
     * AUX_RGBImageRec是glaux库里定义的类型
     * 函数正常情况下返回一个指向图像文件的指针
     */

    AUX_RGBImageRec *LoadBMP(string filename)
    {
        fstream file;                          // 文件流,用于图像文件操作
        if(filename=="")                       // 防止文件名为空
        {
           
    return NULL;
        }
        file.open(filename.c_str(), ios::in);  // 以只读方式打开文件
        if (file)                              // 若打开成功
       
    file.close();                          // 关闭文件流
        // 返回图像文件的指针
        return auxDIBImageLoad(filename.c_str());  
        return NULL;                           // 如果前面操作失败返回NULL
    }

    /*
     * 载入BMP贴图函数
     * 一切正常返回true
     */

    int LoadTexture()
    {
        // 产生和绑定纹理
        glGenTextures(1, &texture);
        glBindTexture(GL_TEXTURE_2D, texture);
       
        // 载入纹理
        AUX_RGBImageRec *TexImage;
        TexImage = LoadBMP("example.bmp");     // 通过LoadBMP函数载入图像
        if(NULL==TexImage) return false;       // 如果失败,返回false  
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TexImage->sizeX, TexImage->sizeY,
                          0, GL_RGB, GL_UNSIGNED_BYTE, TexImage->data);
     
        // 设置纹理
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
       
        // 释放图像资源
        if(TexImage)
        {
            if(TexImage->data)
            {
                free(TexImage->data);
            }
            free(TexImage);
        } 
       
        return true;
    }


    历史上的今天:


    收藏到:Del.icio.us




    评论

  • 我也想要TGA的。。。。fairytale0305@163.com。感激不尽
    Carl回复说:
    请看这里:
    http://gpwiki.org/index.php/LoadTGACpp
    2009-10-18 16:20:17
  • 如果用unicode字符集绝对通不过编译。
    而且,glaux.h和glut.h的容易有很多冲突,如果要在这个程序里用glut.h里的函数怎么办?
    Carl回复Ellil说:
    这个例子来源于NeHe的OpenGL教程。
    http://nehe.gamedev.net/
    have a check :)
    2008-09-12 20:05:30
  • 你不说改天上传一个TGA的吗?好了吗?我想看看啊!呵喳喳
    Carl回复ruikun说:
    TGA工程有点大,有什么联系方法,我传给你
    为什么BMP图像程序用不了?
    2008-04-24 10:35:34
  • 你好,为什么我按照你上面写的做,可是编译时却老是出现错误,不知道是为什么?郁闷啊!
  • 看了nehe的opengl教程改的吧
    Carl回复ss说:
    是啊,改天上传一个TGA的
    2008-04-15 09:15:02
  • 用透视了,但是用了混合,也许看起来就别扭了。
  • 好不容易又看到一个技术blog。

    貌似没用透视?看上去很奇怪的样子。