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;
}
有需要的可以使用,我已经试过,没有问题
在原文件中定义如下一个结构:
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