- 在线时间
- 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头文件.( A7 V/ |2 d1 m P
看代码吧!</P>: H1 @/ i$ p! N: i/ T/ p* L
< >//头文件8 N7 g7 D5 c2 M6 k6 [
#ifndef TEXTURE_H* V& `- M5 E3 L1 `' ]/ A
#define TEXTURE_H</P>* a4 a2 c2 T3 {2 d9 Q: ?
< >class Texture
$ @+ S; v& e" `& e{( ]6 p8 {) k# Z! ~
private:, B M( ~' C4 E5 i3 U' s2 A
unsigned int m_Index;
5 \, W/ A: o! u bool m_Empty;, h# ^ l1 H7 }, y1 k
float m_Width;
a7 N1 N; i9 G: V+ \1 Z3 D1 X float m_Height;
! u; ~0 T, J* }4 w$ [public:
' ?; q$ e! y" |6 t7 M" V' ] Texture();, h+ x% p( W& H. g
~Texture();</P>6 J8 b" {8 }; B% x5 R% J- n
< > void Clear();
4 U' \- N- S) ~ void LoadFile(char*fn);
* U) ]2 N+ L4 v7 @3 B1 y void Draw(float x,float y);9 z3 G D/ N8 q; Q
};</P>3 l% t, q7 h( C1 c) O
< >#endif//TEXTURE_H
0 l5 y0 o2 g2 }5 ~8 ]2 M. E; r& [. y% @; A4 z) T/ F( D5 ?
9 O& r, Z0 G, [7 }, _8 f. m6 x6 A2 ^
//CPP文件
+ x7 f( o: z3 _#include "Texture.h"
# E# y) H( d6 x, v#include <windows.h>
5 r$ z* l) Q2 O5 ?) A! v#include <gl/gl.h>& C9 |3 o7 R5 @ q, k* ]
#include <gl/glaux.h></P>5 V2 t, h7 w; b0 z
< >#pragma comment(lib,"glaux.lib")</P>
8 r) ~5 ^/ H8 `8 u7 u< >Texture::Texture()
9 e/ E+ i" G' w1 Z4 D{3 J7 k' S* \4 r8 X
m_Empty=true;
1 a! s5 E; r$ u. G}</P>6 Y6 R8 d& H7 P+ A* n( {- v
< >Texture::~Texture()
5 S0 U% E! D. D+ T, T{$ ?" h. R# n' c3 _3 \ w
Clear();: e% B) s( E' B* }$ Y0 A+ a1 C
}</P>
. h0 W; \- ^) M+ w< >void Texture: oadFile(char*fn)
2 H- d5 s+ N& E V3 i8 s* Y/ M7 w9 D{
& _/ g" o) d5 M& \$ y7 Y AUX_RGBImageRec*image;
7 V7 S' ]6 d2 Y" K. c( R5 T image=NULL;</P>6 |/ A9 U* j* T: W
< > image=auxDIBImageLoad(fn);</P>; u; ^3 @5 Z$ U
< > if(image!=NULL)" ?, I u. }' f% }
{
- g0 b) n- p0 w8 P2 q% ] glGenTextures(1,&m_Index);3 I! ^% _* `; l5 O
glBindTexture(GL_TEXTURE_2D,m_Index);
7 b3 h! S d. j) [; [# F! k glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
$ z! m8 J! t% f. [9 d image->data);
9 u+ ^' L* o/ }. ~$ p5 ^7 j5 M3 ? glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
! Y: V7 x6 J% t: l. t U% J! ] glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>8 Q+ y$ q+ Q( ^8 X9 Z) ^% I2 v# d) ]
< > m_Width=image->sizeX;2 y7 Q& i" T. X" v$ C, v* y. f
m_Height=image->sizeY;</P>
) p+ b" C1 |4 F% d M< > if(image)% H+ F# O' W/ y8 p
{3 b @( { \- B) D% a/ Q1 U
if(image->data)
: T7 q8 u, J C3 K free(image->data);</P>
- X) x+ p# H. e% O7 \* w! [< > free(image);, I2 d' s; y; E# y
}</P>
+ q# B6 `. z! w/ }< > m_Empty=false;
/ v0 k- Z% ?/ D" G2 {. F$ S }2 V: u/ D/ p& Y9 z( [0 D |
}</P>+ G+ C9 B& ]8 ]1 V, @8 r7 M
< >void Texture: raw(float x,float y)) `( y6 A6 Q6 T" O# C0 a, R
{9 D' J$ C9 v6 a9 k
glEnable(GL_TEXTURE_2D);
* ^) Y3 v6 g6 E7 U4 I! b$ H glBindTexture(GL_TEXTURE_2D,m_Index);</P>
9 y# w/ F4 ~. C F< > glPushMatrix();
4 e9 m# e0 P- E) w7 D! t5 k glTranslatef(x,y,0);
2 a6 j4 c) l2 H% g6 T glBegin(GL_QUADS);
1 u% v" }. n8 Q9 L; W& U7 Z glTexCoord2f(0,1);glVertex2f(0 ,0);
# H4 g; t* |9 T% }/ ] glTexCoord2f(0,0);glVertex2f(0 ,m_Height);. O! Y, {8 l$ Q2 G
glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
2 {$ [) U0 k$ q% k, b: y glTexCoord2f(1,1);glVertex2f(m_Width,0);/ D$ s7 n( ?2 M/ [( F. z
glEnd();0 Q1 V/ f" I& K& S6 q7 w
glPopMatrix();, v9 e8 r/ R+ s9 h; S
glDisable(GL_TEXTURE_2D);
* C% t& \' f5 U% t}</P>! G, R. r$ o9 F) B1 Y3 p
< >void Texture::Clear()
Z: m0 [7 ]- X9 ]$ ~; W{
' O8 v4 ~. k. z- x5 c if(m_Empty)return;</P>
5 T3 l3 s: w7 Z p$ L$ s# v5 G< > glDeleteTextures(1,&m_Index);</P>
8 ]9 B; |7 s2 x, D4 |& y< > m_Empty=true;
* c# h8 [. Q7 z% a6 ^}
4 b p1 d7 d+ @& p
4 M0 J4 m6 a; ?* c
" W4 p# N- R8 T! }- N9 j6 n
, I3 u: ?' H) f/ s使用也很简单..直接Texture t;</P>
0 V/ C0 b8 A9 }) F5 D5 [< >t.LoadFile(FileName);</P>/ G0 z. G" |9 u. D O/ G
< >然后在Draw里,t.draw(x,y);</P>" [ z7 [! m+ j, v3 r3 G
< >就可以了.
% y! y9 f( ]* l6 r$ Z9 f
$ I# h+ V* [0 W( ~以下是效果图:</P> |
zan
|