QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.% E& s  w3 J& `: [3 u- g2 H7 s  a# q. z
看代码吧!</P>
$ y* ]0 K) o. S7 k<>//头文件
* D" G- d/ G5 I" \" \#ifndef TEXTURE_H
3 e6 b( M: P* s# f#define TEXTURE_H</P>$ _. A5 z4 U2 c6 ]8 j. \2 w% D
<>class Texture. Q1 m5 K0 U3 ~/ G
{
* _2 @! e  @: M; xprivate:: W% |* m; [" W
unsigned int    m_Index;
0 C) P9 K  U' z bool   m_Empty;, n" O( P1 E. q7 p0 @% M
float   m_Width;( I+ g% m$ }. u) g* ]
float   m_Height;
' @! R; S' Y- `public:
4 }5 _8 O% ^$ E5 c7 n0 Q Texture();
& Q4 c7 K; |. m/ A& R ~Texture();</P>
+ V3 {& O. i5 {$ ^& p<> void Clear();2 u& @8 ?. `2 I8 n
void LoadFile(char*fn);2 l0 Q8 t* v1 F* l: E$ v' o
void Draw(float x,float y);
. E& G8 _, _% O4 g" n# E};</P>3 P6 H0 y6 r# m- i3 O% `
<>#endif//TEXTURE_H
! V7 N: {0 U7 o8 B3 O1 S/ C- T
1 T! O5 G+ k6 ?, i' s; `* O& i' C& h. e* w) X0 ?0 u) Y
4 g& a% r: q$ V, d5 C# }
//CPP文件- B6 w6 ]! H+ u; ?* l2 z
#include "Texture.h"+ q. @4 Z1 _) U. c1 u
#include &lt;windows.h&gt;
, b6 g/ f( @0 p#include &lt;gl/gl.h&gt;9 F0 Q. I1 D0 d/ E1 C6 y
#include &lt;gl/glaux.h&gt;</P>8 m2 F5 S. d# A) }
<>#pragma comment(lib,"glaux.lib")</P>) C1 c# W) n0 b. |; K% q) ^
<>Texture::Texture()
% R! Z7 [1 ~1 B* I3 d{: T* v! v# Z0 f. D7 K4 V/ b
m_Empty=true;
" z$ c6 D, j. [* z}</P>
; s: I% L/ ^7 r<>Texture::~Texture()4 Q1 }3 P3 h9 m( C5 ]+ S
{% g0 o+ T& o! V$ r; }
Clear();4 Q9 V5 n* w. f+ \" _: _  f- M
}</P>
: z0 p$ {5 e! k9 X* T& V<>void Texture:oadFile(char*fn)9 q! _* l7 Q) z) g
{; k% N& c% J; \- g# i0 ?& p
AUX_RGBImageRec*image;
% b' O/ F) n; K- B% K1 R, `" P image=NULL;</P>. Y' @6 Z2 w& o
<> image=auxDIBImageLoad(fn);</P>
! W% v, M; [+ \2 X+ r  ]( x8 N<> if(image!=NULL)  S  n6 B; t; V! v+ u
{+ q+ l7 q& M# ?7 H; O. T
  glGenTextures(1,&amp;m_Index);
& i6 U* Z) [8 Q. }/ r) J8 \( N, P+ Y  glBindTexture(GL_TEXTURE_2D,m_Index);! [6 X; z4 b/ d& f& }1 K
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,( @. ?7 m0 v6 h: P7 i" X
   image-&gt;data);5 Q+ s' y" V5 e4 i. u* n  w. e
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);; x: c, T: X1 s" e: \6 E( D
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
2 ?, |/ q' ^" `5 a& `; n5 ]<>  m_Width=image-&gt;sizeX;: M0 m4 k1 K+ e3 n" C% u# [
  m_Height=image-&gt;sizeY;</P>! r$ P+ e; ]7 M: }; @9 w6 j$ l# {
<>  if(image)* S$ \- C5 B' w4 X
  {: A. u$ n3 ?4 H6 N: x3 R$ t
   if(image-&gt;data)
& X0 j, M$ z. M+ x9 |7 D6 ^! i9 ~    free(image-&gt;data);</P>
8 y' g5 B5 [/ S% p<>   free(image);
( f4 M' ^( S5 i) r  }</P>  j5 {. x+ @% M" q, u
<>  m_Empty=false;2 {& N  C, `2 k: t2 V8 w
}9 w9 A% Y8 e2 q+ H. F) X( S( a  @
}</P>
! K! a- z/ ^: Y" P  u" X9 G<>void Texture:raw(float x,float y)
9 F% G& p9 a5 Q9 B{
: d8 D( e4 L' d glEnable(GL_TEXTURE_2D);+ M' L" T4 `* z
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
0 E' ?" E. n+ N<>    glPushMatrix();( }7 W0 @4 R. d  K
    glTranslatef(x,y,0);
  d0 ]  Z* V9 s2 G# \. ` glBegin(GL_QUADS);  r7 q: X/ R: M+ C, l6 |: [
        glTexCoord2f(0,1);glVertex2f(0     ,0);" s3 k: b, H, Y+ f8 X
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
9 a* f! x" ?3 {" E        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);' j( k4 d! H% S3 P5 g
        glTexCoord2f(1,1);glVertex2f(m_Width,0);
, H3 ?3 |) i0 n    glEnd();
+ N9 O% t6 v9 u3 I6 k" u glPopMatrix();+ ~" u5 G9 }6 Y2 V; W  w0 k
    glDisable(GL_TEXTURE_2D);' P3 j; X1 D( ?( D) B- s
}</P>$ {: j5 C8 P4 Z2 U1 s2 E
<>void Texture::Clear()
$ u- r, i$ C. r! w{6 ^$ w7 I7 ?( n+ N- Y
if(m_Empty)return;</P>( P+ Z, p( a$ e8 m- G
<>    glDeleteTextures(1,&amp;m_Index);</P>
, S# L+ z  B5 W, j2 A<> m_Empty=true;2 {3 z- n5 C  a; ^) e! J' n
}
) m2 H' [8 \6 A8 W/ `3 h$ p$ Z6 ^- g9 r$ ~; C

* N+ {6 T1 b6 {' K2 ^& r9 N3 p
* \' U- p3 N$ K使用也很简单..直接Texture t;</P>9 l6 Z' q& _& u5 P2 E
<>t.LoadFile(FileName);</P>
1 U( M/ A9 ?/ U% K% a<>然后在Draw里,t.draw(x,y);</P>
& d" _& k0 U& Y2 l0 i<>就可以了.9 @7 K# i, d& a1 ~4 [1 C( L: M
( ?' p/ M# f! f
以下是效果图:</P>

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

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

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

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-7-21 01:41 , Processed in 0.424530 second(s), 61 queries .

回顶部