数学建模社区-数学中国

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

作者: xShandow    时间: 2004-11-20 22:39
标题: 一个纹理类,简单封装,为方便使用的.
<>这个类使用了Glu.h头文件.0 @& Z1 H- e) u4 o4 ]
看代码吧!</P>: \- D+ N. W* {6 h
<>//头文件
+ T& b- a' s/ H8 B1 \# i#ifndef TEXTURE_H( M  B! N8 e; h: A
#define TEXTURE_H</P>% I$ V! G/ s: G# h: b2 d
<>class Texture
: }$ C9 ~0 T# C9 b{
9 {2 e! `8 P9 w  h% Q. _private:
. ~' F( s+ E+ h# s, i2 w unsigned int    m_Index;
2 H4 Z* w% Z  F( e# w bool   m_Empty;
: F$ q; M# T" m% V3 f1 u5 W! X float   m_Width;9 x( s  O+ v: E2 Z: }1 E/ R/ c
float   m_Height;' |3 A2 Y& t% K# C" k
public:/ O: c8 q0 }, X/ D2 J+ W4 X
Texture();
, c; I8 i, Y0 J ~Texture();</P>6 U7 ]6 S% w, j/ ^& I
<> void Clear();
5 K. e% x7 M# g# t; i void LoadFile(char*fn);
* O3 l5 W# `* L void Draw(float x,float y);
, Q1 o7 p6 S9 H, ^# M4 V4 w};</P>- N; `5 Z- z3 G& x  K. c6 H
<>#endif//TEXTURE_H% j" U, l4 T3 j

) V: S+ ]2 _) d! {4 \* `2 U/ g8 \* T$ E/ ]

2 b8 c  z- K8 h$ X//CPP文件
7 U& m6 x* u! W9 x9 s+ `#include "Texture.h"1 ~9 c/ B, k* O  y8 t8 C$ K! K6 C
#include &lt;windows.h&gt;/ S1 p/ P  w4 ~8 H; u1 A
#include &lt;gl/gl.h&gt;
7 T& D' L; z' @! W; I3 @% N#include &lt;gl/glaux.h&gt;</P>
  t6 H1 ]1 S- G- u<>#pragma comment(lib,"glaux.lib")</P>
5 Z- d3 B. k1 n2 [<>Texture::Texture()  C" e% X2 O  k  j
{
" j- m( _- r. [: X* G m_Empty=true;( }- n4 g6 i' s' |$ n# \# }  F) f
}</P>! n, T& o# H2 f+ J- h' V+ ^
<>Texture::~Texture()
( J2 n: X0 ~+ j, v5 P4 \{
. o& L1 ~1 e  P5 t Clear();/ e  U; P; Z0 H$ W$ X9 I
}</P>, c' z6 g9 d* ?4 w2 P+ Z
<>void Texture:oadFile(char*fn)
; P! C6 `, z6 S# P# b{: t# v- q$ C! a5 X5 i+ u3 x
AUX_RGBImageRec*image;
" p4 S; U$ r7 \! a5 n, d image=NULL;</P>, s, l8 M+ Y: r% g# u8 ?+ S
<> image=auxDIBImageLoad(fn);</P>) K) l: K7 g# i8 m" E
<> if(image!=NULL)3 q1 a# |) C, [3 R+ H4 g+ B3 H
{% ~4 m0 p+ K) f8 e6 k
  glGenTextures(1,&amp;m_Index);( ~- e) w$ G' J2 z2 g: R) H" \" w7 I
  glBindTexture(GL_TEXTURE_2D,m_Index);4 P/ I) U- a. r1 l& U
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,7 k8 H0 n  ?" V# ]8 A' `) U
   image-&gt;data);
8 M5 Y! A/ m2 x' o; y  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);7 V( T4 P8 b/ R) ~6 l, ?1 Z, w
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
8 R0 Y! z4 \- P$ D: Q! f% s  D<>  m_Width=image-&gt;sizeX;
$ L9 b! r; B' {6 b1 I/ V  m_Height=image-&gt;sizeY;</P>
. |/ A: h4 _+ P<>  if(image)! o% [0 h' U, S. y
  {5 K; q- k, A' C3 L* Q5 j, A5 X. ]
   if(image-&gt;data)
! w$ t6 }. G; H- j    free(image-&gt;data);</P>  C6 R" x  _- u0 b( ]+ n
<>   free(image);3 b9 o7 c+ c- t# }5 R3 ~
  }</P>* N9 l) Y- B' H$ [' b
<>  m_Empty=false;
: X! j* c" ?* ?8 J1 S }6 j/ ~8 ]7 _$ @3 b3 }0 ~
}</P>
5 M/ o$ H" ^0 N& F! t/ C; r6 q! B/ k<>void Texture:raw(float x,float y)- ~( z' E: K- s; W# s- f& `- X
{: i! L3 |8 {9 }& I, @8 A6 f1 q: j: \
glEnable(GL_TEXTURE_2D);
3 ^6 a; U8 [% X/ ^! K* _    glBindTexture(GL_TEXTURE_2D,m_Index);</P>/ {: m* n" P$ m& ^! J$ J
<>    glPushMatrix();( c" ^4 `8 i" J
    glTranslatef(x,y,0);
- f" S* [7 x. N3 L glBegin(GL_QUADS);  j: L7 f8 K' q& R$ j& G
        glTexCoord2f(0,1);glVertex2f(0     ,0);
- r# {8 Z% x( ~% s3 L        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
, e: E" m& j% U        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);" h+ ~# K8 U5 M; t/ _' T
        glTexCoord2f(1,1);glVertex2f(m_Width,0);2 r- f8 x. H+ i' {% W
    glEnd();  o8 N; f2 g  T, Q8 ^
glPopMatrix();
. X0 |- C! ^' R9 Y% `    glDisable(GL_TEXTURE_2D);
6 j! T, L. N9 C$ P  X4 s& p$ d}</P>6 ^$ A$ f9 s# j2 ^: O
<>void Texture::Clear()& l* B1 y: \% f4 _/ e1 C7 e
{- N$ {* m- k( `3 K( W# Y
if(m_Empty)return;</P>( z( Y4 ?* [" }: k
<>    glDeleteTextures(1,&amp;m_Index);</P>
8 x- {& g' x2 Y<> m_Empty=true;/ S6 o4 D4 W4 a. T( H# Y' K
}9 m, r5 e1 K% O0 H, d; S; M

) x/ ^5 E$ [, T( c1 ?# B0 }6 S' L
. x+ ]1 \" Q3 [' v. T
! o/ M3 t+ e' Q$ O" j使用也很简单..直接Texture t;</P>
5 u2 r. y' r  t  C<>t.LoadFile(FileName);</P>
$ t2 J, n  k6 Z( r<>然后在Draw里,t.draw(x,y);</P>
. l9 l6 g4 \% r<>就可以了., Q4 B* @: Z7 t9 e+ \. J* u- f
( ~% j: ^# m/ s  x9 n- }& e
以下是效果图:</P>[attach]758[/attach]

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

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

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


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




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