QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3198|回复: 1
打印 上一主题 下一主题

一个纹理类,简单封装,为方便使用的.

[复制链接]
字体大小: 正常 放大
xShandow        

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
7 H* g$ P+ t2 G' a$ H$ r# V$ |看代码吧!</P>/ F4 M) j! F7 x
<>//头文件1 R: \1 C1 H* E7 V+ k2 B! L$ S
#ifndef TEXTURE_H
$ i" O/ O% J3 l+ @( O2 g) t#define TEXTURE_H</P>
1 ~" |9 k2 }- a9 S<>class Texture" D6 i4 w% i4 J5 j; S3 w8 j
{' U7 s/ F& O- w5 I) v6 c
private:
3 ]: P' N# g- L& }$ |+ R unsigned int    m_Index;
$ Y1 W3 z& f- z+ @% U' h bool   m_Empty;1 X" O" C% o# G5 T3 j# n
float   m_Width;
4 _* n$ \% x3 F7 D7 j float   m_Height;
2 L5 f' E; h7 ?0 i( `% m8 b: @public:
. c; u3 _5 O% M8 t Texture();" W* F8 @& Q. i7 `7 i+ n2 V
~Texture();</P>
, y1 w0 R; ~% d3 r9 p- {( w8 h<> void Clear();
3 v+ B" X1 X/ g' X void LoadFile(char*fn);. L$ F% o$ x& N& X( V- H
void Draw(float x,float y);1 H/ F7 v0 I8 j. N7 b+ V
};</P>
" Y  J% \4 ]/ F# {( O* V6 i4 e) i<>#endif//TEXTURE_H
/ G+ c$ E. v, S3 J: _/ }" M3 t/ D0 w$ \+ b$ A6 i. [

+ z  V" ~1 g, @; _$ |; ?
: L# S- k; R8 a) m//CPP文件; ~# z) M2 t2 S0 L8 v& X
#include "Texture.h"
7 k1 d/ M- O; z& u- A3 [#include &lt;windows.h&gt;% J( L8 `9 j$ ~# @: _: Y) J9 t" O6 o
#include &lt;gl/gl.h&gt;) [7 R' i  v' ^: b
#include &lt;gl/glaux.h&gt;</P>
* t3 k# |7 x4 y: I, U<>#pragma comment(lib,"glaux.lib")</P>7 D3 g6 @9 }) C. V& M
<>Texture::Texture()8 r# h5 L. D/ |5 F8 R6 d, m! R
{
* m; r& _% G. I4 `6 [. y m_Empty=true;2 c; a4 j$ T& `$ i. d/ {" V5 n
}</P># ^# K$ T: i  a6 s9 E- j' y. G
<>Texture::~Texture()9 X& o+ C/ N: G) m% p# U3 y+ h% u
{% x5 L% F3 d' z4 R9 _  _0 k( D
Clear();
" G2 r0 _6 Q* I+ Q; B7 t+ @}</P>
# z) A5 {  K: r<>void Texture:oadFile(char*fn)
( Z$ [8 k8 n6 V" @0 M6 q& R' B  K' k{
: Q5 o5 H3 @) |) T% H. [ AUX_RGBImageRec*image;
# n! \) S# r! b; o6 b; I image=NULL;</P>7 {0 f% B) `+ f. @2 b; ?, `3 @; J* `
<> image=auxDIBImageLoad(fn);</P># p( l& [9 {& i  n7 N. x" y
<> if(image!=NULL)/ X, x8 l9 S1 P
{
1 x1 M  a& G0 Q; o( W8 E$ [& x  glGenTextures(1,&amp;m_Index);
# H" D- I' ~0 X8 F3 [  M8 Y  glBindTexture(GL_TEXTURE_2D,m_Index);7 N  v# M; @- N' P
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,; G  f) [& e2 o6 _
   image-&gt;data);
3 ~8 j# D) L. e0 s5 a  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);$ a) _3 B$ v- F
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
/ @1 ?( X& N7 ^! C) |<>  m_Width=image-&gt;sizeX;5 s( m, Z9 O' S+ ]1 @, L2 u
  m_Height=image-&gt;sizeY;</P>
) J  Z9 t/ }1 x) d. W<>  if(image)' y- W6 ?1 R1 {! S
  {
2 K/ \7 P) r! }. Z) @   if(image-&gt;data)+ Z; U4 [1 T. h
    free(image-&gt;data);</P>5 |. C6 J( t( Q4 i1 _5 l/ G
<>   free(image);# v5 S. f# p/ N% X  |+ a, H
  }</P>
5 y( p* x9 y0 @- }" S8 ?<>  m_Empty=false;/ z$ ?! w+ E% \/ @6 P5 \0 X; O3 y0 O
}
# B, x8 R$ x$ g5 i9 [; U}</P>2 `) A" P6 {7 Z$ @4 f. K7 r
<>void Texture:raw(float x,float y)" I  ^+ H0 V$ a2 X0 c) A
{$ d9 r" y6 e$ Y" C: P( o- s
glEnable(GL_TEXTURE_2D);. n3 I( ]9 I; A! @; G8 f
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>2 i7 p  V1 H8 O3 ^( p/ ?
<>    glPushMatrix();
* \# M& y9 C1 [- O3 H7 B, U! F- `    glTranslatef(x,y,0);
9 V" }& z1 W# d5 j- l5 Y glBegin(GL_QUADS);
$ F: j& L$ B0 N4 X4 @" r        glTexCoord2f(0,1);glVertex2f(0     ,0);
5 G/ j5 t' X( m0 l* ^        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);% {& ^! I% p9 D& Q7 l$ h
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
2 a( z8 |& v# F& ^& S5 ~        glTexCoord2f(1,1);glVertex2f(m_Width,0);
  p4 {- o  Q- A$ a    glEnd();& x& M. f! P; k3 B3 b9 r, a" t
glPopMatrix();4 _$ O2 M" x8 ~. b# a
    glDisable(GL_TEXTURE_2D);
+ s3 u  h: V0 s4 f}</P>
, v6 i# b1 n8 w$ v<>void Texture::Clear()
+ g* g' u0 R7 k: a9 q+ r: c. h8 h{" z. V+ k! z% W7 s. O1 `( Q/ [& b
if(m_Empty)return;</P>5 @& z' s/ T) c( q! Y
<>    glDeleteTextures(1,&amp;m_Index);</P>
5 p; s9 r2 ^, k$ g* m+ y<> m_Empty=true;
) G7 l3 N9 M: r5 U; B! }, s}. S( ]2 x. f" U
, B7 v% {* w+ \/ t) V& X7 `; e
  Z8 |  B( _; u9 o

0 w. w" w7 ~1 j0 K7 C$ ?/ f使用也很简单..直接Texture t;</P>3 |8 @' q0 Z( ]% U8 W
<>t.LoadFile(FileName);</P>/ \6 t+ r4 T9 H6 t+ J
<>然后在Draw里,t.draw(x,y);</P>7 m) D) h, d& E% M, @/ g4 c9 O, }
<>就可以了.
- a0 ?9 Q; k6 d3 J% D+ G9 O$ _& V! G8 S
以下是效果图:</P>

一个纹理类,简单封装,为方便使用的..jpg (87.31 KB, 下载次数: 235)

一个纹理类,简单封装,为方便使用的.

一个纹理类,简单封装,为方便使用的.

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
xyjuzhen        

0

主题

2

听众

80

积分

升级  78.95%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-23 09:05 , Processed in 1.399727 second(s), 61 queries .

回顶部