Qt + OpenGL的一些简单例子

因为最近学习opengl,看的都是windows下的opengl例子代码,在windows下用AUX_RGBImageRec来存储图像文件的数据,在Linux下没有该函数和库,所以我找到了一个替换该方案的办法,使用freeimage库,该库简单好用。

在原文件中定义如下一个结构:
struct _AUX_RGBImageRec {
unsigned long sizeX;
unsigned long sizeY;
unsigned char *data;
};

typedef struct _AUX_RGBImageRec AUX_RGBImageRec;

其中sizeX是图像的宽度,sizeY是图像的高度,data是图像的数据。

下面这个函数代替windows下的auxDIBImageLoad函数:
static gboolean LoadTexture(const char* filename,
AUX_RGBImageRec* texture_image) {

FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(filename, 0);
FIBITMAP *dib = FreeImage_Load(fifmt, filename, 0);
dib = FreeImage_ConvertTo24Bits(dib);

int width = FreeImage_GetWidth(dib);
int height = FreeImage_GetHeight(dib);

BYTE *pixels = (BYTE*) FreeImage_GetBits(dib);
int pix = 0;

if (texture_image == NULL)
return FALSE;

texture_image->data = (BYTE *) malloc(width * height * 3);
texture_image->sizeX = width;
texture_image->sizeY = height;

for (pix = 0; pix < width * height; pix++) {
texture_image->data[pix * 3 + 0] = pixels[pix * 3 + 2];
texture_image->data[pix * 3 + 1] = pixels[pix * 3 + 1];
texture_image->data[pix * 3 + 2] = pixels[pix * 3 + 0];

}

FreeImage_Unload(dib);

return TRUE;
}

有需要的可以使用,我已经试过,没有问题

作者: zft19   发布时间: 2010-10-17