QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
5 j* ~; }( t5 ^. S$ a3 A" ^- s看代码吧!</P>  g) P" k/ k6 G) G
<>//头文件
; ^! F% M4 {9 O) _7 p#ifndef TEXTURE_H; Q! _' V2 F3 O1 i
#define TEXTURE_H</P>
8 T4 {; [6 H% W. H& ]5 g" d<>class Texture8 G6 _8 c0 z. Z5 w* _6 W/ F7 H5 B
{
: D( f. k% h  ^5 ^" H- y/ e" J! hprivate:4 S/ K% m1 [4 E; X2 x' V
unsigned int    m_Index;
4 D7 X9 S  ^7 b" U bool   m_Empty;
% T+ B* K* X7 `, z9 C7 s/ p float   m_Width;  F# D9 I& N6 T! V& ]2 Y
float   m_Height;
, ?1 L$ u8 Q" p8 k# ypublic:
6 W+ a4 a) Z; G( M  Y/ u2 P" p Texture();" t0 ^  E/ p/ z
~Texture();</P>
8 e- g3 j$ H9 N# Q# ]: J+ E<> void Clear();
- P* q1 g# o7 U$ z( p# r8 h( i" \ void LoadFile(char*fn);
' v; U8 \* y1 {" z, [+ ~, ~ void Draw(float x,float y);3 {! r' \+ Q6 S. G2 B4 ?
};</P>* w. k5 {: W! I' s) x5 x
<>#endif//TEXTURE_H' `# z: |1 c3 k" \+ k5 C# F% g

. g1 h4 ^5 |( ^; m2 w
; p! p$ K9 Y! d8 e& ~& l) H2 |( E
: R( A9 F5 A% ]  A- _//CPP文件
) Y4 L5 I- d9 N- `5 J#include "Texture.h"
, G2 E) h6 B* k5 j/ H; A! S, d#include &lt;windows.h&gt;$ m+ J* R4 R0 _# d
#include &lt;gl/gl.h&gt;9 l+ s9 A* N# w3 d9 K$ I. h
#include &lt;gl/glaux.h&gt;</P>  w5 B" z% M" S! g* Z
<>#pragma comment(lib,"glaux.lib")</P>
& d4 E% g, l6 I" E<>Texture::Texture()
  f0 \8 x7 w" m2 b{
8 c2 s6 D  s$ U4 `& l m_Empty=true;
$ B, z0 ^' {7 i9 N9 q+ k$ b}</P>
9 y6 B8 b. o6 e# |% R# z( Q' ~<>Texture::~Texture(), H- G( F3 S& K
{5 T3 M+ f4 x- g0 H4 C/ d2 ^& X
Clear();
; M4 t- S) l8 D4 p# j3 h6 d" Q}</P>
3 r1 V5 ?7 J9 |% t" U<>void Texture:oadFile(char*fn)0 q. I- |6 J3 t9 Y+ @, D
{2 j/ y  d8 N% t/ i* I
AUX_RGBImageRec*image;
% i0 }  C0 U% d& ? image=NULL;</P>' ^/ I: w  x/ ?% C# F
<> image=auxDIBImageLoad(fn);</P>
& D# ]4 `! B# c. k<> if(image!=NULL)
# r% A. E) K6 t) W$ x {
8 g7 |2 r; t3 Q* Y* ^- z+ F( M  glGenTextures(1,&amp;m_Index);- y; Y! v9 I6 K6 D6 {$ D# M
  glBindTexture(GL_TEXTURE_2D,m_Index);. r' A- W5 }9 f9 K1 m1 l+ J) e
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
- @! o& @; B% Q+ Z   image-&gt;data);
2 L# G, s. }; I/ |! K  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
6 h0 T3 p# W2 {! p  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>& E/ E* {8 `" K% E* L+ _
<>  m_Width=image-&gt;sizeX;/ M% \6 }& F( G2 c9 k& r
  m_Height=image-&gt;sizeY;</P>
0 y+ g, Y7 |/ |* l<>  if(image)
8 h, m) C4 U  T8 a% d9 A: e# `  {4 h9 f0 x* l$ [8 D+ Z8 s; X
   if(image-&gt;data)' z; o2 W5 {9 i; \
    free(image-&gt;data);</P>
7 h+ ?5 k' E7 g8 `  y<>   free(image);4 K  Z6 H6 d+ p
  }</P>0 i% A2 Y$ n- r- i0 {4 ^
<>  m_Empty=false;
) W/ l* U. @# I, y9 j0 g: m }
4 `7 j4 q2 O& Y# A+ @! H}</P>  ]( z* Y, i! S3 ?( ?& }2 G
<>void Texture:raw(float x,float y)
/ ^5 a. ?' j. b{/ V) H, W0 t. G3 K( T5 r
glEnable(GL_TEXTURE_2D);
" {1 ?8 _/ e- |; t/ \9 p    glBindTexture(GL_TEXTURE_2D,m_Index);</P>( l+ Y) Y& `- ~1 e
<>    glPushMatrix();1 s& \. |9 {* r1 b; A7 a$ W
    glTranslatef(x,y,0);
6 g) }( H$ w! d7 {4 j1 Y9 f glBegin(GL_QUADS);
* G7 V% v1 o# l- T7 G: {+ V        glTexCoord2f(0,1);glVertex2f(0     ,0);" J0 ?6 Z, d& z  y
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
& a- \2 }3 `9 [4 I4 f2 s        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);. |" k6 C1 R! C( B+ M, e
        glTexCoord2f(1,1);glVertex2f(m_Width,0);" Z* l" x* @9 d( t
    glEnd();
' s; B- x  o! a- W9 W# d glPopMatrix();
" o/ i+ o1 I; Y7 v& ]! \    glDisable(GL_TEXTURE_2D);
  g, ~% T2 c' o' ?1 ?0 A* S}</P>! E/ h# F! C0 X
<>void Texture::Clear()
8 g' X2 P' H  W6 c* P8 ?{
! W# _2 k/ {4 h. f$ l if(m_Empty)return;</P>3 S0 }+ H% L! C# t: V" A. m
<>    glDeleteTextures(1,&amp;m_Index);</P>
! ^: S0 T* g3 c<> m_Empty=true;
6 u3 F) }; W  ]. G# l6 P4 O, a}3 {7 x4 q  T1 K% D" n! |% s

! C8 J1 J( ]4 ^0 P# z) d6 Q" y) }* ^" Q8 y% ~; @7 e* C3 s

/ s! R2 L. M* g( _" I4 H使用也很简单..直接Texture t;</P>
, M/ ^( B6 P% G" i* o1 v. k<>t.LoadFile(FileName);</P>
; u1 t+ k+ E3 ^! X: c' p7 `/ y<>然后在Draw里,t.draw(x,y);</P>6 k3 E! V8 g" r% @9 R
<>就可以了.
: l/ s1 v5 j2 J, B! ]7 n
' e) ?- y) k6 g以下是效果图:</P>

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

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

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

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-30 07:57 , Processed in 1.238461 second(s), 61 queries .

回顶部