数学建模社区-数学中国

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

作者: xShandow    时间: 2004-11-20 22:39
标题: 一个纹理类,简单封装,为方便使用的.
<>这个类使用了Glu.h头文件.
) X$ T. J, \) t) z% U3 [# J: X0 }/ J看代码吧!</P>  o. D2 o1 f9 i7 u3 Z3 @; b
<>//头文件
' q, M' c* ~7 K" E8 |& s9 H; K  F5 l#ifndef TEXTURE_H$ e- Q) i0 Z0 H
#define TEXTURE_H</P>  M+ r9 j% L8 l
<>class Texture
9 `( T: ~9 _4 _( ]& T" J% `! o{0 l8 q. H7 E. G( a, c- [
private:9 T4 R0 v: h+ [# J) f0 x2 I
unsigned int    m_Index;
- w- R4 [4 ~# q4 v" i- t7 M bool   m_Empty;
. y& b& V$ d* w& k7 U. V float   m_Width;
2 w* F0 d3 G' g4 P, e float   m_Height;
2 Y& Y* e3 c0 [( X9 t) }public:( ^, G8 T* x" P7 E  c. R
Texture();+ U4 k3 [+ s' E, w5 @
~Texture();</P>
9 b# ?2 \# u! o- ^+ M# h# h: ?' E<> void Clear();1 `0 Z. J8 L' `& X5 |  [9 p; @  p
void LoadFile(char*fn);  {% M0 d# c2 v2 R  O. l) ~- f
void Draw(float x,float y);
4 }. B5 k7 w3 @! h  H  S};</P>) O/ q' Z  \( ?- n9 s8 s
<>#endif//TEXTURE_H
) s2 p$ l0 c  x3 q- R2 V  ?2 j0 B

9 e9 v1 [. f/ Z- f9 k& q/ e" [: h: E% C. H5 }
//CPP文件6 W5 w5 W" W6 S# A) c  B: q
#include "Texture.h"
% M; Y, h* r4 U9 C. i#include &lt;windows.h&gt;
$ {' j8 R: j3 s, {* j#include &lt;gl/gl.h&gt;
# D$ r- a& i: o4 P5 D/ q#include &lt;gl/glaux.h&gt;</P>5 F; S+ w- p# R+ K4 L% X% v
<>#pragma comment(lib,"glaux.lib")</P>
; h% G+ X3 ]+ g* j, O7 y: k+ z<>Texture::Texture()$ {8 S6 g" E! n8 c/ O
{+ }8 o9 s& b8 N; q$ n) _7 Z
m_Empty=true;
5 S* k9 F9 w" ?1 G6 S$ D}</P>
2 h8 Z  a8 L; n& e3 y<>Texture::~Texture()
9 ?8 v* _! X5 H% U* f9 D/ A{
+ i) V7 I& J1 E, K' c Clear();% O* D: L, ?' V1 a+ g9 q
}</P>' f0 e, [2 E4 X4 q4 A6 h
<>void Texture:oadFile(char*fn)- X% ]! W5 \. H: k" F7 @  `
{
, V! R2 l9 I: ~ AUX_RGBImageRec*image;- p: v3 k/ t0 @  ~! G; y- L
image=NULL;</P>$ S1 A! v* }5 e  K, k
<> image=auxDIBImageLoad(fn);</P># h  a! L) Y4 W& l- Q
<> if(image!=NULL)4 W0 O1 D# \1 q" E1 e  e
{* ~- v) e4 J2 O  G+ d, B
  glGenTextures(1,&amp;m_Index);+ H* K, F3 y( Q, y% n+ E
  glBindTexture(GL_TEXTURE_2D,m_Index);
% M& P6 C( C9 n) i& b  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
, V9 H+ o9 @8 P4 C   image-&gt;data);6 q  i- I* G, z; n
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);4 I3 B% j8 U/ [. W3 T" F. Q
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
! A7 L0 U8 x7 U- d! u<>  m_Width=image-&gt;sizeX;
! }+ C% x& ]9 i" W$ W! Y& j  m_Height=image-&gt;sizeY;</P>( M2 e/ X# |8 C$ z$ [
<>  if(image)
1 L- S8 J+ o- N: Y6 m  {& V0 K- _' Z- N# r
   if(image-&gt;data)
8 @0 ?9 I1 M0 k# ?; ^% t8 T  i( \    free(image-&gt;data);</P>
/ ^3 |$ K7 I4 A<>   free(image);9 o+ D5 b% v  n$ ?1 S2 u" O
  }</P>5 J" u) o$ ?; g/ T! F4 f
<>  m_Empty=false;  o- K$ i6 }* }) b# P7 X" }% I
}
& `, l/ k1 J1 r& k7 @4 c1 l}</P>( o9 D2 |! D  [# }
<>void Texture:raw(float x,float y)
, A" }, l' s/ d$ _{6 @3 z$ J/ e# Y! ~, U; x# m0 T& K
glEnable(GL_TEXTURE_2D);7 N3 m& W9 T4 g3 r0 W& c
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>% Z. u4 s  O* V* u% m
<>    glPushMatrix();* z- ~, C2 i& Q/ |1 g
    glTranslatef(x,y,0);& A- R. R+ o4 O: {- ~& _% ~  O
glBegin(GL_QUADS);
" V& ~; K# r+ s' j        glTexCoord2f(0,1);glVertex2f(0     ,0);
; P8 @0 p+ [1 e0 r8 o( f! k. F( d        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);7 u6 F, I( K5 f
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);- i( x% D/ p" M6 ~- M& H8 X8 M- t
        glTexCoord2f(1,1);glVertex2f(m_Width,0);
& |; c3 {4 U4 r0 [8 F( Z. T    glEnd();3 z9 J. W2 r$ u7 z2 k" r
glPopMatrix();
: ?  |2 O! H6 H# K* G/ o6 m    glDisable(GL_TEXTURE_2D);4 I% I; Q8 r5 X, t
}</P>. D+ J$ e+ i( p( g3 J
<>void Texture::Clear()
# o0 Z# {- q! J+ v2 C: O1 E: [{
! d4 o( F$ _$ ~4 O1 I7 w; f if(m_Empty)return;</P>) ~! p4 O: d! h. O% Y; `: M/ T
<>    glDeleteTextures(1,&amp;m_Index);</P>' A9 F5 x$ ~/ N  Q2 f' A! t
<> m_Empty=true;2 H3 I2 y* v0 q  O% H1 H
}5 P, m( e% M/ w! M, k1 y8 G# Z
  T+ g* B  Z: D$ c9 G  k
$ v9 S& e! g9 J+ Z$ }6 ]  u

2 i% c+ @. r, M使用也很简单..直接Texture t;</P>
4 `# i; X3 g1 R, D6 J/ F( [: T5 ?<>t.LoadFile(FileName);</P>
5 F1 K4 A1 |  E; y- ?& _<>然后在Draw里,t.draw(x,y);</P>! z# `7 x$ b3 X2 z) m
<>就可以了.
- X: G& Z3 z1 S0 N2 t* D  l' a0 b* H; A* ^9 Y
以下是效果图:</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