QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
6 j" ^& a. t7 Q# S* h, o2 ]: a3 n9 V看代码吧!</P>
; Y* T+ n2 w5 Q, C<>//头文件/ h( y* `1 r' y7 I
#ifndef TEXTURE_H
6 ~& d: {/ F" o6 ]5 w#define TEXTURE_H</P>  ?: c% K7 T  ^) r( E. t" r5 e; S
<>class Texture! h* O- Y8 n5 f  A) d4 m: c
{; H6 w4 e) l6 C' R) u
private:
0 L! {+ p& Z, G( {+ J+ u. O unsigned int    m_Index;
6 e/ f' s, R% z& H bool   m_Empty;
" C* }, S  H! n) ]% [, h; e float   m_Width;
9 v$ }, T2 @  H" M9 ]! } float   m_Height;
6 T# v2 R: V( P) tpublic:; ]- u& V. p2 C+ e
Texture();, e' S$ y" r/ o: D
~Texture();</P>5 H- K: l6 w3 b5 O
<> void Clear();; n+ |8 O7 [2 f' b* B
void LoadFile(char*fn);- {( j$ F" X; ^; v  c
void Draw(float x,float y);
: R7 y! _. K% n: I};</P>" }9 D* h& p6 i. y: H' p' _
<>#endif//TEXTURE_H
$ t) E% ]- x5 B! d0 F/ x* }# v4 _9 |/ R: L0 {/ w; @4 |$ p
" P, m( b( v8 r$ F6 F' D$ u

$ }) H9 X: j8 A0 y! Z: j//CPP文件
' n$ {- D% |& [+ ]' g#include "Texture.h"
# @. t* V8 c; g6 z- p1 Q#include &lt;windows.h&gt;
& C: s( o0 [7 O8 }#include &lt;gl/gl.h&gt;
& W; k0 a; J1 R' X#include &lt;gl/glaux.h&gt;</P>
0 }3 t8 I( Q9 Q! G/ Q5 e<>#pragma comment(lib,"glaux.lib")</P>0 d- u6 M. w! ^9 n7 }: {: Y
<>Texture::Texture()& f# ]" O# `) ?
{
4 `. D. H! K: j! W' s0 |& ^2 _ m_Empty=true;" k% k1 [5 C3 ^( g1 M$ x
}</P>9 p0 c$ Z: J/ L
<>Texture::~Texture()- a8 F2 F% P6 }8 ]* [  o; ^8 d
{
9 {' Z8 N, g0 W9 ]! q0 f7 T0 H. B4 y Clear();1 u; e6 G, ~' H& ^0 R- G% ]
}</P>
- K( N% @/ B3 L! p% h# x  U- M<>void Texture:oadFile(char*fn)
( e. f! w6 C/ _6 y0 d+ Q{
, i: P5 j: ]4 u, e, l AUX_RGBImageRec*image;
4 _4 \: X5 D2 R) o' ]9 x& B image=NULL;</P>
+ m2 b3 F6 g1 u# c& U. i+ S<> image=auxDIBImageLoad(fn);</P>) {: x% b* w/ O1 z
<> if(image!=NULL)( `2 K) a5 y7 N! g9 G6 l
{
! ~9 E3 V- W, t  X! j  glGenTextures(1,&amp;m_Index);
6 l; _) v: N* K" `  glBindTexture(GL_TEXTURE_2D,m_Index);% \( @/ J9 n1 D/ ?  k0 i
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
! O+ G  c- T8 A' M- M/ @   image-&gt;data);
$ D2 t" X& v# i0 ]8 |/ |0 S  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
% y. v% Z5 B+ W  s5 j& m  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>7 U) Z' z$ D. n) `" W; s) O
<>  m_Width=image-&gt;sizeX;
% S8 A  A, f& i- H" B) b; h0 E. `/ J  m_Height=image-&gt;sizeY;</P>
2 y1 Y- e+ _) Q0 I<>  if(image)
7 v1 R) M3 s( B6 P$ `  {* t5 m2 ~1 t$ s1 h
   if(image-&gt;data)* J. C; ]4 H/ W( X9 a/ d  C
    free(image-&gt;data);</P>% k# Y  c7 I5 J% Q' l# _. G
<>   free(image);. L  @# Q1 p4 C
  }</P>
6 y/ [2 t/ [: {- r* @# X8 n7 ^+ o<>  m_Empty=false;: o. T0 w; X; F. ]
}
' C" I- O/ H- q9 k6 s. v}</P>- W( F8 `- [9 V: r
<>void Texture:raw(float x,float y)7 e0 I0 H2 W' R1 b9 C
{
$ i- b) c/ H3 t2 }1 a5 m6 W2 ? glEnable(GL_TEXTURE_2D);9 f6 }' q4 W( ^0 g
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>/ I6 z- R& \+ b6 ]
<>    glPushMatrix();
1 `6 H2 `1 c- q+ l0 Z( Y: s; a    glTranslatef(x,y,0);
! R8 k  Q1 }5 y& K* |) r5 ^* \ glBegin(GL_QUADS);
& x0 ~: v8 \6 `: x) t. @5 r        glTexCoord2f(0,1);glVertex2f(0     ,0);
' k6 V, x' `7 g8 e" _/ o        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);+ K+ ]+ {% T; I% L7 B5 g* e
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
2 r& g) H1 X7 k' L+ I* r4 r  X/ L% r        glTexCoord2f(1,1);glVertex2f(m_Width,0);. B, ]$ F0 H- a2 N- |9 b5 T' I
    glEnd();$ x7 {" d" J2 ^
glPopMatrix();' s; X1 N9 R& l, f( v& c& A
    glDisable(GL_TEXTURE_2D);
. y$ O- b* P" a* m/ z! `}</P>' g8 F/ k2 W# B2 z
<>void Texture::Clear()
/ Z+ S9 w! M9 y  l4 Z{
; i; O! r" u$ ]+ i4 D9 a; w) o- k if(m_Empty)return;</P>8 y7 X7 f4 @* V7 j$ \$ Q
<>    glDeleteTextures(1,&amp;m_Index);</P>
; P7 _, `3 b/ ?) A, ^- u9 `! _<> m_Empty=true;
6 D0 N3 K  Z( d6 r}6 l- F+ `0 F( l" f+ N
& n9 n: ^1 @3 p) @8 `9 d

8 Z. S2 \0 K" n1 G6 _# \' b& C9 Z4 G# ?2 u4 I2 E
使用也很简单..直接Texture t;</P>; v9 Z+ A( ^$ v, b
<>t.LoadFile(FileName);</P>5 \* e( i* {( o" E0 y" `: B3 r: \
<>然后在Draw里,t.draw(x,y);</P>
2 i2 x9 {7 \. U& G<>就可以了.+ C8 r. T8 Q0 w; |7 B& d  l
" A' U0 Q- J+ o/ c+ _) ^
以下是效果图:</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-27 14:52 , Processed in 1.377255 second(s), 62 queries .

回顶部