- 在线时间
- 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头文件.
5 g# u/ w: Y2 R: }5 e1 S看代码吧!</P>
0 p4 | G" n/ s& q: z& u$ D< >//头文件" U9 B: I. l; V
#ifndef TEXTURE_H
% E$ }) F, b; r#define TEXTURE_H</P>9 J b2 D7 @6 Y1 w( \) c$ E! B7 b
< >class Texture
/ T$ K3 X1 m! u/ M{% P5 T7 V7 V* m1 s2 p7 a& M' H
private:4 P- r4 \) w- d) k" h
unsigned int m_Index;
; q4 ]5 ^7 _2 M G bool m_Empty;3 M7 v4 m+ ^: W& L! @
float m_Width; N$ ^. f" t% I5 a0 ]
float m_Height;
3 `1 z7 k$ a" G! S# [public:
, J. z* J& E2 T( h Texture();# ^( n+ e) H/ ]1 J5 O# V4 l& S6 b
~Texture();</P>
( o- M% o( t0 \- F" `$ I0 [9 {< > void Clear();
5 p) i2 |/ ]3 r2 P4 Z8 E void LoadFile(char*fn);; t2 ^) a, e! w0 a0 ?" O$ C' H; y: Q
void Draw(float x,float y);
3 Z2 f2 v/ t* ^) k; a! [# q};</P>3 t. n. a9 {; t( \. i& L+ Y
< >#endif//TEXTURE_H
7 V) o7 R1 P G" M' g% ]/ \( e, @, Z% D# E
4 q/ ^" ]) E! d2 g u
/ J+ G2 H1 r6 d( Y I
//CPP文件# Z5 ~4 r( r3 }+ ~
#include "Texture.h"6 ~8 E" H; V: G$ H2 ]
#include <windows.h>+ T1 x9 r& l5 A7 k& F7 H
#include <gl/gl.h>
+ ]: A$ \3 X9 q/ h/ t#include <gl/glaux.h></P>6 ^$ T7 V) X c
< >#pragma comment(lib,"glaux.lib")</P>
3 }( O7 t7 K& d: M' z% o" K< >Texture::Texture()9 [3 M ^* q2 r) d. t1 l U! y
{
- O: ] p" a, s2 q m_Empty=true;+ f6 [/ P$ [; @( u& B
}</P>
~2 j) t, K. T" D2 B6 q< >Texture::~Texture()7 Z2 f1 G$ U! `7 A
{' n; W( k3 @% s/ H8 v) J
Clear();% } j- c3 L8 G( S @2 r v- F4 e6 n
}</P>
/ P ^- x/ i! U' g< >void Texture: oadFile(char*fn)
- z+ P r2 g8 E{( w/ b4 C: D% w4 L7 b: C# @
AUX_RGBImageRec*image;
: g+ o5 p4 D4 Z" v; K6 C: _ image=NULL;</P>
5 B- N) `4 n) T& H< > image=auxDIBImageLoad(fn);</P>
. Z* q5 E+ T$ }% g7 M! a< > if(image!=NULL)
! [$ }, s- ^, E {# l5 S% @* @- E
glGenTextures(1,&m_Index);; Q! A5 \5 p. W* D- T* c8 s
glBindTexture(GL_TEXTURE_2D,m_Index);
' N5 b; j0 h5 d+ ]4 ?: E4 I- Y& W+ f( i glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,7 x" g7 V* }, n! X3 U I q/ w
image->data);. L: c6 [! h* _/ \" w I
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);% X8 L" p2 i+ @ ]
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>4 t, t- W0 h; H5 V, }
< > m_Width=image->sizeX;% j7 y }4 \6 G2 G, P
m_Height=image->sizeY;</P>% ^$ w, L. C1 `) J4 g9 r( X, M6 t( Q
< > if(image)6 [2 \1 T( p2 h+ i u; ]0 Y: q/ K$ f
{
. C" v$ r2 `. p# d: n if(image->data)7 J7 g/ L/ e/ g* q. _
free(image->data);</P>8 H$ A3 _9 c& i( z
< > free(image);; T9 X2 [% ^( }% c& `4 A0 v w
}</P>
; c/ U) n9 F) `1 E! [* d. }, B6 [< > m_Empty=false;* Z; Y+ q% I4 V4 o }: W% [
}
/ b0 b$ P4 m9 E4 V) R) {7 z}</P>7 u: ?! I) P& w B/ s+ Z: ^
< >void Texture: raw(float x,float y)
1 K+ ?- n% ?) }# Y! Z, P{7 s) z, @" U0 J! L/ v
glEnable(GL_TEXTURE_2D);1 v8 l7 r$ [+ ~& F
glBindTexture(GL_TEXTURE_2D,m_Index);</P>
& D" F: @' c% ]9 ]! ]) n< > glPushMatrix();
5 t6 ?* s+ I1 |1 I7 m# D! ?) y* { glTranslatef(x,y,0);
& U' ]7 Q, t$ i+ P7 E glBegin(GL_QUADS);9 I5 F2 s2 c8 `
glTexCoord2f(0,1);glVertex2f(0 ,0);% N) C2 E0 v% C C
glTexCoord2f(0,0);glVertex2f(0 ,m_Height);$ _) q3 Z% m7 W2 _$ U
glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);! I) p5 K0 b& M+ p3 y$ ~8 q
glTexCoord2f(1,1);glVertex2f(m_Width,0);6 m0 L9 N0 y6 N4 v e3 p# s4 B
glEnd();" s$ h+ H2 [& _
glPopMatrix();6 t J: q; ]# B$ X2 a
glDisable(GL_TEXTURE_2D);0 K7 q7 K z/ h2 k7 H: P4 T" T
}</P>
m+ \5 K/ n7 D! c4 O' `2 ^# H< >void Texture::Clear()
( o9 n' H3 F5 s{
3 ~" M0 B" d3 C% V if(m_Empty)return;</P>3 X: e8 Z9 T0 u1 I
< > glDeleteTextures(1,&m_Index);</P>$ e+ `3 C& l: b4 ]! A
< > m_Empty=true;
( c* \$ E8 w) [: D; v$ m+ R}: e1 e# Q0 t2 C% X- O" n3 r
, G! o$ K' \8 @; a6 b7 M
4 K: I3 V/ @2 x4 x- h' J7 z/ I. f# p$ @) w
使用也很简单..直接Texture t;</P>0 S! g. |6 ~6 B; t& i' P! \
< >t.LoadFile(FileName);</P>0 \* F7 S5 ` I3 w2 _) l
< >然后在Draw里,t.draw(x,y);</P>
, r$ d" M+ y8 X+ F< >就可以了.( q4 i) x( E5 r7 V8 \4 o
1 \! E+ h; I! u* g& S. H, ]3 D
以下是效果图:</P> |
zan
|