QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.: w' d5 \. |6 A4 M
看代码吧!</P>) {5 l9 g8 t1 J7 `0 ?1 o
<>//头文件
6 `" q1 h' c% F) Q! l#ifndef TEXTURE_H
  F; |) J: D/ R& R& y1 Y#define TEXTURE_H</P>
: u8 p+ x) l) X2 f# N<>class Texture$ }6 o4 b7 Q- `" W% C* R
{. A3 W' P4 }: k1 x! N9 u; v% C
private:
( Y4 d" x0 Q6 |9 `9 D unsigned int    m_Index;
$ k0 u2 o! `4 ]1 [0 y( y bool   m_Empty;
* n" U+ ]! L2 G# U4 z/ C3 M" ` float   m_Width;7 U: M# l; C6 v! @- o  H# ~
float   m_Height;
9 w* r" E1 m1 z; Fpublic:7 p5 z' Z8 ^9 E3 K; C& n
Texture();" T6 n5 j% i1 t8 Y
~Texture();</P>6 d4 \3 ?* u1 h& J
<> void Clear();
' v1 N# o& I3 o: V) V, s2 |. Y void LoadFile(char*fn);- x2 B6 Y8 x8 |$ D8 O/ D, G9 l3 B- t% Z( P
void Draw(float x,float y);, V& I  @$ y% J6 f) A/ P
};</P>
, M- G8 }6 u( e* E  _1 {: E( O. H<>#endif//TEXTURE_H
4 v' J/ |: N9 T+ L2 i6 R4 _) B* x5 q/ h
, q7 ~5 U" Y* O  c) w
9 X2 \+ P  a/ |3 N+ s% m7 M
//CPP文件
1 F: [7 g2 \" w0 p2 r% e8 I) {$ I#include "Texture.h"
# @% q3 @) z& [* c4 t, g3 p( s) Q: \#include &lt;windows.h&gt;* B4 {+ @# T; u. s4 k) Q/ s% B6 c
#include &lt;gl/gl.h&gt;0 Y' o: e/ `- ]5 P. e% v* }; h
#include &lt;gl/glaux.h&gt;</P>9 P* |# w9 G7 w# R) |1 U  Z+ _. Z
<>#pragma comment(lib,"glaux.lib")</P>* F: ]% d0 X  G* @
<>Texture::Texture()$ e  G6 {/ z( |* c! i+ B, w' V
{
# s2 u, X, w" X# }! |/ r- J m_Empty=true;
& ~5 H, d# J: [( _7 Y" V}</P>
$ ?% C0 X9 x$ U+ l- ^8 u" z+ Z<>Texture::~Texture()
( Q# w# e# o& F4 M/ y8 x9 W$ h3 t1 Z{
6 r  v1 }: Z; @1 [- i5 i Clear();  B! _8 I5 a5 b; U9 b/ J. A
}</P>
7 U, M% X; U# Q7 ?3 K<>void Texture:oadFile(char*fn)
, p% n$ a! S4 G{; h% F' W! E( E2 W
AUX_RGBImageRec*image;& D2 ^2 ?! l6 c' Q1 `
image=NULL;</P>3 w6 P$ {' z9 V; z! k/ q5 |
<> image=auxDIBImageLoad(fn);</P>
, J/ N7 E0 z1 X- x2 d: q<> if(image!=NULL)7 d* l( E2 b2 |1 S  a
{
7 x4 a" R" ]6 u  glGenTextures(1,&amp;m_Index);
5 ?2 \7 t1 a1 i& X, {  glBindTexture(GL_TEXTURE_2D,m_Index);
8 R2 ~5 V8 j: a( l- Z1 O- t7 [  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,4 B0 A7 G, p) `! O- A/ R8 |
   image-&gt;data);
# M4 j( \( j  Y$ h- i( V3 n" e  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
! p" V- m8 J: k; J  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>7 w" Q& _! @* }7 W  s
<>  m_Width=image-&gt;sizeX;& \" J* l& C- Z$ t. k+ K4 c
  m_Height=image-&gt;sizeY;</P>
# P3 |, q9 f9 Y" M; Y<>  if(image)( m7 w2 P$ R$ |- w% r
  {: M* P) }) x/ W$ Y( V/ ~8 T
   if(image-&gt;data): h; B! N4 [# L6 R& G  d1 ]
    free(image-&gt;data);</P>
8 }; l& |! ?# L4 [" f<>   free(image);
- M6 G; a+ E5 I- O  }</P>
- Q; i. W; \, I0 d<>  m_Empty=false;
& ]8 U1 y) T8 i4 Y8 q }' Z9 o" A) s' k& c' c
}</P>
$ z2 r* O- `$ v- E/ c+ H<>void Texture:raw(float x,float y). O- l1 n$ `( G7 T) N
{) m6 L; i2 N; @# m; C5 @
glEnable(GL_TEXTURE_2D);7 I( J8 W5 Y+ i+ ^5 \: ~' ~
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
" u5 A( x1 x: E<>    glPushMatrix();/ O  f3 z) w3 R+ |& Y, U* G. ?
    glTranslatef(x,y,0);; x/ l# g( V+ B# M6 R. A" H
glBegin(GL_QUADS);
7 m  R3 a8 V9 Y6 O3 Z        glTexCoord2f(0,1);glVertex2f(0     ,0);# e+ o  Z- R( G% D8 }/ ?5 r7 d& [+ a
        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);1 q- W0 s1 f5 D8 }8 ]2 K
        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);+ D1 V1 r( B8 s& _; {% n) n3 m
        glTexCoord2f(1,1);glVertex2f(m_Width,0);0 E" O2 l. M6 T) H0 T
    glEnd();' D1 d3 D. `4 G5 G( e3 n" z5 t
glPopMatrix();
+ V6 J' c( A# R* [    glDisable(GL_TEXTURE_2D);
1 ^9 m- T2 e. C7 \4 q. S; I}</P>) R  t: }% N; Q& b3 @. b* W
<>void Texture::Clear()
6 M, r' h8 b7 L{
8 Q/ W" M: `! u0 D if(m_Empty)return;</P>7 Y- ~9 d- j5 m; k  C
<>    glDeleteTextures(1,&amp;m_Index);</P>
% ^' u5 h$ V, z  D: w  C5 U<> m_Empty=true;
7 J1 l# ~( k( Z5 T9 w6 g}
: Z8 b4 ]9 j6 E5 a  o
2 F, d' V8 H& N
- K5 [3 `2 Z% Q5 R. k- m$ A# a& d1 B6 E! h$ |* M
使用也很简单..直接Texture t;</P>
; M5 n; ~8 i- ^# p) E<>t.LoadFile(FileName);</P>$ g- ~. T3 @) o
<>然后在Draw里,t.draw(x,y);</P>7 z6 D& \8 s3 S* j
<>就可以了.
+ q* D8 r6 P! R( K/ j1 `! e# d5 V7 Z- e" m' p
以下是效果图:</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-28 23:22 , Processed in 1.863036 second(s), 60 queries .

回顶部