QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
+ D6 K6 p3 E1 y$ F! S看代码吧!</P>  i' a6 d: s' E! D, M6 @& u1 w8 ~8 g: Z
<>//头文件! [# a# J; b) T0 |
#ifndef TEXTURE_H
; K& ], k5 q4 x! N2 l9 X' h" I" q#define TEXTURE_H</P>- h; K( o+ _( _! B7 b! J; i
<>class Texture, V$ Z+ r3 e/ w+ t7 Y0 w+ ?, ?
{/ b4 t+ U. c! x
private:! _( `9 I# I# x, v: e* W+ P
unsigned int    m_Index;
% S0 u+ F4 j! U& k1 A" y3 x bool   m_Empty;  E2 i8 p" F9 f* A1 p3 b, A
float   m_Width;% [' j. E5 d3 [( `6 d. Z3 E8 t
float   m_Height;
( L) J( Y" S! Q7 i# x) kpublic:
( L% E8 B+ M) O% O: ^0 ^; A9 X: i Texture();
' E$ E4 E& i0 p2 I ~Texture();</P>
1 g2 L) Z1 w/ v# b( v0 s8 H<> void Clear();2 `* P* A3 B  c6 [" `
void LoadFile(char*fn);8 g' t( e2 W1 ]) h! f$ m
void Draw(float x,float y);
$ A# a9 I& t  M};</P>
$ h" {( c' k% a3 \; Y<>#endif//TEXTURE_H
4 O$ _- m7 n3 K! R# W  T% A# @* T+ J4 I# S6 d/ G1 b, o% H

1 I% |6 K% p, o  `) Q3 u
( J% d$ M6 N( ~0 o) @, M8 x//CPP文件
9 w# g4 w  Y( Q, s#include "Texture.h"- t+ E2 N  _6 p& q2 |  }3 `
#include &lt;windows.h&gt;# r: I+ n1 K  e3 S
#include &lt;gl/gl.h&gt;; y1 ?" ~# G$ \  _* i
#include &lt;gl/glaux.h&gt;</P>! O% S7 c2 b, j# h) m
<>#pragma comment(lib,"glaux.lib")</P>6 E' s8 u% }- l# Z9 a' k! ^9 p* P
<>Texture::Texture()
* c% r: n# I8 i9 p{
; D, Z1 D0 ?) F6 b/ D0 B) r m_Empty=true;
" m  }5 V' y5 q0 v% n- ?}</P>$ \# Z$ O( m3 p. _
<>Texture::~Texture()+ Y( c: M$ g5 z' ~
{
# ^) P9 Y2 b2 o9 N( p6 F6 D: g, K/ p Clear();
6 ?$ S; L. L+ S& p1 l}</P>8 U. {8 T4 K% T5 v- d3 n0 m+ ]
<>void Texture:oadFile(char*fn)/ r% R$ O; C5 R, B  X  h4 l
{
% g! m% M+ e: }6 D) W0 f AUX_RGBImageRec*image;9 f8 Q6 S- h1 }5 z! G5 p
image=NULL;</P>
9 s1 s* ~) ?6 Z1 Z1 Z$ q+ ^<> image=auxDIBImageLoad(fn);</P>
- I6 K3 ?  \. N1 N, O* V8 r4 F<> if(image!=NULL): G# C0 ?! ^1 }6 I! _
{
! u7 U+ h$ ^. k5 q* m  O  glGenTextures(1,&amp;m_Index);
: B( V: I" }/ F7 f; B+ F  glBindTexture(GL_TEXTURE_2D,m_Index);
& y) t/ s, F1 L* V  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,2 g( ~6 B9 p2 Y: c9 g* M& A
   image-&gt;data);
/ l5 u, m* I( a5 r1 Z  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);# r# X3 f* ^6 s5 S
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P># Y( S- R. ?  W* d0 W$ {
<>  m_Width=image-&gt;sizeX;
1 D5 ^0 p6 Q! p  m_Height=image-&gt;sizeY;</P>
* \8 C: u7 i7 ?4 V0 |( c7 e- ]3 V<>  if(image)
" ^4 U9 G* [" l! F  {
4 {/ `/ b2 B; \$ M   if(image-&gt;data)
$ Q, m% C5 F. e  V3 R    free(image-&gt;data);</P>+ k1 R; x6 D4 t1 r0 }
<>   free(image);
$ K0 d" Q7 ?. p& g4 h- V  }</P>
* b# b7 _0 B) i<>  m_Empty=false;) ]" ]! W+ T: W% O
}8 ^, ?! k) e- {9 O9 Z) b6 b  T
}</P>8 V; E& Q  z( t$ K1 V
<>void Texture:raw(float x,float y)
7 [( t0 ~- a. P# {2 B, L! {{+ r& u4 _- U# G" f
glEnable(GL_TEXTURE_2D);5 p( X% S' P( H: D- Y
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
3 }$ p: ^" f# x- c+ X% M% f<>    glPushMatrix();2 i$ o: o" q+ Q+ G  ]. `
    glTranslatef(x,y,0);
6 l/ H' \" @# h* x glBegin(GL_QUADS);3 p0 J: M: O; Q* `
        glTexCoord2f(0,1);glVertex2f(0     ,0);
1 \* k: N5 ^7 l7 g! d- q& @4 i        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
5 m8 s& x4 K8 l0 r* |2 M& Q        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);/ ~2 J7 r  t5 x  g. J4 r# m3 {
        glTexCoord2f(1,1);glVertex2f(m_Width,0);
' V3 J. d5 O3 }1 a: y8 H    glEnd();" i0 V% \: F* S2 q
glPopMatrix();
# {9 r' B- V9 P" G4 T    glDisable(GL_TEXTURE_2D);
$ I' N; |$ h/ `1 r. ?6 Y}</P>
( J" H" Z; M+ [, u8 V<>void Texture::Clear()
- E7 C8 Z3 h- i{0 y5 z5 ~, A: m( @" y
if(m_Empty)return;</P>& \8 p: r! E; Y; I9 |& W  m
<>    glDeleteTextures(1,&amp;m_Index);</P>0 k& J) w  x0 H8 M; M9 M. L
<> m_Empty=true;- y0 Y3 ^* Q# s
}) c6 G6 V6 F2 h, @7 B; i; @* f( z

3 Y: V+ J4 F. o( r7 Q
5 r% [2 A$ o7 q7 O
; C0 r% s9 x: ?, T3 h使用也很简单..直接Texture t;</P>5 G2 S' R6 w1 S0 K/ g- D4 ^
<>t.LoadFile(FileName);</P>5 j& w$ R1 p" v$ W1 h+ D8 `5 k: H, \7 z
<>然后在Draw里,t.draw(x,y);</P>
! B: J. D5 X  A6 `( \' Y! ]<>就可以了.
4 J' K4 _! k$ E. I7 K) a1 S' x( h7 v2 s* l& D
以下是效果图:</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 11:50 , Processed in 0.339618 second(s), 61 queries .

回顶部