数学建模社区-数学中国

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

作者: xShandow    时间: 2004-11-20 22:39
标题: 一个纹理类,简单封装,为方便使用的.
<>这个类使用了Glu.h头文件.: I: M3 Q1 D! t0 O2 A
看代码吧!</P># r) w1 |. Z$ U* E5 l
<>//头文件$ Z! E6 f6 w# B
#ifndef TEXTURE_H
8 p  Y7 v2 W" O#define TEXTURE_H</P>7 H" M$ L" G. J: I
<>class Texture
  y2 I& N* d) t/ h/ E{# D5 y3 h1 D8 S& v: }/ H
private:8 y! A+ U3 y- ?" n' t7 V5 S
unsigned int    m_Index;* H; C9 {0 }" Y
bool   m_Empty;
3 B- ?/ y. `& _% J float   m_Width;
) W7 x: P+ G2 O: [ float   m_Height;2 ^- J8 u: \' r" J
public:
2 N7 h4 A4 X4 E$ U: O Texture();
: X' _5 Z( P" q0 O ~Texture();</P>1 U6 Y+ h' N+ C# @$ S
<> void Clear();4 I' d- R% a1 J( R# W8 x
void LoadFile(char*fn);& o: h6 }8 ?9 o0 c4 s7 l
void Draw(float x,float y);
9 M$ p3 a! A" W1 n9 o1 s4 k};</P>" Z1 N8 o& ]: Z0 W! X
<>#endif//TEXTURE_H
5 M6 h1 R$ U. {4 p' S% G6 w7 |& n. v( ~/ @

) ~, ~  E* w/ `7 {1 y
( k& D+ ]& E/ q3 A4 }3 x//CPP文件: U' f' `6 L( k
#include "Texture.h"7 l, A! L! Z7 p
#include &lt;windows.h&gt;
* u$ c3 t# S3 t4 ^& t, I#include &lt;gl/gl.h&gt;, w' V/ K& t- t5 m/ V  e( P4 ]* \
#include &lt;gl/glaux.h&gt;</P>
1 ?6 ^: ~4 o! n8 K( ~/ I) Z( @<>#pragma comment(lib,"glaux.lib")</P>9 o, {' z+ ?) G& t- P
<>Texture::Texture()! x1 U6 q0 g; l$ ^
{
, \% C/ T9 j/ d1 f; X- d m_Empty=true;
. Z- p( n6 S# E7 u% N}</P>2 _- g# P; l7 n1 P
<>Texture::~Texture(): ?3 l" m" v" ^. X0 a3 X1 C
{
  c' U5 q/ H3 b' b0 i$ T Clear();. f" N% ]& Q: u. T8 K( y8 }# }
}</P>
$ |6 S$ A( l3 E1 {) g. W<>void Texture:oadFile(char*fn)
+ q) H& H! `5 W; \- G: j' W{
2 D  N6 u2 I% @ AUX_RGBImageRec*image;: d6 a% _% x- h
image=NULL;</P>) }  U6 B7 `  n, c) w+ C( l
<> image=auxDIBImageLoad(fn);</P>
. U; f- F1 {$ i  I4 L- p<> if(image!=NULL); a) n* Z# j# {: o$ ]$ ~2 g5 W; D% @
{; D7 c1 g5 Q+ }- o' a- z
  glGenTextures(1,&amp;m_Index);
9 b2 S$ R" \3 R) I# z  glBindTexture(GL_TEXTURE_2D,m_Index);, {( g! z4 \% G
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,: C3 D) f4 B0 C  e6 Q4 e
   image-&gt;data);# ~9 v( k) v  s7 J: y. S
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
7 v) ^, ]/ ]/ ]4 C9 P  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
6 y. S) Q, ?& ~5 X' x, E7 U. l<>  m_Width=image-&gt;sizeX;
% N7 R" G3 h: H: d5 v! V  l6 A+ o  m_Height=image-&gt;sizeY;</P>
  h1 Y% p1 y: x+ m<>  if(image)
2 q2 z7 h6 |. _, y6 ?& P0 j% f  {
# L+ n5 x4 H* c! u) t4 W   if(image-&gt;data)
! S8 I5 U$ {3 i2 g, m    free(image-&gt;data);</P>% d- ~8 r4 A* t: M5 c
<>   free(image);0 ^) y- ]6 B0 n* u
  }</P>' ?5 v" P7 Q, g; [! E9 E7 b
<>  m_Empty=false;6 i; \. o& O( _
}0 m" E. g1 _  \9 _
}</P>
' Y7 i7 m1 C: W/ Y6 Z4 \- A<>void Texture:raw(float x,float y)
8 G5 r2 f# |  u; j1 Q  r! G{9 I6 l0 i% k( W
glEnable(GL_TEXTURE_2D);+ c. q6 s8 u6 b
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
) s% P* J, B0 C2 V7 P<>    glPushMatrix();' @/ \  x5 ^& b: o8 g3 d- q7 \
    glTranslatef(x,y,0);
: D' q! D8 R( @9 C& U, a: q- ]3 ` glBegin(GL_QUADS);
' R2 y- ]8 M; a6 b        glTexCoord2f(0,1);glVertex2f(0     ,0);
( O2 q/ t  t% S9 ?  y        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
; f8 |: q: Y- q        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);, _. I& h3 h5 R8 t: B/ ], }8 V
        glTexCoord2f(1,1);glVertex2f(m_Width,0);
4 I9 y; j. w" Q/ ]4 n) ^5 x6 |    glEnd();& o' V. e$ H% R. r; `
glPopMatrix();7 e- Z, B0 h6 k+ x/ h9 b" T  b
    glDisable(GL_TEXTURE_2D);
0 x! c4 [8 P3 n1 C  \2 q" G}</P>
) _0 ~8 I0 y2 @  S6 j1 _' A4 @1 Z<>void Texture::Clear()
8 Q! I7 a- J3 T{) [7 s) i5 O" |0 U4 ~' Y( D
if(m_Empty)return;</P>2 ?. s! k& G' ], X7 b( @4 C' @6 @! C0 x1 h
<>    glDeleteTextures(1,&amp;m_Index);</P>4 J. _7 ]3 Q% e  I
<> m_Empty=true;3 I% v9 Y$ v, f, }5 r; s
}
* {* ]% S) l9 `% n6 i1 V" K; a2 n5 S& a1 z" N% x9 N' M0 h

, ~7 o2 ], V; E0 ^0 R# s! D- a: \3 A6 [' j( C, L& G* I0 L
使用也很简单..直接Texture t;</P>
$ `7 x) I5 u6 ~/ X<>t.LoadFile(FileName);</P>
2 w9 J; k( E5 p! i<>然后在Draw里,t.draw(x,y);</P>( @  N+ Q; `# g# X
<>就可以了.2 S  d' V. k, c! ]
3 Y& [' N/ g1 y# X
以下是效果图:</P>[attach]758[/attach]

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

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

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


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




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