一个纹理类,简单封装,为方便使用的.
<P>这个类使用了Glu.h头文件.看代码吧!</P>
<P>//头文件
#ifndef TEXTURE_H
#define TEXTURE_H</P>
<P>class Texture
{
private:
unsigned int m_Index;
bool m_Empty;
float m_Width;
float m_Height;
public:
Texture();
~Texture();</P>
<P> void Clear();
void LoadFile(char*fn);
void Draw(float x,float y);
};</P>
<P>#endif//TEXTURE_H
//CPP文件
#include "Texture.h"
#include <windows.h>
#include <gl/gl.h>
#include <gl/glaux.h></P>
<P>#pragma comment(lib,"glaux.lib")</P>
<P>Texture::Texture()
{
m_Empty=true;
}</P>
<P>Texture::~Texture()
{
Clear();
}</P>
<P>void Texture::LoadFile(char*fn)
{
AUX_RGBImageRec*image;
image=NULL;</P>
<P> image=auxDIBImageLoad(fn);</P>
<P> if(image!=NULL)
{
glGenTextures(1,&m_Index);
glBindTexture(GL_TEXTURE_2D,m_Index);
glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
image->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
<P> m_Width=image->sizeX;
m_Height=image->sizeY;</P>
<P> if(image)
{
if(image->data)
free(image->data);</P>
<P> free(image);
}</P>
<P> m_Empty=false;
}
}</P>
<P>void Texture::Draw(float x,float y)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,m_Index);</P>
<P> glPushMatrix();
glTranslatef(x,y,0);
glBegin(GL_QUADS);
glTexCoord2f(0,1);glVertex2f(0 ,0);
glTexCoord2f(0,0);glVertex2f(0 ,m_Height);
glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
glTexCoord2f(1,1);glVertex2f(m_Width,0);
glEnd();
glPopMatrix();
glDisable(GL_TEXTURE_2D);
}</P>
<P>void Texture::Clear()
{
if(m_Empty)return;</P>
<P> glDeleteTextures(1,&m_Index);</P>
<P> m_Empty=true;
}
使用也很简单..直接Texture t;</P>
<P>t.LoadFile(FileName);</P>
<P>然后在Draw里,t.draw(x,y);</P>
<P>就可以了.
以下是效果图:</P> <P>想问一下,这个是既可以在win32 console下,也可以在MFC环境下运行吗?</P>
页:
[1]