QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.6 [: r/ I: H- S9 D, H
看代码吧!</P>
1 n- O+ i# b. d/ i4 `. i$ l9 n2 |<>//头文件
: t7 w+ a$ R$ a1 R8 L& \#ifndef TEXTURE_H
$ E- r5 a: q& h- ^3 G#define TEXTURE_H</P>) _. m2 `/ h4 Z  b' v
<>class Texture
1 G: M7 S# Z  F; R- r{7 Y' w9 q% W5 L7 y- K7 e7 a
private:# Q1 P0 e: Y  {0 \! _
unsigned int    m_Index;
2 P: K# L2 h! v0 B- b# z8 ` bool   m_Empty;, V1 `/ m6 S6 r% P& F7 c. ^) g' R
float   m_Width;7 ~, p) c7 @. z0 |- C
float   m_Height;& n" R  }( C7 C9 `' v
public:
& X6 ~% W7 b1 c+ d+ [9 |$ a Texture();
. f& E+ t" v4 f1 j8 I/ }5 s( O: U: q" a ~Texture();</P>
3 C) Q8 N8 m2 c  L( E0 K<> void Clear();, w( P2 u  O, z2 x8 E' {# F
void LoadFile(char*fn);
  l3 C) i+ Q# s- w4 ^7 Z void Draw(float x,float y);9 G& T! b& E: t; `9 P9 q( H* B( `# d
};</P>
4 v+ w. W( y7 r1 |) ~9 n<>#endif//TEXTURE_H( a- v& w& z9 U8 ^) X
# o7 V* @" i8 {) t

% ^! h# w& p! \9 s+ E# ]9 H1 b- m# N9 @* D7 k: R5 ~& T: T
//CPP文件
7 |7 O- I; V8 i+ ]5 e: l2 c#include "Texture.h"5 e$ g) g( |& y6 M
#include &lt;windows.h&gt;
" _' Z6 s7 |, J% o- P! z#include &lt;gl/gl.h&gt;
- g9 t" H- G9 O, B6 Y! P#include &lt;gl/glaux.h&gt;</P>
1 e; p8 g: a( p<>#pragma comment(lib,"glaux.lib")</P>
- H2 U+ \% I" S3 r$ m; |4 r<>Texture::Texture()
. u( Y. n5 l9 J7 t3 P" y{
- \1 H% T0 g1 \3 y m_Empty=true;  g6 H2 U9 m; T  C& I& i! z9 n
}</P>2 w6 D( M  O+ P! Q: h/ S$ x7 E
<>Texture::~Texture()# h! q3 f( _# f
{% ~4 m3 E5 Y& d  X0 z. Z
Clear();
/ n1 e% j7 g9 l6 m: n  P}</P>
; S+ l  A1 O" x<>void Texture:oadFile(char*fn)  _% m/ w  L. M# S
{
8 e& F8 e/ t& B7 [ AUX_RGBImageRec*image;
( x  R" K, n0 X; d( S6 C1 h image=NULL;</P>
0 ^% R% i" F- y" O9 n. N8 v& m<> image=auxDIBImageLoad(fn);</P>
2 @: S  d& U3 @3 d" c# k<> if(image!=NULL)
$ |8 [1 Q. f' [* r  C2 }: |5 k {
8 f! S! o: X% Q) y% A2 ]6 q  glGenTextures(1,&amp;m_Index);
* U; {6 |) p; C9 u. p  glBindTexture(GL_TEXTURE_2D,m_Index);
" D) _) l+ S/ b' |6 ^! g6 C  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
) ~0 s& ?$ p% n2 k- O   image-&gt;data);
: g6 v" h, I1 p5 j! b" k+ n  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);3 J. M4 X" B( j9 F; \& h
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>2 z3 n+ }/ L  Z- b7 L7 Z" y
<>  m_Width=image-&gt;sizeX;
3 u& n: w# D- Q/ b  m_Height=image-&gt;sizeY;</P>
. _5 |/ X+ r5 n& A4 |! z+ L0 U<>  if(image)
; \" |2 M2 G% P' Y3 I0 g' A  {
8 o$ A- u. B/ `/ k4 ~+ N   if(image-&gt;data)
) U/ s: h% }' P4 U6 M. w    free(image-&gt;data);</P>
; X( i7 t/ Z- Z<>   free(image);
. o# D+ U, J0 M1 j9 @5 A# h7 w3 N  }</P>
- H$ A7 }  P6 X4 u4 J1 p<>  m_Empty=false;
" M# F5 w9 g3 l) Z! X1 s }# d# ^: N' y' }+ z: x
}</P>6 w8 q% }% X7 g2 g
<>void Texture:raw(float x,float y)
' N% u$ P: m/ S3 J{
0 G+ c3 o  C7 Y7 b" W7 I7 T6 n0 N glEnable(GL_TEXTURE_2D);
: Z( N( O) x4 t    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
7 H) Q9 }1 ~+ e<>    glPushMatrix();
6 B# ^% g8 Q4 V  \# K7 y( Q: M9 w6 X    glTranslatef(x,y,0);* ?( \, O* J/ U
glBegin(GL_QUADS);
( h( D, D) {4 c$ n3 |, d        glTexCoord2f(0,1);glVertex2f(0     ,0);, x' w9 W# B  u
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);8 G6 O! [) e: T: t
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
! R/ p% [0 V2 X" D5 U+ {        glTexCoord2f(1,1);glVertex2f(m_Width,0);+ k! C2 l% R5 e8 f
    glEnd();# {) W: N* s; b( R( O# H0 L
glPopMatrix();5 p" Z$ J4 j" Y+ o1 F, W
    glDisable(GL_TEXTURE_2D);" d# k2 Y2 o# G; w
}</P>
0 Q; C% d$ T7 ^$ t' n7 N9 t<>void Texture::Clear()' z& u4 a7 A) S# N
{
  u6 S# d% a3 X( e: A1 f if(m_Empty)return;</P>
, C. x6 k2 p( U" q. U8 {3 C<>    glDeleteTextures(1,&amp;m_Index);</P>) [# n1 w- J" Z) i: ]6 N8 D
<> m_Empty=true;
" |- T6 J: G( X4 G% Q}3 H& f% n) K# k% d# g, i$ F: J' D

% f: n1 I! F1 e/ y1 a: g! G: K5 `, s) x, A/ K+ ?$ c
; `( l& @; N9 D$ K
使用也很简单..直接Texture t;</P>
8 }' u9 Z- L1 W* f2 z3 ^<>t.LoadFile(FileName);</P>% ?( B6 Y: y. [7 |8 F
<>然后在Draw里,t.draw(x,y);</P>, Q+ K, P- s7 ^2 @0 d( N
<>就可以了.
4 K' u0 _( V% l$ R! {5 A+ O6 h! ]& y6 I* J; P3 K% \% z
以下是效果图:</P>

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

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

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

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-4-20 17:20 , Processed in 0.455217 second(s), 62 queries .

回顶部