- 在线时间
- 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头文件.7 A) u/ u7 S& h1 x' u/ U8 _
看代码吧!</P>
2 E! D A% u" m! e" b7 r< >//头文件
6 V0 P! j8 Y, L ], _ h0 h#ifndef TEXTURE_H
0 A% S5 I! l, q2 @5 H; Y' ~2 \#define TEXTURE_H</P>
. A5 R+ r, I1 ]% @& u< >class Texture" T) K2 D& u, N
{! s+ B" a# O: B3 i3 i% m6 Z
private:
+ S# V& g4 W+ e# F* n unsigned int m_Index;, N, S& w8 h, b! p5 p5 }
bool m_Empty;( J* X& G- C/ O1 `
float m_Width;
( f- q4 l% r! [- V4 g" y U8 U float m_Height;
4 t/ b5 j$ ?, g; P. _ M4 Npublic:
: q; V# g3 ?& h5 q4 w3 o Texture();0 ^( C! t/ s5 r3 B
~Texture();</P>; T7 j+ [; s7 f" L1 j% T
< > void Clear();
6 [* c& m& N6 s/ I3 S: G3 K void LoadFile(char*fn);
5 ^' I9 `3 o# H6 W G void Draw(float x,float y);) W3 m5 t6 t" z
};</P>7 L5 A" F3 ^% S( y$ q; S5 s
< >#endif//TEXTURE_H7 F# R9 k% \7 ?
, `9 f# u. Y$ b; t' b- s
5 V5 W& }, e; V. N/ s5 O2 C5 v# q; `2 l% M" a: e+ D
//CPP文件
4 V" R2 ], C- w3 I" a#include "Texture.h"
0 d/ Y; L+ {# i3 o; S8 C5 `#include <windows.h>) b* A' u) Y& W7 a3 Z+ c
#include <gl/gl.h>
' d% M. L6 z; j P1 M#include <gl/glaux.h></P>+ \& K: a. M: O# z
< >#pragma comment(lib,"glaux.lib")</P>) K4 v0 G8 x# Z% i
< >Texture::Texture()
+ i3 |( l. E8 W3 O{9 u W! S0 l7 K0 g
m_Empty=true;) K5 |* Q& `4 I- R: i
}</P>2 L( f5 [" v- H2 ~
< >Texture::~Texture()
# [2 z2 a* ^7 l* l$ u0 H! B/ y{$ W1 e1 H1 }$ {; p+ J; z4 d
Clear();
& j1 ]7 t6 O& }" e' }3 h$ N}</P>9 \) b; w, r$ W
< >void Texture: oadFile(char*fn)
! V9 A1 [& g- X6 d# r) `{; P+ D k9 X$ G6 V4 c
AUX_RGBImageRec*image;
I9 x, H) K$ W# L! ^% a image=NULL;</P>" J6 q( ]/ a0 ^6 V, F
< > image=auxDIBImageLoad(fn);</P>
' }6 e8 F! O: U< > if(image!=NULL)5 ~4 N. t, D! g9 y& H4 w- P9 c! ^
{# k% @5 {0 m0 M7 R6 I
glGenTextures(1,&m_Index);
' ^7 k2 w+ p% _: r, i/ G glBindTexture(GL_TEXTURE_2D,m_Index);
+ v3 w2 T- Q4 L( W( Y0 B5 c8 D glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
8 m$ l S6 b9 |* r1 C0 r n image->data);
: _. E) B. l6 f4 C glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
% J2 w6 {4 h. k" b glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
' @' i9 n, C3 y7 P4 Y< > m_Width=image->sizeX;
/ [: F, a, v& {6 [" C6 e0 r m_Height=image->sizeY;</P>" _& f. ]( P! M" w) L6 Y1 D( n2 k
< > if(image)
9 ^- s6 a# O* x9 U {
' u9 X: l- I% S. Z( c5 A if(image->data)
! C1 o5 Q1 p# g. ` free(image->data);</P>: g+ `5 u; I; G2 I" }3 ]
< > free(image);
# H. d( Q6 n+ _% Z* v5 R& c+ V( y }</P>7 O: l, |6 b2 [
< > m_Empty=false;: w& Z" l0 `6 Y, ^: P4 M: ^
}
- n# r( w6 v, {, i}</P>
7 u: Z5 o6 z0 L" f% V< >void Texture: raw(float x,float y)8 {6 \$ ]7 p& o0 B. m
{
9 R! S4 T y# B- ^* h V8 D {+ A glEnable(GL_TEXTURE_2D);& b6 N1 {7 G6 M% R: a/ ^
glBindTexture(GL_TEXTURE_2D,m_Index);</P>+ g; N1 r$ ~* P, t; |7 \( g! Q" K
< > glPushMatrix();
$ E8 m! k* L9 ]8 T$ d- Q" P( ?$ @ glTranslatef(x,y,0);
9 I" ^" I) {& Y7 R# y; i glBegin(GL_QUADS);6 b8 x* ~" k) s2 X8 R2 s
glTexCoord2f(0,1);glVertex2f(0 ,0);
. Z# p$ z7 T; s1 s# y5 C, {1 s; T glTexCoord2f(0,0);glVertex2f(0 ,m_Height);1 U. W% s" R5 }0 N7 d. X0 ?5 }
glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
3 c5 n3 j( n5 X f glTexCoord2f(1,1);glVertex2f(m_Width,0);
1 M; X3 ^6 z9 w. l* y glEnd();
% |9 I: w$ N. q7 _% V) j0 N! P2 y glPopMatrix();4 x7 e, X1 p3 l2 S1 V5 N
glDisable(GL_TEXTURE_2D);- _9 C, ~, d z4 H
}</P>) W+ i9 {- a+ `* L
< >void Texture::Clear()
7 @+ j7 `8 W0 M: w. H{: S$ ?. T: i$ H
if(m_Empty)return;</P>: W: j" w3 h' @; w A# w
< > glDeleteTextures(1,&m_Index);</P>
; r- Z' }1 i2 V< > m_Empty=true;
0 u. m4 [ E( R}
" L$ Q- M) V+ w6 b6 G; X. N4 m* g! s: M$ ?. B
: x7 z# W& K/ T/ j6 |4 V
( _: Q& r4 K% {5 S8 }使用也很简单..直接Texture t;</P>8 ?/ Y5 E# R) h8 b. u. Y
< >t.LoadFile(FileName);</P>
% u6 a: z- r$ n' N2 \< >然后在Draw里,t.draw(x,y);</P>; r& Y- [( i3 \
< >就可以了./ S: l8 `' P( a ?- n+ P$ y
0 Y7 Q5 y$ a+ L$ g" k5 [
以下是效果图:</P> |
zan
|