使用DevIL来加载OpenGL纹理

本文介绍如何使用DevIL库在OpenGL中加载和处理纹理。通过提供的DLL和源代码,开发者可以实现从多种图像格式到OpenGL纹理的转换,并支持透明度设置和像素操作。
摘要由CSDN通过智能技术生成

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


+++++++++++++++++++++++++++++++++++++++++++++++++++++
下面为真正代码
++++++++++++++++++&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值