数学建模社区-数学中国

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

作者: xShandow    时间: 2004-11-20 22:39
标题: 一个纹理类,简单封装,为方便使用的.
<>这个类使用了Glu.h头文件.( D7 p# e/ M; d9 M* q; e
看代码吧!</P>( @3 Y) e3 E4 w2 x8 j
<>//头文件
! Q0 w. U" G0 E% j% F#ifndef TEXTURE_H
' X) W' T3 _& ^1 z#define TEXTURE_H</P>
2 B6 D5 l  j9 c5 {2 r+ g* q<>class Texture
* b# D+ Q; }7 z) k+ A! `{
- v# \+ I4 M, w. nprivate:
: ~  f5 ~* I6 K; A) f; R unsigned int    m_Index;
( S) ]0 W, z+ W bool   m_Empty;/ |: |6 n$ t$ [# \& n' N8 |
float   m_Width;% _5 r% g$ j3 N# f6 i5 e% d
float   m_Height;8 ]9 @/ e- R4 L, O- P
public:
# f! R* {) R+ L) K3 E( n6 @0 s* Y Texture();
; Y. i2 m& b: p: \- W/ `: i0 G ~Texture();</P>" J. |( e1 h: F0 i# c; \
<> void Clear();2 L. B  F5 m5 O( |# i
void LoadFile(char*fn);% I1 z% h5 m/ ]% F+ f# d2 s+ z6 J
void Draw(float x,float y);2 ]2 s4 B7 j3 q
};</P>
+ ~! e* M4 C) [$ J<>#endif//TEXTURE_H
7 k+ j, P; L2 y. _( m4 C$ j: ^% p5 E7 J9 X6 E
0 u3 \8 u9 m4 d6 |# w

, N2 |% ]/ F1 G8 @- r) A3 L//CPP文件8 P0 b" \# g* Q$ _/ ^, w" b8 R! M; `
#include "Texture.h"7 j; ^; \( E% I8 K3 M  X  |
#include &lt;windows.h&gt;
( n( g6 M' y1 p" q3 n#include &lt;gl/gl.h&gt;
* x: `$ G8 W9 _' \; ?#include &lt;gl/glaux.h&gt;</P>: @! B1 L: {# F1 P! E
<>#pragma comment(lib,"glaux.lib")</P>" K% D! v. F0 H( _7 J
<>Texture::Texture()
7 a8 j/ y% s, l- T% h{- \  Y& z: S7 p. a7 E
m_Empty=true;
6 K0 K3 T/ E. d9 ]1 N}</P>
3 }5 _3 t4 W- T3 Y% ^& K<>Texture::~Texture(). t3 @$ k" O  d9 H
{8 [! O1 {" _% v  F4 g9 U; ^
Clear();
5 p0 Y9 ?3 Y, X6 T9 t" q& B}</P>0 W4 _, T4 |/ s; q
<>void Texture:oadFile(char*fn)4 }' i# i) |8 {. e4 q
{
1 R# p9 [" I* h! o AUX_RGBImageRec*image;$ C4 X6 l/ H1 j/ `8 t5 Q
image=NULL;</P>
: f! S/ L  F4 w" P; J<> image=auxDIBImageLoad(fn);</P>
+ _2 Y1 l1 P% Q& T<> if(image!=NULL)& c* \" y; h: d, _. }. R* w! k
{, Y+ l8 R0 i! \3 r
  glGenTextures(1,&amp;m_Index);
8 @4 ~( x0 Y7 C( Y' u) ^9 H  glBindTexture(GL_TEXTURE_2D,m_Index);* ~8 l7 ^$ y( F% ~- d1 p/ I. Q7 R  V# X
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,! ]& S, B8 q8 n2 _- ~
   image-&gt;data);/ u! w) u8 |, G# q: _
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);. M, h* q/ n- q6 T2 D1 R
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
' d& n) O0 s2 G<>  m_Width=image-&gt;sizeX;0 ?5 w# D& m( Q5 c: t0 w
  m_Height=image-&gt;sizeY;</P>2 s9 }4 S5 r  B. U/ Y* M. M* m
<>  if(image)
  S" {6 c' ?! J( c' ?! b* o  {
. d) f5 m( ~1 l% Y8 x8 f! @% C   if(image-&gt;data)
7 ]( q6 F8 r) O  C; o; T% q    free(image-&gt;data);</P>, [# O$ C; u+ U. @7 z! Y
<>   free(image);; H" O7 |# l( b4 f/ `
  }</P>5 F5 g0 f: {5 T* F/ S
<>  m_Empty=false;" n. S1 A2 F3 Y, ]& W3 x, u
}
+ X+ z3 K0 J/ i. ?8 f6 I* p( a4 k0 s* m}</P>
; ^" n; W! r7 S* {<>void Texture:raw(float x,float y); N8 [5 b/ f( j) @( `
{5 w' Y( B; f% f. b3 d# [3 z3 W# @2 p
glEnable(GL_TEXTURE_2D);- p0 d1 @$ K7 ?: ^& r5 @9 W2 K
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>) D% `& z3 A: v! S8 y; F" ~, _$ y, S
<>    glPushMatrix();
! N$ J3 v" O; q, X/ s    glTranslatef(x,y,0);
6 B" `! s5 o% i7 Z) T. D6 n glBegin(GL_QUADS);0 }! B! K- D) d: X; k& A
        glTexCoord2f(0,1);glVertex2f(0     ,0);
3 [# g" N4 ?6 _3 i5 A; m5 T        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
8 M3 S& f7 g0 H: |  o9 n" n8 `        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
* C! U+ z6 R" H$ k/ `6 F        glTexCoord2f(1,1);glVertex2f(m_Width,0);8 |# N& ]2 Q6 F+ d; ~% N* B- h9 v4 o
    glEnd();8 A( L, s6 t$ c$ ^$ p* H- W
glPopMatrix();# y1 G, t/ d- U& M; c- t  K
    glDisable(GL_TEXTURE_2D);' D" x% @  j. r4 V& N2 Z4 p3 X1 `
}</P>$ D5 r5 M! ]2 r0 y
<>void Texture::Clear()! f' J6 `# H, c5 e: I
{
2 S+ E) F! b8 J9 l3 B if(m_Empty)return;</P>9 Y- F# e# H$ Q
<>    glDeleteTextures(1,&amp;m_Index);</P>
9 S) P4 t- w* F' b7 M$ }6 c; _<> m_Empty=true;/ m+ @6 h2 |) x% t# }: n, R
}% q' h' G6 a5 l
6 Z; Y" U8 q* b7 q7 Y+ @
, J4 L5 ^/ U, y( l5 I! H
9 M3 S4 W* y8 q0 _9 |4 n6 m6 g& @
使用也很简单..直接Texture t;</P>, X4 N; n7 A( w/ ?# \2 f
<>t.LoadFile(FileName);</P>: N; X+ ~  G, Q" Q2 o7 L
<>然后在Draw里,t.draw(x,y);</P>
' I  h0 v! s' O* _8 v$ `+ h) O* N<>就可以了.
& n- S1 E5 r, ~; }* h: V6 A! l$ ?4 K0 K3 k4 `4 W
以下是效果图:</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