OpenGL本身并没有带图象文件的读取函数,D3DX则有,以前我用的IPicture的接口来加载图象,但是TGA ,MNG PNG 等图象它并不支持.需要其他的代码来加载TGA等,非常不方便,最倒霉的是,代码的问题很多,经常不能成功加载一些图象.早就想把那个该死的库移植到DevIL上了,但是人懒,一直等到今天,呵呵。终于做了个简单的包装了。
代码很乱,只加了读取图象到建立OpenGL纹理,应该还有更广泛的用途的.比如SaveImage等.
回头等有空的时候做一个更好用的。
这里的的代码只有一个文件,是一个dll,自己编译一下就可以了。DevIL当前为1.6.7请到http://www.sourceforge.net/Projects/openil/去下载,说明一下,DevIL原来叫OpenIL,是一个学习了OpenGL的库,因为某些原因,改名为devil了。
/***
Source code for gltexture.h
***/
#ifndef _GL_TEXTURE_H_
#define _GL_TEXTURE_H_
#include <windows.h>
#include <GL/gl.h>
typedef struct ImageSize
{
int width,height;
int bits;
}IMAGESIZE,*PIMAGESIZE;
typedef unsigned char* IMAGEDATA;
typedef struct
{
int width,height;
unsigned char* pdata;
int bits;
GLuint format;
int ImageID;
}DIBTEXDATA,*PDIBTEXDATA;
#ifdef _DEBUG
#pragma comment(lib,"gltextured.lib")
#else
#pragma comment(lib,"gltexture.lib")
#endif
typedef GLuint GLTEXTURE;
extern "C" int FlowToPower2(int w);
extern "C" IMAGEDATA LoadBlankImage(IMAGESIZE size);
extern "C" int SetImagePixel(unsigned char* image,int x,int y,IMAGESIZE size,unsigned char cl[4]);
extern "C" int GetImagePixel(unsigned char* image,int x,int y,IMAGESIZE size,unsigned char cl[4]);
extern "C" void SetKeyColorAlpha(unsigned char* image,IMAGESIZE size,unsigned char cl[4],int r);
extern "C" int IsPowerOfTwo(int n);
extern "C" int RoundFourByte(int n);
extern "C" DIBTEXDATA LoadTexData(char* filename);
extern "C" DIBTEXDATA CreateDibTexData(int w,int h);
extern "C" void FreeDibTexData(DIBTEXDATA dib);
extern "C" void SetTexAlpha(GLubyte color[],GLubyte alpha,DIBTEXDATA dib,int r);
extern "C" void SetTexPixel(int x,int y,GLubyte color[],DIBTEXDATA dib);
extern "C" void GetTexPixel(int x,int y,GLubyte color[],DIBTEXDATA dib);
extern "C" GLuint BuildTexture(char* filename);
extern "C" GLuint BuildTransparencyTexture(char* filename,GLubyte color[],GLubyte alpha,int r);
extern "C" GLuint BuildTextureFromImage(unsigned char* image,IMAGESIZE size);
extern "C" GLuint BuildTextureFromRGBImage(unsigned char* image,IMAGESIZE size);
#endif
/**
以下为.def文件,
**/
EXPORTS
LoadBlankImage
SetImagePixel
GetImagePixel
SetKeyColorAlpha
IsPowerOfTwo
RoundFourByte
LoadTexData
CreateDibTexData
FreeDibTexData
SetTexAlpha
SetTexPixel
GetTexPixel
BuildTexture
BuildTransparencyTexture
BuildTextureFromImage
BuildTextureFromRGBImage
+++++++++++++++++++++++++++++++++++++++++++++++++++++
下面为真正代码
++++++++++++++++++&