QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.
2 g  [. p0 z" M$ Y  c, g  V+ m0 T看代码吧!</P>, T/ e+ B  }! p+ s
<>//头文件# l# s$ {$ [8 Y5 O% V5 k9 ?* c
#ifndef TEXTURE_H
8 r! J+ m9 x5 x4 F0 O& T#define TEXTURE_H</P>. _: L, M$ z% t  x; j' r( E# W
<>class Texture" V4 e5 G8 d' F2 z% B9 q
{
* n+ h# u) |6 c: l5 Sprivate:
1 @2 {* v1 M3 ~0 ^( r9 G unsigned int    m_Index;
7 m7 l6 p/ d4 g. V5 l* ?" P. ` bool   m_Empty;
% d, F: y! [! p( e$ p8 ]' u float   m_Width;
; f3 J( Y  Y% J. S+ x9 T  I float   m_Height;
! X$ s9 k3 [& z! D) jpublic:
' |3 a3 D4 l6 B- H3 P* W# s Texture();
* k; s" Q7 R+ Y3 q ~Texture();</P>
7 a/ @$ t4 ]8 r9 G- h5 n4 L: A<> void Clear();
0 G  q. O) v, h$ A) v' L void LoadFile(char*fn);
: }/ z. p( }: g# ^3 @3 n# o  v& ~ void Draw(float x,float y);3 j/ @+ S5 y6 q( ^7 S0 k4 l; n! z
};</P>0 P& K$ }8 @/ o  e1 ?6 U6 q8 O
<>#endif//TEXTURE_H1 J6 f9 B9 a/ ^9 B: {
* F6 @7 ^1 ?! n3 |
1 |+ l! O* O5 w: P8 G( \4 b
: H9 I5 Z' I7 v5 E6 H/ O& w
//CPP文件- w# x: M( [- A- W6 N- @
#include "Texture.h"
# J* o! q) B8 n' {' D#include &lt;windows.h&gt;
8 f8 Q. f0 s' n#include &lt;gl/gl.h&gt;6 S9 y9 s0 v$ K0 r! p3 y" {
#include &lt;gl/glaux.h&gt;</P>
9 {2 _% l5 a' e% p9 \<>#pragma comment(lib,"glaux.lib")</P>
  e* f+ t( T1 N2 Q1 Y4 F<>Texture::Texture()
3 m) T# Y! K6 D  [2 @, U# l% y{
: n& |4 T; O% y2 @ m_Empty=true;8 y5 e5 [. j* _: I9 Z3 I
}</P>
' K) L$ d% g; U! S1 B+ @<>Texture::~Texture()
+ @/ y1 E  g" T: n' ?{' U  s! |! H+ I+ K5 G
Clear();
$ K2 {9 U- O- H  \}</P>+ n/ P) S9 J2 y' J" m
<>void Texture:oadFile(char*fn)
, i' b2 F4 z. M4 x{
; U4 y, \- Z9 @7 K& R! r* @' d AUX_RGBImageRec*image;
# p, K, {  l- p5 q) z/ X image=NULL;</P>
& [% ~  @+ a, z% ~<> image=auxDIBImageLoad(fn);</P>3 O( }6 s! ], P. `: i$ B
<> if(image!=NULL)+ D* U9 W/ k( }5 j* I$ A  K
{* X" c  @& W6 N
  glGenTextures(1,&amp;m_Index);5 M- ^) V$ ~' @/ T% l
  glBindTexture(GL_TEXTURE_2D,m_Index);- X9 J& Q) L1 r/ f% J
  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
, X  q& u4 M2 c/ o7 i2 J9 i5 C   image-&gt;data);! P' v8 L0 [/ f( U  ~' ?4 Z
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);/ P7 E4 Y: F+ N: M, Y3 Y
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
+ U+ i# U4 g3 ]" [- i+ E$ L<>  m_Width=image-&gt;sizeX;
4 D& P2 _5 N* K  m_Height=image-&gt;sizeY;</P>
: h) U; G# b& u8 n<>  if(image)6 X, V; m! E( K
  {
' J1 m* Y% c( K3 S2 Y+ k% H   if(image-&gt;data)( ?1 l1 J5 b' U- w6 F5 f
    free(image-&gt;data);</P>. ]4 E. p$ K+ X: Y
<>   free(image);
5 t0 b9 V( S' J9 d2 M  }</P>
7 D; E# y& x" F3 x# z0 ?2 Z<>  m_Empty=false;! [2 ^6 U7 k! V
}9 i$ z! F4 A' D* D
}</P>
7 Z  ~9 _" X! N! [8 K: L* b<>void Texture:raw(float x,float y)+ H+ `* v, A* o
{7 b0 m' R4 i0 E3 y% G
glEnable(GL_TEXTURE_2D);) G" {9 K/ }; p- V& k" K
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>
* ]9 Y, Q$ M* s* c' x<>    glPushMatrix();! m0 G& ~/ n7 j  \
    glTranslatef(x,y,0);3 y0 L  z; }- B1 h  Q- V* n
glBegin(GL_QUADS);
' c# P& \6 x- S) Y! {        glTexCoord2f(0,1);glVertex2f(0     ,0);
4 y  {+ `; K9 O8 ~+ T+ G1 I1 |        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
- k0 g' Y8 L( K: K' Y& A/ B        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);; }9 |  e) V% ~7 T6 T$ l$ r! i5 }
        glTexCoord2f(1,1);glVertex2f(m_Width,0);+ ]; N/ J; `9 Q; g$ A
    glEnd();
' [8 j. T* L+ O8 o; } glPopMatrix();5 Y) L0 W2 C2 u; X; A3 n# g
    glDisable(GL_TEXTURE_2D);
6 c  G( D' {5 _$ O4 Y; f! a}</P>" I1 ], n& ?  A2 X3 {: C1 M
<>void Texture::Clear()
+ j) {- B& Y" ]6 L{
' Y: i9 ], }/ n if(m_Empty)return;</P>) P( M- J  H1 u# S. b* d; F
<>    glDeleteTextures(1,&amp;m_Index);</P>
" P0 e/ z3 l! V9 r<> m_Empty=true;
7 q2 Z( V: t, S: Z# k. a" N}6 W; n! d0 B8 J

- D! p' o6 z$ r/ Y& t; J' j) Q1 O1 U1 W+ W- \' f4 J! U3 A
  S7 e' [% G6 h! ^5 j- g
使用也很简单..直接Texture t;</P>. C, G. |5 P8 ]7 {
<>t.LoadFile(FileName);</P>
! m( ^4 |4 [$ Q6 ~, |7 u1 }<>然后在Draw里,t.draw(x,y);</P>3 l8 N- E8 E9 A/ Q9 U1 M9 S9 h' q
<>就可以了.
. p$ h# t  H* d3 C2 M9 g
% h& f8 D2 o1 ?% A' Q以下是效果图:</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 16:42 , Processed in 0.614156 second(s), 61 queries .

回顶部