QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3147|回复: 1
打印 上一主题 下一主题

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

[复制链接]
字体大小: 正常 放大
xShandow        

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
5 g# u/ w: Y2 R: }5 e1 S看代码吧!</P>
0 p4 |  G" n/ s& q: z& u$ D<>//头文件" U9 B: I. l; V
#ifndef TEXTURE_H
% E$ }) F, b; r#define TEXTURE_H</P>9 J  b2 D7 @6 Y1 w( \) c$ E! B7 b
<>class Texture
/ T$ K3 X1 m! u/ M{% P5 T7 V7 V* m1 s2 p7 a& M' H
private:4 P- r4 \) w- d) k" h
unsigned int    m_Index;
; q4 ]5 ^7 _2 M  G bool   m_Empty;3 M7 v4 m+ ^: W& L! @
float   m_Width;  N$ ^. f" t% I5 a0 ]
float   m_Height;
3 `1 z7 k$ a" G! S# [public:
, J. z* J& E2 T( h Texture();# ^( n+ e) H/ ]1 J5 O# V4 l& S6 b
~Texture();</P>
( o- M% o( t0 \- F" `$ I0 [9 {<> void Clear();
5 p) i2 |/ ]3 r2 P4 Z8 E void LoadFile(char*fn);; t2 ^) a, e! w0 a0 ?" O$ C' H; y: Q
void Draw(float x,float y);
3 Z2 f2 v/ t* ^) k; a! [# q};</P>3 t. n. a9 {; t( \. i& L+ Y
<>#endif//TEXTURE_H
7 V) o7 R1 P  G" M' g% ]/ \( e, @, Z% D# E
4 q/ ^" ]) E! d2 g  u
/ J+ G2 H1 r6 d( Y  I
//CPP文件# Z5 ~4 r( r3 }+ ~
#include "Texture.h"6 ~8 E" H; V: G$ H2 ]
#include &lt;windows.h&gt;+ T1 x9 r& l5 A7 k& F7 H
#include &lt;gl/gl.h&gt;
+ ]: A$ \3 X9 q/ h/ t#include &lt;gl/glaux.h&gt;</P>6 ^$ T7 V) X  c
<>#pragma comment(lib,"glaux.lib")</P>
3 }( O7 t7 K& d: M' z% o" K<>Texture::Texture()9 [3 M  ^* q2 r) d. t1 l  U! y
{
- O: ]  p" a, s2 q m_Empty=true;+ f6 [/ P$ [; @( u& B
}</P>
  ~2 j) t, K. T" D2 B6 q<>Texture::~Texture()7 Z2 f1 G$ U! `7 A
{' n; W( k3 @% s/ H8 v) J
Clear();% }  j- c3 L8 G( S  @2 r  v- F4 e6 n
}</P>
/ P  ^- x/ i! U' g<>void Texture:oadFile(char*fn)
- z+ P  r2 g8 E{( w/ b4 C: D% w4 L7 b: C# @
AUX_RGBImageRec*image;
: g+ o5 p4 D4 Z" v; K6 C: _ image=NULL;</P>
5 B- N) `4 n) T& H<> image=auxDIBImageLoad(fn);</P>
. Z* q5 E+ T$ }% g7 M! a<> if(image!=NULL)
! [$ }, s- ^, E {# l5 S% @* @- E
  glGenTextures(1,&amp;m_Index);; Q! A5 \5 p. W* D- T* c8 s
  glBindTexture(GL_TEXTURE_2D,m_Index);
' N5 b; j0 h5 d+ ]4 ?: E4 I- Y& W+ f( i  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,7 x" g7 V* }, n! X3 U  I  q/ w
   image-&gt;data);. L: c6 [! h* _/ \" w  I
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);% X8 L" p2 i+ @  ]
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>4 t, t- W0 h; H5 V, }
<>  m_Width=image-&gt;sizeX;% j7 y  }4 \6 G2 G, P
  m_Height=image-&gt;sizeY;</P>% ^$ w, L. C1 `) J4 g9 r( X, M6 t( Q
<>  if(image)6 [2 \1 T( p2 h+ i  u; ]0 Y: q/ K$ f
  {
. C" v$ r2 `. p# d: n   if(image-&gt;data)7 J7 g/ L/ e/ g* q. _
    free(image-&gt;data);</P>8 H$ A3 _9 c& i( z
<>   free(image);; T9 X2 [% ^( }% c& `4 A0 v  w
  }</P>
; c/ U) n9 F) `1 E! [* d. }, B6 [<>  m_Empty=false;* Z; Y+ q% I4 V4 o  }: W% [
}
/ b0 b$ P4 m9 E4 V) R) {7 z}</P>7 u: ?! I) P& w  B/ s+ Z: ^
<>void Texture:raw(float x,float y)
1 K+ ?- n% ?) }# Y! Z, P{7 s) z, @" U0 J! L/ v
glEnable(GL_TEXTURE_2D);1 v8 l7 r$ [+ ~& F
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
& D" F: @' c% ]9 ]! ]) n<>    glPushMatrix();
5 t6 ?* s+ I1 |1 I7 m# D! ?) y* {    glTranslatef(x,y,0);
& U' ]7 Q, t$ i+ P7 E glBegin(GL_QUADS);9 I5 F2 s2 c8 `
        glTexCoord2f(0,1);glVertex2f(0     ,0);% N) C2 E0 v% C  C
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);$ _) q3 Z% m7 W2 _$ U
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);! I) p5 K0 b& M+ p3 y$ ~8 q
        glTexCoord2f(1,1);glVertex2f(m_Width,0);6 m0 L9 N0 y6 N4 v  e3 p# s4 B
    glEnd();" s$ h+ H2 [& _
glPopMatrix();6 t  J: q; ]# B$ X2 a
    glDisable(GL_TEXTURE_2D);0 K7 q7 K  z/ h2 k7 H: P4 T" T
}</P>
  m+ \5 K/ n7 D! c4 O' `2 ^# H<>void Texture::Clear()
( o9 n' H3 F5 s{
3 ~" M0 B" d3 C% V if(m_Empty)return;</P>3 X: e8 Z9 T0 u1 I
<>    glDeleteTextures(1,&amp;m_Index);</P>$ e+ `3 C& l: b4 ]! A
<> m_Empty=true;
( c* \$ E8 w) [: D; v$ m+ R}: e1 e# Q0 t2 C% X- O" n3 r
, G! o$ K' \8 @; a6 b7 M

4 K: I3 V/ @2 x4 x- h' J7 z/ I. f# p$ @) w
使用也很简单..直接Texture t;</P>0 S! g. |6 ~6 B; t& i' P! \
<>t.LoadFile(FileName);</P>0 \* F7 S5 `  I3 w2 _) l
<>然后在Draw里,t.draw(x,y);</P>
, r$ d" M+ y8 X+ F<>就可以了.( q4 i) x( E5 r7 V8 \4 o
1 \! E+ h; I! u* g& S. H, ]3 D
以下是效果图:</P>

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

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
xyjuzhen        

0

主题

2

听众

80

积分

升级  78.95%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-14 04:05 , Processed in 0.447696 second(s), 61 queries .

回顶部