xShandow 发表于 2004-11-20 22:39

一个纹理类,简单封装,为方便使用的.

<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 &lt;windows.h&gt;
#include &lt;gl/gl.h&gt;
#include &lt;gl/glaux.h&gt;</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,&amp;m_Index);
  glBindTexture(GL_TEXTURE_2D,m_Index);
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
   image-&gt;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-&gt;sizeX;
  m_Height=image-&gt;sizeY;</P>
<P>  if(image)
  {
   if(image-&gt;data)
    free(image-&gt;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,&amp;m_Index);</P>
<P> m_Empty=true;
}



使用也很简单..直接Texture t;</P>
<P>t.LoadFile(FileName);</P>
<P>然后在Draw里,t.draw(x,y);</P>
<P>就可以了.

以下是效果图:</P>

xyjuzhen 发表于 2005-3-20 10:09

<P>想问一下,这个是既可以在win32 console下,也可以在MFC环境下运行吗?</P>
页: [1]
查看完整版本: 一个纹理类,简单封装,为方便使用的.