QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
7 H" k/ P; u2 P6 n9 z看代码吧!</P>7 z" b- }% a- t2 f- g9 T& m% T
<>//头文件
0 D' u0 n- }: E9 Z: N! u; `#ifndef TEXTURE_H
4 v# h" M4 ^: {#define TEXTURE_H</P>
6 }( l8 H3 F: i' Z<>class Texture
2 b! I6 b* e4 Y{
  e, E& ?5 V) d. lprivate:3 ~; ?" G4 p4 V& f( ?
unsigned int    m_Index;
5 }' k- d. j$ N$ ]: S& Y/ J. m bool   m_Empty;
6 d5 u# j1 V0 l float   m_Width;5 }, c! p6 q' l! \0 G7 w& p
float   m_Height;
9 c7 {8 x9 ?  u- \: v) hpublic:
$ Y4 v3 e% q! a! N$ S Texture();* Z, f  R- O& J+ u9 L* y% Q
~Texture();</P>. r  Z3 r* U6 j  r. G  h' m# `& [
<> void Clear();
. U" M* Q& }; d7 Q3 s: P" t void LoadFile(char*fn);' @  I: a0 p+ ~2 y, d" E+ a! y1 B
void Draw(float x,float y);( [& k# O0 C  t: {, v
};</P>& U4 p/ T) t6 R3 K9 f0 Q4 E) H" v. b
<>#endif//TEXTURE_H9 C. j  `2 b" r/ c

; ]9 Y% J& O+ f1 g' m) d: h8 H& Q( p+ L  r" m0 A8 P* o" Y; x0 c
7 @/ b2 K+ J/ s6 k& f
//CPP文件
' x- Q1 P7 K% ~( P8 p#include "Texture.h"
  |3 V! i9 {6 L% B- X#include &lt;windows.h&gt;
$ c& W6 I+ H- O/ k#include &lt;gl/gl.h&gt;( T* K) o, s5 {- H) H
#include &lt;gl/glaux.h&gt;</P>
0 y  w% d5 P, E* f6 [/ u3 p<>#pragma comment(lib,"glaux.lib")</P>
1 D) ^; m2 |* I<>Texture::Texture()
2 h1 Y6 r( i' E{
5 j' _0 Z  p' U2 F* f/ I* _3 K7 E m_Empty=true;
; D3 D* Z5 x5 ]: l}</P>
0 B5 k- x  U% e<>Texture::~Texture()$ l, [  u. a6 a$ ]/ `
{! [4 q; o' r/ E1 b8 b7 X! q8 N, W4 c
Clear();# N3 d+ A9 n7 s4 s' ~  s) V
}</P>, u) D) }- ^# ^% I( W
<>void Texture:oadFile(char*fn)
1 D# @5 ?# S: w! o$ H0 w{
; `' J: }0 }3 m, }- h AUX_RGBImageRec*image;
: E- L6 F: k8 Q' G. m( B, C, U6 k image=NULL;</P>% J- P6 {, t1 L( ~0 e* a
<> image=auxDIBImageLoad(fn);</P>
$ g4 t" W) G4 Y+ c, b1 K<> if(image!=NULL)* x6 D' n# l- _. Y
{
8 a" ?( X( l4 S( `3 N  glGenTextures(1,&amp;m_Index);) _# |2 K  N$ b8 p2 [' P0 w4 f1 S
  glBindTexture(GL_TEXTURE_2D,m_Index);
4 }1 x% x+ n) |+ S# a# {& F  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
& T1 k/ U3 I4 J   image-&gt;data);
$ n! K0 d! z3 `. }, X  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);) Q- Z3 d, A/ \% p/ R9 `+ M% n
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>0 L. s  J% [) `% u4 b+ |
<>  m_Width=image-&gt;sizeX;
" }- S0 f. u$ [- k( M; x4 L  m_Height=image-&gt;sizeY;</P>
; t& X3 U! B! S. \/ P/ J! k! X1 y) d<>  if(image)
7 D6 P; O6 T/ |  {
& P" R- N4 Z# T: z" C. Y! N   if(image-&gt;data)2 S: Q: Z( p6 ^7 ~0 N
    free(image-&gt;data);</P>
; e4 Q7 f' ]" h( u3 b$ U<>   free(image);
7 b1 ]& V0 P8 ]  T8 b5 \  }</P>
5 W- q7 r1 g: ?<>  m_Empty=false;
% ^0 g# F! R( {) c' e }$ Y" w# |9 [8 ]/ S
}</P>3 c3 S9 u8 \7 Z1 Q" E$ a
<>void Texture:raw(float x,float y)
" @* F9 l3 \0 g4 L2 ^3 H{
) J0 t2 S6 p! v5 d( h glEnable(GL_TEXTURE_2D);1 G+ L% O" V* M" R
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>8 I/ E- h( D3 l9 d; T
<>    glPushMatrix();
) n* R  I$ `6 Q% `4 Z6 `# f    glTranslatef(x,y,0);# R& z) @' w/ X0 R0 b. ?* B/ y3 R
glBegin(GL_QUADS);
& v; r) R2 E0 r2 L' Y$ r, S        glTexCoord2f(0,1);glVertex2f(0     ,0);& U. T8 F; h5 U' ?! W$ K  g1 s
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);) @) L; U% ^  {, e# b2 ^
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);- `: F4 n! D, y4 F" b! D# e
        glTexCoord2f(1,1);glVertex2f(m_Width,0);
& l7 ~. j, \: d    glEnd();7 Q1 ~0 r8 _8 D7 W0 s+ N
glPopMatrix();
1 T- C0 j% E1 S5 i) [9 r3 E2 W. `9 ?    glDisable(GL_TEXTURE_2D);
1 T# Z  H8 c+ W+ |) y}</P>
, ~3 h' n& I( F4 b" H3 ~6 N<>void Texture::Clear()) ^. I" V$ C, j! \  h
{! B* W5 L( i3 r$ \9 d
if(m_Empty)return;</P>
; ^4 J6 w4 y* u( p. t" W" y<>    glDeleteTextures(1,&amp;m_Index);</P>- h! y% w( h3 u6 _: o* q8 m
<> m_Empty=true;
9 t5 B, l9 `4 U2 R4 u# m0 n5 i}
% s" ^! H. j4 f( y; e3 p' e3 r9 i* z' f; [& O

: K' [# L* }0 c+ ^
) G3 `/ u7 l# H  Z! h使用也很简单..直接Texture t;</P>6 C: Z% q( l3 @3 n! ]- h! [
<>t.LoadFile(FileName);</P>
3 V0 l. [8 m6 p1 E4 B2 [; K" D<>然后在Draw里,t.draw(x,y);</P>/ D7 ^4 a5 L5 _
<>就可以了." v2 k' g2 G. {
& W; R2 I2 c# v0 d
以下是效果图:</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 09:56 , Processed in 0.504891 second(s), 61 queries .

回顶部