- 在线时间
- 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头文件.# `; v i+ j+ @3 S5 t) R( d
看代码吧!</P>
; l7 k V( R2 ` V9 E! ?< >//头文件/ R6 P# @5 s: Q1 @# \, }
#ifndef TEXTURE_H9 [ @# n% }- F" l( }9 f" C5 v$ ]
#define TEXTURE_H</P>/ C* I, V7 S3 p1 D9 R- U( G! W
< >class Texture' p! U- F8 W O* A3 m
{: ?0 f: ~1 {1 I; J4 k
private:
7 V0 Z3 B3 d( L9 H unsigned int m_Index;
" W( V$ @8 S2 ]0 j' p bool m_Empty;: A# L6 c ]: `9 l8 W
float m_Width;0 q- q; N: S1 A7 o* {" `
float m_Height;7 C7 A4 X7 }+ y: N1 [* t
public:
$ G$ z$ J z, i J Texture();
3 Y0 R2 A$ B/ ?- g; v! V6 b, Y ~Texture();</P>: R6 I- U+ a1 W5 h/ V/ [, M% k) g
< > void Clear();& K# z* |5 e- ?( K# _: y7 t4 B
void LoadFile(char*fn);; w# \1 D: J* W
void Draw(float x,float y);! {# V, m- N) ]' {- L
};</P>4 X/ |6 M$ F/ ]% j4 S
< >#endif//TEXTURE_H
4 e- V. K* R0 l: f7 H; l" e" D
7 U8 y7 e6 `( R0 x2 v& j$ J9 d, P S4 n
: }' d0 |' [3 _" Y1 S- q
//CPP文件7 a% j6 ~& @# @( [9 h) o
#include "Texture.h"
9 }3 s% a% d$ c0 T7 C+ I- p' g#include <windows.h> v" H" d& Y& z6 a+ T( H: N( D" o! j
#include <gl/gl.h>
* `; V( @! y" N# H& T. ]#include <gl/glaux.h></P>% w& d3 B1 N0 f& A% _- E7 O1 z1 F
< >#pragma comment(lib,"glaux.lib")</P>
) G" K& K/ R# [: `< >Texture::Texture()/ L; c1 l& h! [# E& y+ t
{
+ R5 {( e& }! X m_Empty=true;6 E8 c4 z* u/ c) l
}</P>
( C/ R i3 K! Q7 c: A( W9 u< >Texture::~Texture()
7 M; _+ I# {' ^{' C* T$ k4 u" B, d9 [* @1 n
Clear();/ P* {. p- d8 {4 Q5 G
}</P>
7 X7 v- x) h7 E2 }$ @) B6 `< >void Texture: oadFile(char*fn)6 P' r7 g# O, @' a3 O/ N D" t) h
{
3 X/ u5 d# _1 O6 Z# Y) }. B AUX_RGBImageRec*image;
+ F. n. W$ B0 X, `* J' V( D9 @ image=NULL;</P>& }8 ?+ v y0 G! Z4 V% {2 o) T
< > image=auxDIBImageLoad(fn);</P>
, ?5 q# F; F( M( @< > if(image!=NULL)1 O" z9 m1 c# b, H& s# m3 C; ]
{
8 D1 \/ d( D: ?' Z3 C glGenTextures(1,&m_Index);# \1 ^' O! y$ Z) t5 Y* J
glBindTexture(GL_TEXTURE_2D,m_Index);
+ {, N$ c3 i, D9 | glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
3 K/ W% p5 k9 X m O+ g: c: Q) ^, @8 r image->data);. r6 ?/ X$ j0 x9 g0 Q R- o
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
4 _- O/ b3 c2 V glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
: Z7 T3 f: z+ A6 f< > m_Width=image->sizeX;/ x% G4 J1 U5 V
m_Height=image->sizeY;</P>
% C; ]- p9 w7 W" ?4 r; p< > if(image)
# J l: r( K: ]+ d) F: T. N {6 I' w8 l! w# _) ~* X( L G: u
if(image->data)
, ?( P- N" _& q; I) s! p7 l0 h free(image->data);</P>
9 f7 r; g' D# u2 ^$ e< > free(image);3 y0 g3 V. p7 m9 t5 i
}</P>) V+ @ y+ }4 B2 \0 j
< > m_Empty=false;$ q. P* G6 N* V; i9 D$ @4 r
}3 x y. O3 N! _$ X" i
}</P>) O1 e* D0 e W7 w
< >void Texture: raw(float x,float y)! U9 D, q9 r8 l
{2 L: c: v* O) y- ?
glEnable(GL_TEXTURE_2D);
5 B4 d& ~9 H/ t# K# N$ r J5 V glBindTexture(GL_TEXTURE_2D,m_Index);</P>+ \2 c! ^8 k5 ?5 A
< > glPushMatrix();
& Q/ a" C# ~0 c& {' d glTranslatef(x,y,0);
0 W) W& a* V4 D# D glBegin(GL_QUADS);
6 |1 ~" F; n2 l2 x7 O4 [ glTexCoord2f(0,1);glVertex2f(0 ,0);9 m- f0 S# J4 ^! R' J
glTexCoord2f(0,0);glVertex2f(0 ,m_Height);- O0 z) c' j7 m' ~4 e n2 v
glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
+ R+ U5 `' J! J" i3 ^; a6 O9 |" ] glTexCoord2f(1,1);glVertex2f(m_Width,0);
" G7 ?, p) B! b. M% l glEnd();5 ~: Z" {( q/ N6 A9 z6 W I! y7 o
glPopMatrix();
+ _+ @* o1 n# {6 C glDisable(GL_TEXTURE_2D);
9 G3 X! f0 d0 J- q}</P>1 \$ v, {+ V c. Q* d
< >void Texture::Clear()+ A9 C5 L, R6 F" U3 H* R2 h- p o
{
- S3 v& V/ a- p7 z6 `; ~ if(m_Empty)return;</P>
7 x! D$ U) H+ e< > glDeleteTextures(1,&m_Index);</P>9 f" ]2 V( a. O) |( Q$ @
< > m_Empty=true;
/ u+ W0 E/ x0 s4 F, n% ~2 |}
: p( ]$ m9 T$ c7 s
' ^3 X) W% Y) _1 [4 c- D% O; P4 n+ K
4 D+ `7 v. Y3 y4 O3 B% R; ^! S
使用也很简单..直接Texture t;</P>
$ A" p/ N8 v% C9 X< >t.LoadFile(FileName);</P>
4 }! g& s# B0 H5 e/ l< >然后在Draw里,t.draw(x,y);</P>
" D! \; \, H! M) t< >就可以了.
2 I$ L0 ?) k4 t; f6 p: X; J
! g5 l/ `" K8 F7 [9 G9 T# g- H以下是效果图:</P> |
zan
|