QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
0 j# d( k4 H, s' U看代码吧!</P>
* ~0 F" U0 ^2 B" H  ]' ?7 S) [  }" K<>//头文件
4 p) ?, `0 }8 y' P0 h#ifndef TEXTURE_H
1 b, F" ^, V2 ]; g#define TEXTURE_H</P>- \$ `$ V4 ?- J0 q
<>class Texture
! `" t# ?- E# L* s{. p/ D: N# _- p" z2 O$ e
private:0 [% z% S6 E- [7 x3 }
unsigned int    m_Index;0 \/ Y( l0 ]3 R$ }  R% R9 k
bool   m_Empty;* b0 w) }5 w' v# X- e+ U
float   m_Width;/ t, _* U  k8 b% _% G/ Z6 b5 I
float   m_Height;
5 P2 k$ c% @  @% ^, y  l0 A6 gpublic:
1 i& D/ Y: I/ }1 C1 A Texture();( H: w' p' Q) i* Y! a8 f
~Texture();</P>
) Y! ]2 o3 I- F3 F$ u<> void Clear();
) C6 C8 C" X$ [7 w$ l void LoadFile(char*fn);
8 \4 Z0 \: {" a, N void Draw(float x,float y);
& U& P- g% Q( g};</P>4 J7 Q/ Z; D$ y* j* G
<>#endif//TEXTURE_H
! v/ n0 O  [1 a3 Q
) T) ?( Q9 l$ ]' R; G. W# p0 F9 y
2 `" N+ ~, K$ I: r
5 g5 v, T* E. O" ^' D: r//CPP文件
- g8 p/ ~  s! v8 ~#include "Texture.h"0 y( V5 W7 z/ ]3 [, q* \) q
#include &lt;windows.h&gt;
5 B, M6 k. l& }1 G$ s3 f; S#include &lt;gl/gl.h&gt;) L' U3 w6 u# k1 @
#include &lt;gl/glaux.h&gt;</P>
" H& m) w. \' O8 _<>#pragma comment(lib,"glaux.lib")</P>) ~8 g: x2 e" {& l3 j0 J
<>Texture::Texture()' J4 X8 {' O; o8 ~
{8 u1 g" l3 N( x
m_Empty=true;& H5 \5 G, L$ t9 g! r: @
}</P>6 o: Z2 I: B: a) ?' R3 b# i  E
<>Texture::~Texture()
& m5 G3 Q2 p4 V( Z7 [! u0 `7 b5 f{
- N3 w, l; b, {5 `* s Clear();; [' c4 J7 s, |. K5 E* \. V
}</P>
! Y7 O# C9 Z0 g<>void Texture:oadFile(char*fn)
9 H8 a8 U0 M2 q5 \. \3 U{: S: f6 p$ {0 a. U0 L5 p) w9 p
AUX_RGBImageRec*image;( b; Z" s1 }( ^5 s
image=NULL;</P>: R' Z  @/ ^9 b9 ]& v6 s
<> image=auxDIBImageLoad(fn);</P>
! p! M- ?; `* q<> if(image!=NULL)8 i' _8 b6 ^9 P% ], G
{
) T6 q& Y3 {$ K6 a( f  glGenTextures(1,&amp;m_Index);' s: F; P2 u* s* U. }2 c; p4 ?
  glBindTexture(GL_TEXTURE_2D,m_Index);! X2 |$ [# e, L& g
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,& w3 D4 C- J8 T3 L
   image-&gt;data);8 e/ D% V; q5 n3 e
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
. A# x, ]5 r: @7 X. g; g  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
' n% n; M( m6 e1 R<>  m_Width=image-&gt;sizeX;; f: l& o4 ^* ^) `
  m_Height=image-&gt;sizeY;</P>- z) \- F% V+ b) m9 v5 A7 ?/ _
<>  if(image)
& v% Y1 l0 O6 @6 ^( @( [/ ~" R" s& c  {
5 R4 o8 w  p5 ?8 m5 x) l   if(image-&gt;data)
( Q! `1 J+ v- Q4 C( i5 g    free(image-&gt;data);</P>
" h* d. K+ z+ I2 f1 K: z5 i  C<>   free(image);
7 j% c; i2 b2 E" B- x9 \: W  }</P>
$ ~3 U" z$ i1 \& n  q0 F) M! s6 [<>  m_Empty=false;
! c' z7 ^2 G% R9 h7 K3 ?  Z }6 {$ L1 g( t# B, t) w* v
}</P>4 R% x/ ~& e: L
<>void Texture:raw(float x,float y)/ o! a( T3 T2 n& W7 u' H  n
{- s: ~7 Z, @7 Q8 v# e, E+ v
glEnable(GL_TEXTURE_2D);
" e5 b$ v$ S: R( e7 n% O  O    glBindTexture(GL_TEXTURE_2D,m_Index);</P>: |5 e, v0 O  T* H  C' [6 m2 h
<>    glPushMatrix();
6 y( g+ K  s9 ]    glTranslatef(x,y,0);
$ v; ?  ]0 v" P6 E glBegin(GL_QUADS);
- L$ |, K( O5 y+ L+ ]* K        glTexCoord2f(0,1);glVertex2f(0     ,0);
+ V% V" ^! z5 y* ]- u        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);- X  i9 x9 i  _& ^4 p( W3 K% Y
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
" @$ c6 I" A% c3 b        glTexCoord2f(1,1);glVertex2f(m_Width,0);
/ r, F- h3 q. X/ R1 S    glEnd();; ]! W8 e  m" n6 r2 q/ X* W
glPopMatrix();  n0 E8 e8 M; M* r
    glDisable(GL_TEXTURE_2D);
, M+ j  H- S+ u1 A9 E}</P>
6 `- m" g# D/ ?/ X( v3 h<>void Texture::Clear()
8 x- s3 O8 P; m{( Z2 f( H& J6 ~, R4 G6 f
if(m_Empty)return;</P>% X# U5 C$ |) X: O" F
<>    glDeleteTextures(1,&amp;m_Index);</P>
* y, F6 \' e& d$ s% {<> m_Empty=true;
7 c2 E  T. k7 [3 {}
: x/ J3 b; _6 T. h; V+ n; x8 k
; |% |+ {, |6 |
; [$ g6 r  o' s% [5 s! a' B& o
3 ^8 ]/ f, F0 ?4 A7 e$ b; ^使用也很简单..直接Texture t;</P>/ R" b" B8 P0 t
<>t.LoadFile(FileName);</P>
4 D5 @6 x, o) g4 J; O# _<>然后在Draw里,t.draw(x,y);</P>
- Z; ]! a$ g1 u9 Y<>就可以了.
. }* S3 ~9 z( m6 t9 X" a' ?" R' s) ?0 P( {
以下是效果图:</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 06:23 , Processed in 0.310766 second(s), 61 queries .

回顶部