QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.& c" e: q/ n. M
看代码吧!</P>$ R& u2 G8 P7 w- R- P
<>//头文件/ E: L; h6 i5 j0 }! a% v5 M% z
#ifndef TEXTURE_H
1 p  m9 E3 p% X& L0 j, h#define TEXTURE_H</P>4 v- B0 l6 n# T. Z: W6 u3 x% a' Q, b' R
<>class Texture; s; X1 ]. S- I7 n5 a9 {4 j! I
{- ^! n) x! x4 {- Z
private:
4 \3 z+ a/ S  U. M unsigned int    m_Index;* f& G; }4 q2 i% V) w! O+ b
bool   m_Empty;
1 v8 g& W/ K/ g) z2 W) J- w5 ? float   m_Width;$ b% v2 s0 b$ V; J3 W9 P$ ^
float   m_Height;
6 ]: l: M: t5 D1 v& ^: h- gpublic:
! G& }# N) d( K) M* I% I' M Texture();
4 E& s: B/ ~4 r* z: R ~Texture();</P>6 O: e! j. w. X! u+ P9 U% V, `
<> void Clear();
' _, l8 I  f; ^9 q% p1 W0 I void LoadFile(char*fn);
9 G5 h2 |: s# C2 q3 u# I* H7 j: t void Draw(float x,float y);
- }8 h+ T, u, C# y3 W9 Z};</P>
! u8 O% A) a0 i, g, ~<>#endif//TEXTURE_H0 ^: x' v2 E: k* R
; {. b+ M3 ?8 ?( }( `( d0 b1 ]0 I

% E$ p) {* i- R/ D* C- s, }1 Q1 [- Y, v) `2 y+ S* `" E
//CPP文件/ F. ]7 e+ W7 _2 A9 _+ G' r; d
#include "Texture.h"- ?/ j7 L9 J) A( V7 E9 B
#include &lt;windows.h&gt;4 p- x; j/ t4 Y4 q& h# Y
#include &lt;gl/gl.h&gt;" g# X% v$ B, n
#include &lt;gl/glaux.h&gt;</P>
7 A* ?; M) R& {; |5 v<>#pragma comment(lib,"glaux.lib")</P>  b: s0 V# T$ k1 B1 @% v* l
<>Texture::Texture()
# c8 s$ k' ^% S{0 Q( u7 G5 U% _( N1 v, A
m_Empty=true;
& K7 f9 v9 Y9 x9 O  X7 W4 X! c% q}</P>
' o8 B. a0 ?- V5 G<>Texture::~Texture()
; y* V6 }6 l0 y+ C" b/ [: Y{. w* I6 P' y% f
Clear();
" [* }# d  }8 R8 x' k; U! @7 N}</P>
" c" x' j: n6 c& D- L<>void Texture:oadFile(char*fn)
# B' t3 _! `. d7 ~. H8 a: z- r6 u{( |: w; Z& Q0 o. d: F
AUX_RGBImageRec*image;
' x8 {0 Q* u& Y4 {1 q9 u# P% V  R image=NULL;</P>1 b) \& ]3 `- L0 U4 ~- N" S0 B
<> image=auxDIBImageLoad(fn);</P>- q/ L9 U/ w& i  E( J
<> if(image!=NULL)
2 @5 E/ a, v4 x) e! V# h {1 @: S  U! Q0 h/ S) W0 H2 c
  glGenTextures(1,&amp;m_Index);# _2 S* d- \' |1 m1 K# n
  glBindTexture(GL_TEXTURE_2D,m_Index);8 d, M: R: n5 o3 W# U7 M
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,7 J; h" ~  }# C% r5 f  ~
   image-&gt;data);
6 f; k. A8 o6 T- k  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
4 D: W6 [9 p2 m- `  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
9 D, Y+ ~! H: v7 f, G  c9 \<>  m_Width=image-&gt;sizeX;& \9 H" q+ t' p. n+ V9 \
  m_Height=image-&gt;sizeY;</P>4 x, h) ^$ X& t; @
<>  if(image)
8 a5 m$ S& e3 r' S% l4 A' h9 P  {6 I+ D4 Z" @* U- R" E" x5 n4 z
   if(image-&gt;data): S; W& l* g3 l' E
    free(image-&gt;data);</P>
" |6 v) H& h1 L# Q  v* P0 e<>   free(image);1 Z) m' c/ \3 d5 U3 f' \* e
  }</P>
+ l' m; C6 N. K% V4 e$ ^: B9 C<>  m_Empty=false;0 m& L# y  c8 n( E
}+ |% e: C1 d+ J1 x$ s" o  [0 t) b3 |
}</P>2 b2 P% j) I# W/ r# B( {
<>void Texture:raw(float x,float y)
9 ?% S2 Y- u; I$ G4 S/ \5 v# e{0 \% j8 Y) q! H' d6 X2 ?: J( ]' a
glEnable(GL_TEXTURE_2D);* V8 E) G: d" `3 h( @- I) `  R
    glBindTexture(GL_TEXTURE_2D,m_Index);</P># x1 K( H& W+ c
<>    glPushMatrix();) y5 j2 b% W5 {2 g; M/ q
    glTranslatef(x,y,0);
$ s1 z1 T$ W3 N+ \ glBegin(GL_QUADS);) Q4 o* m: j1 B2 T$ J! [
        glTexCoord2f(0,1);glVertex2f(0     ,0);
, D- Q, P8 v& b6 a! p' i        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
1 }& w' a4 @  Y$ O; X4 L, Z+ j        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);9 h* C& _% F- e1 ?
        glTexCoord2f(1,1);glVertex2f(m_Width,0);9 b/ R  A9 O* P) N% D( P  _8 |& u
    glEnd();! S/ J; j  i* w- r7 U7 I1 ?3 a
glPopMatrix();
/ N9 q- `( }: e; {. @/ L    glDisable(GL_TEXTURE_2D);: s0 I0 R0 t( _% O- Y4 {9 T
}</P>
, `( J. N. l- R! H2 ?% [<>void Texture::Clear()* @+ W; s2 T8 V* [. Q" h
{8 B7 j# N$ a/ v, }7 J' r6 K
if(m_Empty)return;</P>2 g- u+ I$ B3 b/ {* a; ^; {
<>    glDeleteTextures(1,&amp;m_Index);</P>
/ t! g8 \: P: J0 l$ ^<> m_Empty=true;: A. q: g% }- g+ J. Q
}
  g; E% u7 T+ i* z7 _+ j% D) [+ d+ W- f9 d1 u4 I4 a% |
7 O$ H, w) p8 B' v0 x4 V
5 o$ p* f# ^6 @& }8 ?7 s% ]
使用也很简单..直接Texture t;</P>
/ H, c% p3 a5 N<>t.LoadFile(FileName);</P>
; ?8 {; w* V- v' U, F8 H<>然后在Draw里,t.draw(x,y);</P>
& R- B  Q& ]: p  }) N8 y<>就可以了.2 V2 R5 V* d9 g9 T. {
5 B) o" I4 R, C7 p! x: T* f2 X
以下是效果图:</P>

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

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

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

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-4-20 14:19 , Processed in 0.619642 second(s), 61 queries .

回顶部