- 在线时间
- 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头文件.
2 g [. p0 z" M$ Y c, g V+ m0 T看代码吧!</P>, T/ e+ B }! p+ s
< >//头文件# l# s$ {$ [8 Y5 O% V5 k9 ?* c
#ifndef TEXTURE_H
8 r! J+ m9 x5 x4 F0 O& T#define TEXTURE_H</P>. _: L, M$ z% t x; j' r( E# W
< >class Texture" V4 e5 G8 d' F2 z% B9 q
{
* n+ h# u) |6 c: l5 Sprivate:
1 @2 {* v1 M3 ~0 ^( r9 G unsigned int m_Index;
7 m7 l6 p/ d4 g. V5 l* ?" P. ` bool m_Empty;
% d, F: y! [! p( e$ p8 ]' u float m_Width;
; f3 J( Y Y% J. S+ x9 T I float m_Height;
! X$ s9 k3 [& z! D) jpublic:
' |3 a3 D4 l6 B- H3 P* W# s Texture();
* k; s" Q7 R+ Y3 q ~Texture();</P>
7 a/ @$ t4 ]8 r9 G- h5 n4 L: A< > void Clear();
0 G q. O) v, h$ A) v' L void LoadFile(char*fn);
: }/ z. p( }: g# ^3 @3 n# o v& ~ void Draw(float x,float y);3 j/ @+ S5 y6 q( ^7 S0 k4 l; n! z
};</P>0 P& K$ }8 @/ o e1 ?6 U6 q8 O
< >#endif//TEXTURE_H1 J6 f9 B9 a/ ^9 B: {
* F6 @7 ^1 ?! n3 |
1 |+ l! O* O5 w: P8 G( \4 b
: H9 I5 Z' I7 v5 E6 H/ O& w
//CPP文件- w# x: M( [- A- W6 N- @
#include "Texture.h"
# J* o! q) B8 n' {' D#include <windows.h>
8 f8 Q. f0 s' n#include <gl/gl.h>6 S9 y9 s0 v$ K0 r! p3 y" {
#include <gl/glaux.h></P>
9 {2 _% l5 a' e% p9 \< >#pragma comment(lib,"glaux.lib")</P>
e* f+ t( T1 N2 Q1 Y4 F< >Texture::Texture()
3 m) T# Y! K6 D [2 @, U# l% y{
: n& |4 T; O% y2 @ m_Empty=true;8 y5 e5 [. j* _: I9 Z3 I
}</P>
' K) L$ d% g; U! S1 B+ @< >Texture::~Texture()
+ @/ y1 E g" T: n' ?{' U s! |! H+ I+ K5 G
Clear();
$ K2 {9 U- O- H \}</P>+ n/ P) S9 J2 y' J" m
< >void Texture: oadFile(char*fn)
, i' b2 F4 z. M4 x{
; U4 y, \- Z9 @7 K& R! r* @' d AUX_RGBImageRec*image;
# p, K, { l- p5 q) z/ X image=NULL;</P>
& [% ~ @+ a, z% ~< > image=auxDIBImageLoad(fn);</P>3 O( }6 s! ], P. `: i$ B
< > if(image!=NULL)+ D* U9 W/ k( }5 j* I$ A K
{* X" c @& W6 N
glGenTextures(1,&m_Index);5 M- ^) V$ ~' @/ T% l
glBindTexture(GL_TEXTURE_2D,m_Index);- X9 J& Q) L1 r/ f% J
glTexImage2D(GL_TEXTURE_2D,0,3,image->sizeX,image->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
, X q& u4 M2 c/ o7 i2 J9 i5 C image->data);! P' v8 L0 [/ f( U ~' ?4 Z
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);/ P7 E4 Y: F+ N: M, Y3 Y
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
+ U+ i# U4 g3 ]" [- i+ E$ L< > m_Width=image->sizeX;
4 D& P2 _5 N* K m_Height=image->sizeY;</P>
: h) U; G# b& u8 n< > if(image)6 X, V; m! E( K
{
' J1 m* Y% c( K3 S2 Y+ k% H if(image->data)( ?1 l1 J5 b' U- w6 F5 f
free(image->data);</P>. ]4 E. p$ K+ X: Y
< > free(image);
5 t0 b9 V( S' J9 d2 M }</P>
7 D; E# y& x" F3 x# z0 ?2 Z< > m_Empty=false;! [2 ^6 U7 k! V
}9 i$ z! F4 A' D* D
}</P>
7 Z ~9 _" X! N! [8 K: L* b< >void Texture: raw(float x,float y)+ H+ `* v, A* o
{7 b0 m' R4 i0 E3 y% G
glEnable(GL_TEXTURE_2D);) G" {9 K/ }; p- V& k" K
glBindTexture(GL_TEXTURE_2D,m_Index);</P>
* ]9 Y, Q$ M* s* c' x< > glPushMatrix();! m0 G& ~/ n7 j \
glTranslatef(x,y,0);3 y0 L z; }- B1 h Q- V* n
glBegin(GL_QUADS);
' c# P& \6 x- S) Y! { glTexCoord2f(0,1);glVertex2f(0 ,0);
4 y {+ `; K9 O8 ~+ T+ G1 I1 | glTexCoord2f(0,0);glVertex2f(0 ,m_Height);
- k0 g' Y8 L( K: K' Y& A/ B glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);; }9 | e) V% ~7 T6 T$ l$ r! i5 }
glTexCoord2f(1,1);glVertex2f(m_Width,0);+ ]; N/ J; `9 Q; g$ A
glEnd();
' [8 j. T* L+ O8 o; } glPopMatrix();5 Y) L0 W2 C2 u; X; A3 n# g
glDisable(GL_TEXTURE_2D);
6 c G( D' {5 _$ O4 Y; f! a}</P>" I1 ], n& ? A2 X3 {: C1 M
< >void Texture::Clear()
+ j) {- B& Y" ]6 L{
' Y: i9 ], }/ n if(m_Empty)return;</P>) P( M- J H1 u# S. b* d; F
< > glDeleteTextures(1,&m_Index);</P>
" P0 e/ z3 l! V9 r< > m_Empty=true;
7 q2 Z( V: t, S: Z# k. a" N}6 W; n! d0 B8 J
- D! p' o6 z$ r/ Y& t; J' j) Q1 O1 U1 W+ W- \' f4 J! U3 A
S7 e' [% G6 h! ^5 j- g
使用也很简单..直接Texture t;</P>. C, G. |5 P8 ]7 {
< >t.LoadFile(FileName);</P>
! m( ^4 |4 [$ Q6 ~, |7 u1 }< >然后在Draw里,t.draw(x,y);</P>3 l8 N- E8 E9 A/ Q9 U1 M9 S9 h' q
< >就可以了.
. p$ h# t H* d3 C2 M9 g
% h& f8 D2 o1 ?% A' Q以下是效果图:</P> |
zan
|