QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.# `; v  i+ j+ @3 S5 t) R( d
看代码吧!</P>
; l7 k  V( R2 `  V9 E! ?<>//头文件/ R6 P# @5 s: Q1 @# \, }
#ifndef TEXTURE_H9 [  @# n% }- F" l( }9 f" C5 v$ ]
#define TEXTURE_H</P>/ C* I, V7 S3 p1 D9 R- U( G! W
<>class Texture' p! U- F8 W  O* A3 m
{: ?0 f: ~1 {1 I; J4 k
private:
7 V0 Z3 B3 d( L9 H unsigned int    m_Index;
" W( V$ @8 S2 ]0 j' p bool   m_Empty;: A# L6 c  ]: `9 l8 W
float   m_Width;0 q- q; N: S1 A7 o* {" `
float   m_Height;7 C7 A4 X7 }+ y: N1 [* t
public:
$ G$ z$ J  z, i  J Texture();
3 Y0 R2 A$ B/ ?- g; v! V6 b, Y ~Texture();</P>: R6 I- U+ a1 W5 h/ V/ [, M% k) g
<> void Clear();& K# z* |5 e- ?( K# _: y7 t4 B
void LoadFile(char*fn);; w# \1 D: J* W
void Draw(float x,float y);! {# V, m- N) ]' {- L
};</P>4 X/ |6 M$ F/ ]% j4 S
<>#endif//TEXTURE_H
4 e- V. K* R0 l: f7 H; l" e" D
7 U8 y7 e6 `( R0 x2 v& j$ J9 d, P  S4 n
: }' d0 |' [3 _" Y1 S- q
//CPP文件7 a% j6 ~& @# @( [9 h) o
#include "Texture.h"
9 }3 s% a% d$ c0 T7 C+ I- p' g#include &lt;windows.h&gt;  v" H" d& Y& z6 a+ T( H: N( D" o! j
#include &lt;gl/gl.h&gt;
* `; V( @! y" N# H& T. ]#include &lt;gl/glaux.h&gt;</P>% w& d3 B1 N0 f& A% _- E7 O1 z1 F
<>#pragma comment(lib,"glaux.lib")</P>
) G" K& K/ R# [: `<>Texture::Texture()/ L; c1 l& h! [# E& y+ t
{
+ R5 {( e& }! X m_Empty=true;6 E8 c4 z* u/ c) l
}</P>
( C/ R  i3 K! Q7 c: A( W9 u<>Texture::~Texture()
7 M; _+ I# {' ^{' C* T$ k4 u" B, d9 [* @1 n
Clear();/ P* {. p- d8 {4 Q5 G
}</P>
7 X7 v- x) h7 E2 }$ @) B6 `<>void Texture:oadFile(char*fn)6 P' r7 g# O, @' a3 O/ N  D" t) h
{
3 X/ u5 d# _1 O6 Z# Y) }. B AUX_RGBImageRec*image;
+ F. n. W$ B0 X, `* J' V( D9 @ image=NULL;</P>& }8 ?+ v  y0 G! Z4 V% {2 o) T
<> image=auxDIBImageLoad(fn);</P>
, ?5 q# F; F( M( @<> if(image!=NULL)1 O" z9 m1 c# b, H& s# m3 C; ]
{
8 D1 \/ d( D: ?' Z3 C  glGenTextures(1,&amp;m_Index);# \1 ^' O! y$ Z) t5 Y* J
  glBindTexture(GL_TEXTURE_2D,m_Index);
+ {, N$ c3 i, D9 |  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
3 K/ W% p5 k9 X  m  O+ g: c: Q) ^, @8 r   image-&gt;data);. r6 ?/ X$ j0 x9 g0 Q  R- o
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
4 _- O/ b3 c2 V  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
: Z7 T3 f: z+ A6 f<>  m_Width=image-&gt;sizeX;/ x% G4 J1 U5 V
  m_Height=image-&gt;sizeY;</P>
% C; ]- p9 w7 W" ?4 r; p<>  if(image)
# J  l: r( K: ]+ d) F: T. N  {6 I' w8 l! w# _) ~* X( L  G: u
   if(image-&gt;data)
, ?( P- N" _& q; I) s! p7 l0 h    free(image-&gt;data);</P>
9 f7 r; g' D# u2 ^$ e<>   free(image);3 y0 g3 V. p7 m9 t5 i
  }</P>) V+ @  y+ }4 B2 \0 j
<>  m_Empty=false;$ q. P* G6 N* V; i9 D$ @4 r
}3 x  y. O3 N! _$ X" i
}</P>) O1 e* D0 e  W7 w
<>void Texture:raw(float x,float y)! U9 D, q9 r8 l
{2 L: c: v* O) y- ?
glEnable(GL_TEXTURE_2D);
5 B4 d& ~9 H/ t# K# N$ r  J5 V    glBindTexture(GL_TEXTURE_2D,m_Index);</P>+ \2 c! ^8 k5 ?5 A
<>    glPushMatrix();
& Q/ a" C# ~0 c& {' d    glTranslatef(x,y,0);
0 W) W& a* V4 D# D glBegin(GL_QUADS);
6 |1 ~" F; n2 l2 x7 O4 [        glTexCoord2f(0,1);glVertex2f(0     ,0);9 m- f0 S# J4 ^! R' J
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);- O0 z) c' j7 m' ~4 e  n2 v
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);
+ R+ U5 `' J! J" i3 ^; a6 O9 |" ]        glTexCoord2f(1,1);glVertex2f(m_Width,0);
" G7 ?, p) B! b. M% l    glEnd();5 ~: Z" {( q/ N6 A9 z6 W  I! y7 o
glPopMatrix();
+ _+ @* o1 n# {6 C    glDisable(GL_TEXTURE_2D);
9 G3 X! f0 d0 J- q}</P>1 \$ v, {+ V  c. Q* d
<>void Texture::Clear()+ A9 C5 L, R6 F" U3 H* R2 h- p  o
{
- S3 v& V/ a- p7 z6 `; ~ if(m_Empty)return;</P>
7 x! D$ U) H+ e<>    glDeleteTextures(1,&amp;m_Index);</P>9 f" ]2 V( a. O) |( Q$ @
<> m_Empty=true;
/ u+ W0 E/ x0 s4 F, n% ~2 |}
: p( ]$ m9 T$ c7 s
' ^3 X) W% Y) _1 [4 c- D% O; P4 n+ K
4 D+ `7 v. Y3 y4 O3 B% R; ^! S
使用也很简单..直接Texture t;</P>
$ A" p/ N8 v% C9 X<>t.LoadFile(FileName);</P>
4 }! g& s# B0 H5 e/ l<>然后在Draw里,t.draw(x,y);</P>
" D! \; \, H! M) t<>就可以了.
2 I$ L0 ?) k4 t; f6 p: X; J
! g5 l/ `" K8 F7 [9 G9 T# g- H以下是效果图:</P>

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

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

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

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-6-11 08:43 , Processed in 0.367085 second(s), 61 queries .

回顶部