数学建模社区-数学中国

标题: 一个纹理类,简单封装,为方便使用的. [打印本页]

作者: xShandow    时间: 2004-11-20 22:39
标题: 一个纹理类,简单封装,为方便使用的.
<>这个类使用了Glu.h头文件.
4 v8 `1 q$ \0 g. C看代码吧!</P>2 V; N4 G+ {* u1 l0 I
<>//头文件7 _' |/ X" R3 q* g/ y
#ifndef TEXTURE_H0 U+ g2 Z2 m$ R4 [. y1 T$ K
#define TEXTURE_H</P># S& X! f' W% w
<>class Texture/ I: O# [0 {- l- z; W) o: B5 [" T) A# l
{. g6 r7 @( |6 ?+ w
private:' Z( Q- H' n/ c0 H  |
unsigned int    m_Index;
* P' `/ A7 \8 z, } bool   m_Empty;
! Q7 g+ M, z% ]/ P; m! O# @ float   m_Width;5 h  g- L5 ]% b1 ?% h9 V
float   m_Height;# h4 @, x/ x3 I& `
public:& i+ }6 e6 A8 a1 t8 x3 g
Texture();2 U2 {/ b' O3 t% J1 i0 s
~Texture();</P>
& T$ e* N: ?1 y: X# E" r" `3 c<> void Clear();
: s" v6 G* i# W+ M) C" y void LoadFile(char*fn);0 q2 n" p1 f; ]0 W# e
void Draw(float x,float y);6 ~! X! g8 I0 s( e. s
};</P>( \. {% x% x/ a2 l
<>#endif//TEXTURE_H! B8 D/ d& U* R+ k& c- Z) f2 n4 p
, R8 o) J7 _  ?; S, g% e6 N5 n. n
2 V. c6 E( o6 F' X/ A3 k; u( M- S. N
: d; h; a( [% g  u) ]( B
//CPP文件0 [% p0 L3 E; Q; e/ b$ G
#include "Texture.h"
1 Q! w  _3 a6 a8 M. X8 e#include &lt;windows.h&gt;
9 K! e4 \# j6 Z#include &lt;gl/gl.h&gt;  i& _0 {, E7 b% d- s- g
#include &lt;gl/glaux.h&gt;</P>: z) f- H) i* T1 x
<>#pragma comment(lib,"glaux.lib")</P>
7 C4 o! h+ c) G+ y$ t/ K<>Texture::Texture()" K% U1 ?' r7 J6 ^2 [8 n: U
{. R4 U  s% Y( u7 q! I4 d
m_Empty=true;+ }3 s0 ~5 K7 O4 T  W& h/ O, A% P
}</P>
$ p. y) ?/ |7 i) \& y<>Texture::~Texture()
# ]" W% d4 x3 y2 I{
, i0 |& n0 K3 t& }% y. k3 T; s Clear();# _# N5 N4 K  Y% m# H% r
}</P>6 H+ G' i9 ?/ A- M- P, Y
<>void Texture:oadFile(char*fn). H2 G% W9 R1 d) [4 E
{& G- {) k: l; x( _9 B. p3 {
AUX_RGBImageRec*image;
, _: p9 M' o$ g+ B$ q% S3 ^ image=NULL;</P>
, Z) x+ M5 Z' C- C+ M$ V5 n<> image=auxDIBImageLoad(fn);</P>4 S- [3 D. y( z! x6 O* a) \2 }0 C6 v
<> if(image!=NULL)0 o. p. V/ T+ r  {- r1 x6 @+ l. d
{
( T+ b; f8 d4 l% I& s  glGenTextures(1,&amp;m_Index);: _- e( _9 g5 a& S, C
  glBindTexture(GL_TEXTURE_2D,m_Index);5 S. F8 I3 U7 W0 v) e3 ~
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,* A1 V- y1 s% I( u6 `
   image-&gt;data);3 ~1 p/ g0 i/ d* z5 \! K
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);; ]& ~0 t- P: |9 K, M1 B3 l
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
+ i) [5 O1 \/ z/ i3 k<>  m_Width=image-&gt;sizeX;1 P. o, c4 G4 P; n6 }, p+ I
  m_Height=image-&gt;sizeY;</P>
9 W. {& C; {$ N2 s! v9 h& v<>  if(image)1 @* F/ |# V. C7 w$ k2 J; t2 Q' m
  {
1 M# V8 x7 b+ p- n# f# k1 X   if(image-&gt;data)
' {% R0 p3 R, M8 _, R# |) W    free(image-&gt;data);</P>9 t$ }$ K: |* K$ a: x) s
<>   free(image);9 J7 y) j/ L1 L% }0 {- }
  }</P>
# T9 b# T; s9 u3 {: }<>  m_Empty=false;
; i! B0 o4 B4 y; H9 T }9 n8 R3 _$ m9 X2 V2 P
}</P>
! R# L( {1 K: o$ ?' E- U<>void Texture:raw(float x,float y)( J2 ?3 X1 I0 w9 @* C
{
! C: Z6 t4 O; i* G' V  r glEnable(GL_TEXTURE_2D);
7 f, D8 M% v6 h9 f    glBindTexture(GL_TEXTURE_2D,m_Index);</P>5 X: d  j; B: a/ u& Z
<>    glPushMatrix();/ |* z2 D/ t  [9 {
    glTranslatef(x,y,0);
- K1 V, D, e( Q glBegin(GL_QUADS);1 B  n+ i) k2 z
        glTexCoord2f(0,1);glVertex2f(0     ,0);
) A0 R9 t# g6 ^9 c1 E9 D8 ?        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);# A) z8 ~4 w/ {2 j- [
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
& e( d) H/ E2 H% {/ H        glTexCoord2f(1,1);glVertex2f(m_Width,0);
- w0 Z5 t# i/ R, x    glEnd();/ N+ W1 \. t; C: G
glPopMatrix();9 \  ?3 k9 ]( O2 ]
    glDisable(GL_TEXTURE_2D);
4 i, q: s, W+ \3 U}</P>) P6 C. N+ @7 @
<>void Texture::Clear()
+ E  ?! G$ n: q( J/ Q/ h- |# s{
- O! Q$ L8 ~- e; h if(m_Empty)return;</P>
6 c$ V/ ~1 V$ R5 J8 d$ b1 i<>    glDeleteTextures(1,&amp;m_Index);</P>
+ V9 r+ `( V/ e/ P; k+ c$ z<> m_Empty=true;. Z+ [4 h1 M0 K$ e) ?( n
}
$ W, K9 u* v6 k) B& q7 R( t
7 |( _% K$ J( j: z- l& X" \
4 e/ p) h- O: Z) A' Z5 t! V7 I
: O" w' X4 u4 `  ^使用也很简单..直接Texture t;</P>
/ {0 V9 ?, T$ r+ o- L' f3 s2 x<>t.LoadFile(FileName);</P>6 L0 b& {, |7 J3 |9 d$ q
<>然后在Draw里,t.draw(x,y);</P>
4 Z6 {: V$ V# M! \4 e. }<>就可以了.
" ]8 K% U: H& U/ N& Z) N4 e$ z, ~" C
& i# F; r7 ^  v以下是效果图:</P>[attach]758[/attach]

一个纹理类,简单封装,为方便使用的..jpg (87.31 KB, 下载次数: 225)

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

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


作者: xyjuzhen    时间: 2005-3-20 10:09
<>想问一下,这个是既可以在win32 console下,也可以在MFC环境下运行吗?</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5