- 在线时间
- 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头文件.' t2 E' K) O6 M
看代码吧!</P>, I- `( X5 m- z }4 c4 o C3 w6 ^
< >//头文件 H: b+ E8 s& n" P- \3 J# c
#ifndef TEXTURE_H
% k% _9 r) l) s5 e, d. G& T) `#define TEXTURE_H</P>- i$ e" e! G, f& Z& i5 o' O
< >class Texture2 w- t# Z* s2 ?; p
{
/ `* x- J6 J; }3 dprivate:3 I6 @/ f2 c* q' O
unsigned int m_Index;
* C3 W1 r& ~1 f% x bool m_Empty;
. Q6 L G1 _% V# C4 T float m_Width;
' L& v) r3 i# X; l float m_Height;
( E' y/ T6 c& x+ q! F( kpublic:( T5 S7 J. Y* e' O- Z
Texture();
, f: W& } ^8 H0 B* }4 S; l ~Texture();</P>
( o9 D. J2 `$ D% L$ p, G< > void Clear();' G# ]" }, a( L" g H$ ]! a: h
void LoadFile(char*fn);9 \/ ?1 D8 `# ?; E% A6 Y
void Draw(float x,float y);
3 b& M: k3 r/ s( k' B. K" U};</P>3 W3 n) q( r7 @/ I* W/ R8 e
< >#endif//TEXTURE_H
& p; t6 B4 i) V2 z
- b( W; S2 F% m
6 ~% A# Y0 U( M% ~ I, _6 o: O
: Q( ^ Z) W2 C: v1 G) }2 z2 c//CPP文件
o1 k& f: X& B2 Z0 A+ q$ V/ I#include "Texture.h"
/ z1 ^; X y/ |) u#include <windows.h>2 u. v: v! n! n+ j5 \0 }+ W2 n
#include <gl/gl.h>
% M$ ?, a& k. _5 U#include <gl/glaux.h></P>' n* H6 ^- S2 Y) }" f! Y5 Z# ^
< >#pragma comment(lib,"glaux.lib")</P>7 y4 ]: S1 t# [) r @( N
< >Texture::Texture(); h; o) H, g" W8 y: y! r
{; Y3 i# q# ]! ~8 \; i
m_Empty=true;
8 ^* ^' ], s3 @}</P>8 {9 Y% Z6 N4 e5 }7 Y; `# B
< >Texture::~Texture()
, I) ]' h5 k( l4 b+ ?" i{8 d& x% x" r1 S9 s
Clear();
. i4 |4 e* a* W% q' \}</P>
1 v/ W& Z. i- X# u2 t< >void Texture: oadFile(char*fn)0 { z: X- y9 D( Y) q/ i: ^1 T
{& k! ] L9 h4 Z; R- M7 x ?
AUX_RGBImageRec*image;
! U$ K r) ~$ S8 E4 h! C7 L image=NULL;</P>
( C$ I5 N5 ?, u7 [! `6 ?< > image=auxDIBImageLoad(fn);</P>8 f% h& Q+ w% O. [* [# e
< > if(image!=NULL)
v1 ~* n2 e0 z/ e' D {
) w& a; \; W: E L2 r6 M glGenTextures(1,&m_Index);: I- L4 g3 {1 K+ p# X
glBindTexture(GL_TEXTURE_2D,m_Index);5 r- `8 m. D" b' t
glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
& r5 l) |% Z6 r h9 ~0 t8 y image->data);8 E* S9 o8 \' {0 G" I( \
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);# O' R/ ?2 a9 ]" I
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>" S1 O5 Z# m' ?" @$ m
< > m_Width=image->sizeX;
0 @) `, O& J- O! o2 |/ |1 Y m_Height=image->sizeY;</P>
' Y" b. K7 {2 {< > if(image)
: c; m; y% Z6 U- u; T" `9 [ {5 j7 s! ~0 i8 c. O
if(image->data) o' m H3 {9 W1 I$ T. V1 e
free(image->data);</P>! t; @9 T3 q) Z3 ]
< > free(image);# ^5 g! g% ?7 p; F0 S6 Y5 }
}</P>
e* g" J' \7 s< > m_Empty=false;
+ s: o& o" ^' S }
" Z4 r: E6 a7 V _5 g6 J}</P>
, Z1 K( }. q( l& K' K+ E< >void Texture: raw(float x,float y)
! g/ k: V5 Z! q0 q+ [1 p% z{" T& I" S7 k& i/ k J3 }- ~
glEnable(GL_TEXTURE_2D);/ X' {3 }2 j0 p- I; J: U0 U3 _3 W7 O
glBindTexture(GL_TEXTURE_2D,m_Index);</P>" O7 F2 {3 x: {( b- _
< > glPushMatrix();- G$ [3 i/ P- K6 E' E
glTranslatef(x,y,0);4 t( I5 F6 D @" t
glBegin(GL_QUADS);2 @* T" A3 I! C
glTexCoord2f(0,1);glVertex2f(0 ,0);
9 F; ~) R1 i2 G; t p; C glTexCoord2f(0,0);glVertex2f(0 ,m_Height);
' ^& W/ K$ L2 T" [ glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
$ \2 |; {+ w1 q5 r, E1 K glTexCoord2f(1,1);glVertex2f(m_Width,0);
. e9 J. m) ~; N" b e" i glEnd();+ J3 j* P! T8 x- k- w- f6 `9 J
glPopMatrix();
i, k, e' n v. X+ a glDisable(GL_TEXTURE_2D);- h4 K# |; B( D9 N% _
}</P>
, k( e) F3 D9 J+ p< >void Texture::Clear()
+ e- J/ y# D0 u/ J, a' _{
+ V) ]+ X0 c) L) x1 ~ if(m_Empty)return;</P>2 K' K6 z0 p3 a
< > glDeleteTextures(1,&m_Index);</P>4 D+ j6 X7 y) p( P4 z- S4 o9 n
< > m_Empty=true;! A6 t7 e, ^( _; V+ P( Z- F
}
0 u8 d3 U% I ^0 f6 U# t$ h
3 d4 E! b: p* d; Q G
( V# E. P1 [$ A
5 g+ l6 D. D! T7 N' |3 }9 ^使用也很简单..直接Texture t;</P>, Z, n+ @- G; C2 Q1 y1 f- A
< >t.LoadFile(FileName);</P>+ }* @/ E2 J5 [% U
< >然后在Draw里,t.draw(x,y);</P>
& l& P8 {2 t) s$ v# J< >就可以了.
9 ]2 Y% w1 }7 e; d+ r$ q; a D! l# M9 V+ ?& m/ m5 c" k; [
以下是效果图:</P> |
zan
|