有人可以给出一个带有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应用程序
答案 0 :(得分:0)
FreeImage_GetBits()
函数返回指向以FreeImage内部格式存储的数据的指针。每条扫描线通常与4字节边界对齐。当你有两个纹理时,这将正常工作。但是,对于NPOT纹理,您需要为OpenGL指定正确的解包对齐。
FreeImage中还有另一个函数可以让你得到未对齐的紧密排列的像素数组:FreeImage_ConvertToRawBits()
。使用它。