QQ登录

只需要一步,快速开始

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

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

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

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

跳转到指定楼层
1#
发表于 2004-11-20 22:39 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>这个类使用了Glu.h头文件.. ~3 X  f( ]3 _5 j- k  C$ `1 z
看代码吧!</P>; L8 T7 m7 E% S
<>//头文件# y3 W7 M! D/ z1 c
#ifndef TEXTURE_H
5 U  w8 Z( d$ Y4 G% V* H#define TEXTURE_H</P>
/ n0 A' d' u4 N9 E0 ?<>class Texture" k4 ^. f0 e$ U9 I5 t  [# A! O
{) z+ _' h" u; c% n5 ~4 Z  h8 K
private:
; s% \" Z0 G# O/ ^+ J7 ^9 _6 s unsigned int    m_Index;
6 [4 R' n. D* n& U( X. L bool   m_Empty;1 {) Y, T1 ]% W/ L: N
float   m_Width;
+ h% o6 h  y7 t' z3 j; h float   m_Height;
1 _  w$ o* G8 F" lpublic:
5 V; ^: j/ y. z) s* i Texture();* L" w4 F- m4 O- R8 p
~Texture();</P>: N5 p0 U7 l0 F) K5 C0 A# I% ^
<> void Clear();
+ c. [) J6 G# Y* o: J8 s5 C! S3 R3 H1 ] void LoadFile(char*fn);
9 D% I9 T3 }' n void Draw(float x,float y);8 E, x1 l  e6 {
};</P>
# `) @( ^* f4 S1 \<>#endif//TEXTURE_H5 y- ]9 R/ D, \) R; k0 P

9 l+ j) F# I6 j1 G
' z( }$ k! M$ p5 [; V. c; {% A3 k
//CPP文件
$ q: \; P6 ^3 x. s5 v5 J#include "Texture.h"
( O% v+ T) u( a6 h( O, W2 {#include &lt;windows.h&gt;
4 t6 j: ]( e1 N4 j% G2 z5 K' F#include &lt;gl/gl.h&gt;# r" R5 _- {2 I% o6 v. u; N6 O- b
#include &lt;gl/glaux.h&gt;</P>' U. _! a$ ~* ~' `
<>#pragma comment(lib,"glaux.lib")</P>
$ `5 A1 l  q5 c/ w# ~<>Texture::Texture()
# X  ~- ?5 y) J& d# R6 _- Q. p{
- e$ `5 K0 T/ b8 h% q m_Empty=true;- z0 u0 d  e& V  G0 S9 f1 d- l
}</P>
2 N8 `" s% M0 Q% j& M<>Texture::~Texture()
1 Q6 j! }9 ~- Z0 o: h6 m' f9 n* b{% m# {  w% V: G* k6 c, n
Clear();
% A* U! W4 `, y}</P>
+ R: n$ v4 B' W1 E: h4 s' F<>void Texture:oadFile(char*fn)4 {' v7 W7 N8 S, y" R3 F
{
1 [# T6 X6 T' x5 ?7 @! G9 [- A6 ^ AUX_RGBImageRec*image;
+ Y( H' C8 _7 ~+ t5 N image=NULL;</P>
* }/ g- P' ^4 b# X$ O& O- b! L( ]<> image=auxDIBImageLoad(fn);</P>) z' O9 X/ }8 d$ q- F* x
<> if(image!=NULL)
& j: i- j9 E; q- j9 \ {
9 @$ u, V4 v2 y9 m  glGenTextures(1,&amp;m_Index);/ W% E. v6 r1 U& ~: P
  glBindTexture(GL_TEXTURE_2D,m_Index);
  d- K5 b3 y' p) @3 J  glTexImage2D(GL_TEXTURE_2D,0,3,image-&gt;sizeX,image-&gt;sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
0 ]8 `: V4 h5 U  P/ M   image-&gt;data);
, `5 g2 G$ v3 I  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
5 m. F2 I, [* K) b% s/ G  c  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);</P>
; `0 T7 D8 W$ F+ o* i<>  m_Width=image-&gt;sizeX;) Q* _' N0 t7 B8 d; x2 f
  m_Height=image-&gt;sizeY;</P>
0 D* ^5 V$ a1 C, I- G<>  if(image)
. i: Y; H; U9 S* q* U' q* D- E  {
6 k2 b4 F/ B4 Z/ q, X   if(image-&gt;data)
9 a  O  T/ |# ?8 ]3 X# n3 N5 o    free(image-&gt;data);</P>; D) R& |* a, M0 p; x
<>   free(image);2 W9 e. L. [2 I& h
  }</P>* N3 z$ M! P' @1 u9 Y7 U
<>  m_Empty=false;7 {: ~! y' W" ]! j
}
, t$ q9 b9 X$ X1 z( A}</P>: M; r' p' c8 P  k% H
<>void Texture:raw(float x,float y). e  F8 v5 D2 t) F
{& D: C' I2 `- i# m
glEnable(GL_TEXTURE_2D);7 R* W9 \% m  T  o8 k( z5 E
    glBindTexture(GL_TEXTURE_2D,m_Index);</P>; H1 @; J0 u- Q( u( |; k! N
<>    glPushMatrix();. |4 T0 R0 K. B3 ]' a  l
    glTranslatef(x,y,0);  W. Z+ \0 k" |( ?3 v  X+ M; y
glBegin(GL_QUADS);
; w8 @; f1 L: K7 C9 @        glTexCoord2f(0,1);glVertex2f(0     ,0);
. J2 _- K( U/ E4 B$ A) z( }( B        glTexCoord2f(0,0);glVertex2f(0     ,m_Height);
7 k) |: l  {& Q$ F  ~) a        glTexCoord2f(1,0);glVertex2f(m_Width,m_Height);" i; H! g2 q4 T
        glTexCoord2f(1,1);glVertex2f(m_Width,0);1 T# n7 \3 U1 `- G4 j
    glEnd();( c3 ~5 K% d# A" r" S) `9 [6 P
glPopMatrix();# U% }9 N6 W2 P0 ^( g; r
    glDisable(GL_TEXTURE_2D);- S5 Y5 K: s& {* o: v2 Y/ ~
}</P>
' q! W: ]" Q6 Z/ E( [+ U$ C9 e3 e/ p* t<>void Texture::Clear()
$ O/ f4 F8 i6 `( U{
% y$ m) S6 s3 P9 Z; p4 r) p if(m_Empty)return;</P>4 d/ t8 b6 ?9 m4 F0 e7 F8 R
<>    glDeleteTextures(1,&amp;m_Index);</P>+ E% {; Q" I/ E0 c' R
<> m_Empty=true;
6 l$ E1 e& l+ F: K}$ X2 Y( M* D- X
: F* @2 }7 X4 G& a) ]
; R: o* W/ d# p
1 X$ I& ?0 E/ f9 `/ }2 v+ ~4 O( }2 B
使用也很简单..直接Texture t;</P>
7 |+ |0 g2 ?, o% R4 b, t# y<>t.LoadFile(FileName);</P>( R" V# c! `1 v; a* b) z$ ?
<>然后在Draw里,t.draw(x,y);</P>
2 u$ I2 T& s: f<>就可以了.8 B' p$ ]) E8 [' m

3 m# F$ ^# e+ M( H+ E4 w% ^, g) k, [以下是效果图:</P>

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

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

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

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-23 08:07 , Processed in 0.359088 second(s), 60 queries .

回顶部