- 在线时间
- 0 小时
- 最后登录
- 2005-9-21
- 注册时间
- 2004-4-27
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 1027 点
- 威望
- 0 点
- 阅读权限
- 40
- 积分
- 385
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 153
- 主题
- 43
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   28.33% 该用户从未签到
国际赛参赛者
 |
< >这个类使用了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 <windows.h>
, b6 g/ f( @0 p#include <gl/gl.h>9 F0 Q. I1 D0 d/ E1 C6 y
#include <gl/glaux.h></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,&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->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,( @. ?7 m0 v6 h: P7 i" X
image->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->sizeX;: M0 m4 k1 K+ e3 n" C% u# [
m_Height=image->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->data)
& X0 j, M$ z. M+ x9 |7 D6 ^! i9 ~ free(image->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,&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> |
zan
|