QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
+ w& ?% E! P  m$ ]* \看代码吧!</P># `) @  J9 I3 L7 @
<>//头文件
& d1 m) r3 q1 o8 k4 J#ifndef TEXTURE_H* C/ w  ^1 M! f, L, ?6 H
#define TEXTURE_H</P>
" ~: N7 _5 @7 v* m- M/ o# z% P9 Z<>class Texture2 s6 T8 W5 v* x# f4 V, X
{
* e6 |* P4 J: G7 k! x# O  Uprivate:: w8 O- w" b( A: z2 W
unsigned int    m_Index;
/ B- d0 ?* t$ P0 o4 @ bool   m_Empty;
) l' I! t, Q/ i; `0 Q float   m_Width;$ J8 t: ]' n% U! W7 z6 U1 j
float   m_Height;. u' x% Z& p6 |& f* z
public:
5 f% p0 G* O; R Texture();
5 F3 I7 T2 Z" w, X+ ? ~Texture();</P>7 R. C! |  u$ Q0 c& r: _
<> void Clear();2 E2 E! C7 e* B; ~
void LoadFile(char*fn);
  C% s7 E1 r3 I$ a3 A* N void Draw(float x,float y);( y. l) w6 Q/ x) T7 T) F
};</P>
0 J# G& m5 }/ }- a# Y$ Z9 U/ C: S<>#endif//TEXTURE_H
1 R# ], g9 I, V: z, _7 s% U* Z. R1 a& B' H9 i, @1 a+ D
5 I* g3 R; H% g7 f4 u- F( r" e

9 B5 L. T, C) R# j+ s. E//CPP文件! f* v" _' J( x0 K4 R1 V
#include "Texture.h"# A7 h8 ~' L7 N$ C9 M9 n" ?( t
#include &lt;windows.h&gt;
9 A5 P8 s  H9 _. j- [( I#include &lt;gl/gl.h&gt;
8 F% t' {7 [$ u" w* |8 b: Y  S#include &lt;gl/glaux.h&gt;</P>
' L; \9 H* D% u<>#pragma comment(lib,"glaux.lib")</P>
0 |, u( I2 K1 J. o, N' T% Z4 m' R<>Texture::Texture()
' h: U" j; j6 P, {  d9 B{3 T/ l) I3 ?+ b4 G( r
m_Empty=true;) ]; l, F) O% |0 q) X8 W
}</P>! o% c' b9 o' A; ]* D2 s9 |8 L
<>Texture::~Texture()
5 m( [( x4 q; r( `! q{2 T% c- E8 E' h$ G3 ]
Clear();
$ R& N/ l. G$ N7 B$ X1 @" Q}</P>
' F5 i2 |5 M6 t% P" Y<>void Texture:oadFile(char*fn)
% m. v! |; x3 D& z$ d% t2 j{. _8 |9 Q5 P( s
AUX_RGBImageRec*image;
9 F2 k. }( y5 c7 g& W! f image=NULL;</P>
3 [; o5 s" V! K. P, t3 s<> image=auxDIBImageLoad(fn);</P>' [) ?! q; g+ }2 k" G
<> if(image!=NULL)4 R' V% i9 e( w- [
{9 K6 q1 I% U. K$ o1 j' y
  glGenTextures(1,&amp;m_Index);
2 F) k9 J" p2 l' P" R, _3 b  glBindTexture(GL_TEXTURE_2D,m_Index);9 X/ F- r% ~- c  Y& J
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,% p) y% k% H. `' q2 r
   image-&gt;data);# l3 z, q8 U, ?( v. g
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
1 i; f& U) D; k. R! X. o. L  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>3 ^7 H1 y7 R2 k1 Q8 _
<>  m_Width=image-&gt;sizeX;
& {( U* m& e/ u( A  a8 t  m_Height=image-&gt;sizeY;</P>9 D3 f7 h8 a0 b* K1 A$ o( F" b$ z
<>  if(image)
6 e+ _! b1 d5 R  {: U1 ]: I. {% u1 ^% M* F
   if(image-&gt;data)' F! R4 l" P) n2 }- B  n7 m
    free(image-&gt;data);</P>: h  ?' x( V: T2 l- x- c+ t+ n/ y
<>   free(image);$ X% V2 I5 g# D
  }</P>
  t$ X8 c  }- ~) `9 b( Y7 K<>  m_Empty=false;1 \4 ?% p+ @" ]) C  n1 P
}9 Y: @0 `! }; @( c; ^( K' P1 _
}</P>
9 f+ @  B4 m  H# f; ]4 P9 n<>void Texture:raw(float x,float y)4 K$ A: ]4 R2 q1 {; r0 k
{, g; o: D5 u3 j; V1 u0 T
glEnable(GL_TEXTURE_2D);1 E. j5 _3 u- E5 `. |( m
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>8 N6 J8 E7 |8 ]6 J2 f
<>    glPushMatrix();3 Q) m" D% p' ?$ t- m
    glTranslatef(x,y,0);
# _% H% f# F& c+ X+ v  x" i/ w glBegin(GL_QUADS);
. V8 x; j  n/ `1 O        glTexCoord2f(0,1);glVertex2f(0     ,0);
& i" x, o8 V) _% n9 l2 v        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
3 V- I; F$ g3 ]0 `! o  V, F( }        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);2 p2 c: H7 U6 }6 T& P; ~, p
        glTexCoord2f(1,1);glVertex2f(m_Width,0);2 _# B5 I0 w0 l8 b( E
    glEnd();+ w+ @* e6 g) f' K4 b
glPopMatrix();
  {2 I% e  \& g: h7 j0 b9 \    glDisable(GL_TEXTURE_2D);
) n. n; \0 D2 l. R* s2 _0 z}</P>
+ V: ~* a5 ^& Y; a<>void Texture::Clear()* N2 G+ ~0 h' N
{
1 l8 t5 A- S# f, |) R* F( z2 } if(m_Empty)return;</P>
) Q1 P; u2 u" _* k) p<>    glDeleteTextures(1,&amp;m_Index);</P>
" u% M; m/ j! f0 K# }9 S<> m_Empty=true;
  s* w, @0 d3 e: T7 x" u}1 w, F+ S6 B7 u  \0 [' b3 r. w
) f" `; Y. h$ Y8 J+ {; x9 M
" {: A7 `2 d! |* v
7 W+ N5 X; j9 j8 R& e
使用也很简单..直接Texture t;</P>
5 q3 r4 U" ?7 U" C: [<>t.LoadFile(FileName);</P>
- P  R/ C4 ~- z' ^* ?7 T( S( u- B, l<>然后在Draw里,t.draw(x,y);</P>
; ^; Y$ Q7 _/ c0 `- N. _+ S0 }6 K<>就可以了.* x# T3 s! m2 n& Q

  l. s- u" t/ ^; s以下是效果图:</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-22 06:08 , Processed in 0.419578 second(s), 61 queries .

回顶部