- 在线时间
- 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头文件.
0 j# d( k4 H, s' U看代码吧!</P>
* ~0 F" U0 ^2 B" H ]' ?7 S) [ }" K< >//头文件
4 p) ?, `0 }8 y' P0 h#ifndef TEXTURE_H
1 b, F" ^, V2 ]; g#define TEXTURE_H</P>- \$ `$ V4 ?- J0 q
< >class Texture
! `" t# ?- E# L* s{. p/ D: N# _- p" z2 O$ e
private:0 [% z% S6 E- [7 x3 }
unsigned int m_Index;0 \/ Y( l0 ]3 R$ } R% R9 k
bool m_Empty;* b0 w) }5 w' v# X- e+ U
float m_Width;/ t, _* U k8 b% _% G/ Z6 b5 I
float m_Height;
5 P2 k$ c% @ @% ^, y l0 A6 gpublic:
1 i& D/ Y: I/ }1 C1 A Texture();( H: w' p' Q) i* Y! a8 f
~Texture();</P>
) Y! ]2 o3 I- F3 F$ u< > void Clear();
) C6 C8 C" X$ [7 w$ l void LoadFile(char*fn);
8 \4 Z0 \: {" a, N void Draw(float x,float y);
& U& P- g% Q( g};</P>4 J7 Q/ Z; D$ y* j* G
< >#endif//TEXTURE_H
! v/ n0 O [1 a3 Q
) T) ?( Q9 l$ ]' R; G. W# p0 F9 y
2 `" N+ ~, K$ I: r
5 g5 v, T* E. O" ^' D: r//CPP文件
- g8 p/ ~ s! v8 ~#include "Texture.h"0 y( V5 W7 z/ ]3 [, q* \) q
#include <windows.h>
5 B, M6 k. l& }1 G$ s3 f; S#include <gl/gl.h>) L' U3 w6 u# k1 @
#include <gl/glaux.h></P>
" H& m) w. \' O8 _< >#pragma comment(lib,"glaux.lib")</P>) ~8 g: x2 e" {& l3 j0 J
< >Texture::Texture()' J4 X8 {' O; o8 ~
{8 u1 g" l3 N( x
m_Empty=true;& H5 \5 G, L$ t9 g! r: @
}</P>6 o: Z2 I: B: a) ?' R3 b# i E
< >Texture::~Texture()
& m5 G3 Q2 p4 V( Z7 [! u0 `7 b5 f{
- N3 w, l; b, {5 `* s Clear();; [' c4 J7 s, |. K5 E* \. V
}</P>
! Y7 O# C9 Z0 g< >void Texture: oadFile(char*fn)
9 H8 a8 U0 M2 q5 \. \3 U{: S: f6 p$ {0 a. U0 L5 p) w9 p
AUX_RGBImageRec*image;( b; Z" s1 }( ^5 s
image=NULL;</P>: R' Z @/ ^9 b9 ]& v6 s
< > image=auxDIBImageLoad(fn);</P>
! p! M- ?; `* q< > if(image!=NULL)8 i' _8 b6 ^9 P% ], G
{
) T6 q& Y3 {$ K6 a( f glGenTextures(1,&m_Index);' s: F; P2 u* s* U. }2 c; p4 ?
glBindTexture(GL_TEXTURE_2D,m_Index);! X2 |$ [# e, L& g
glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,& w3 D4 C- J8 T3 L
image->data);8 e/ D% V; q5 n3 e
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
. A# x, ]5 r: @7 X. g; g glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
' n% n; M( m6 e1 R< > m_Width=image->sizeX;; f: l& o4 ^* ^) `
m_Height=image->sizeY;</P>- z) \- F% V+ b) m9 v5 A7 ?/ _
< > if(image)
& v% Y1 l0 O6 @6 ^( @( [/ ~" R" s& c {
5 R4 o8 w p5 ?8 m5 x) l if(image->data)
( Q! `1 J+ v- Q4 C( i5 g free(image->data);</P>
" h* d. K+ z+ I2 f1 K: z5 i C< > free(image);
7 j% c; i2 b2 E" B- x9 \: W }</P>
$ ~3 U" z$ i1 \& n q0 F) M! s6 [< > m_Empty=false;
! c' z7 ^2 G% R9 h7 K3 ? Z }6 {$ L1 g( t# B, t) w* v
}</P>4 R% x/ ~& e: L
< >void Texture: raw(float x,float y)/ o! a( T3 T2 n& W7 u' H n
{- s: ~7 Z, @7 Q8 v# e, E+ v
glEnable(GL_TEXTURE_2D);
" e5 b$ v$ S: R( e7 n% O O glBindTexture(GL_TEXTURE_2D,m_Index);</P>: |5 e, v0 O T* H C' [6 m2 h
< > glPushMatrix();
6 y( g+ K s9 ] glTranslatef(x,y,0);
$ v; ? ]0 v" P6 E glBegin(GL_QUADS);
- L$ |, K( O5 y+ L+ ]* K glTexCoord2f(0,1);glVertex2f(0 ,0);
+ V% V" ^! z5 y* ]- u glTexCoord2f(0,0);glVertex2f(0 ,m_Height);- X i9 x9 i _& ^4 p( W3 K% Y
glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
" @$ c6 I" A% c3 b glTexCoord2f(1,1);glVertex2f(m_Width,0);
/ r, F- h3 q. X/ R1 S glEnd();; ]! W8 e m" n6 r2 q/ X* W
glPopMatrix(); n0 E8 e8 M; M* r
glDisable(GL_TEXTURE_2D);
, M+ j H- S+ u1 A9 E}</P>
6 `- m" g# D/ ?/ X( v3 h< >void Texture::Clear()
8 x- s3 O8 P; m{( Z2 f( H& J6 ~, R4 G6 f
if(m_Empty)return;</P>% X# U5 C$ |) X: O" F
< > glDeleteTextures(1,&m_Index);</P>
* y, F6 \' e& d$ s% {< > m_Empty=true;
7 c2 E T. k7 [3 {}
: x/ J3 b; _6 T. h; V+ n; x8 k
; |% |+ {, |6 |
; [$ g6 r o' s% [5 s! a' B& o
3 ^8 ]/ f, F0 ?4 A7 e$ b; ^使用也很简单..直接Texture t;</P>/ R" b" B8 P0 t
< >t.LoadFile(FileName);</P>
4 D5 @6 x, o) g4 J; O# _< >然后在Draw里,t.draw(x,y);</P>
- Z; ]! a$ g1 u9 Y< >就可以了.
. }* S3 ~9 z( m6 t9 X" a' ?" R' s) ?0 P( {
以下是效果图:</P> |
zan
|