简单的freeimage与opengl示例

时间:2013-07-21 10:01:33

标签: opengl glfw freeimage

有人可以给出一个带有freeimage(使用opengl)和glfw3的简单示例吗?

使用image er("io.png"); er->gen();时,只渲染blackscree

程序代码

    class image
    {
    public:
        FREE_IMAGE_FORMAT format;
        FIBITMAP * img;
        GLubyte* texture;
        char* pixels;
        GLuint texID;
        int w,h;
        image(char* cr){
            format = FreeImage_GetFileType(cr);
            img = FreeImage_Load(format,cr);

            w = FreeImage_GetWidth(img);
            h = FreeImage_GetHeight(img);
            cout << w << " " << h << endl;
            pixels = (char*)FreeImage_GetBits(img);
        }
        void gen()
        {
            glGenTextures(1,&texID);
            glBindTexture(GL_TEXTURE_2D,texID);
            glTexImage2D(GL_TEXTURE_2D,0,GL_BGR,w,h,0,GL_BGR,GL_TEXTURE_2D,pixels);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

        }
    };

我正在尝试将图像用作背景opengl应用程序

1 个答案:

答案 0 :(得分:0)

FreeImage_GetBits()函数返回指向以FreeImage内部格式存储的数据的指针。每条扫描线通常与4字节边界对齐。当你有两个纹理时,这将正常工作。但是,对于NPOT纹理,您需要为OpenGL指定正确的解包对齐。

FreeImage中还有另一个函数可以让你得到未对齐的紧密排列的像素数组:FreeImage_ConvertToRawBits()。使用它。