TEXTURE.CPP
上传用户:zbjingming
上传日期:2010-01-02
资源大小:2436k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #include "radio.h"
  2. #include <string.h>
  3. extern TEXTURE_2D **TextureList;
  4. /********************************/
  5. /* function : OpenTexImage */     
  6. /********************************/
  7. unsigned char  *OpenTexImage( INT2U TexIndex, INT2U *rslx, INT2U *rsly )
  8. {
  9. unsigned char *image;
  10. FILE *fp;
  11. INT2U srcx, srcy, x, y;
  12. INT4U i, j, rslp, srcp, srcp2;
  13. unsigned short *rbuf, *gbuf, *bbuf;
  14. float daltarx, daltary;
  15. char        ImageName[30];
  16. unsigned char *SImageData;
  17. int rc;
  18. long width, height;
  19. strcpy( ImageName, TextureList[TexIndex]->fname);
  20. /* load a image */ 
  21.     fp = fopen(ImageName,"rb");
  22.     if(!fp) return 0;
  23.     fseek(fp,18L,0);
  24.     rc=fread(&width,sizeof(long),1,fp);
  25.     rc=fread(&height,sizeof(long),1,fp);
  26. *rslx=srcx=width; *rsly=srcy=height;
  27. fseek(fp,54L,0);
  28.     image = (unsigned char *)malloc(width*height*3);
  29.     rc=fread(image,width*height*3,1,fp);
  30.     fclose(fp);
  31. SImageData = (unsigned char *)malloc(srcx*srcy*3);
  32.     for(i=0; i<srcx; i++) {
  33.        for(j=0; j<srcy; j++) {
  34.          (unsigned char)*(SImageData+i*srcx*3+j*3+0) = (unsigned char)*(image+i*srcx*3+j*3+2);
  35.          (unsigned char)*(SImageData+i*srcx*3+j*3+1) = (unsigned char)*(image+i*srcx*3+j*3+1);
  36.          (unsigned char)*(SImageData+i*srcx*3+j*3+2) = (unsigned char)*(image+i*srcx*3+j*3+0);
  37.    }
  38.     }
  39.     free(image);
  40. printf("%s : %ld=%ldn", ImageName, srcx*srcy*3,i*j*3);
  41. return( SImageData );
  42. }
  43. /********************************/
  44. /* function : InitTex */     
  45. /********************************/
  46. void InitTex( int TexIndex )
  47. {
  48. INT2U rslx, rsly, TextType;
  49. char *ImageData;
  50. static int OldIndex = -1;
  51. if(TexIndex<=0) return;
  52. if(TexIndex == OldIndex)
  53. {
  54. glEnable(GL_TEXTURE_2D);
  55. return;
  56. }
  57. ImageData = (char *)ImageDatas[TexIndex-1];
  58. TextType = TextureList[TexIndex]->type;
  59. glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  60. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  61. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  62. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  63. if( TextType == CLAMP_TEXTURE )
  64. {
  65. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  66. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  67. }
  68. else
  69. {
  70. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  71. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  72. }
  73. glTexImage2D( GL_TEXTURE_2D, 0, 3, rslxs[TexIndex-1], rslys[TexIndex-1],
  74.                  0,GL_RGB, GL_UNSIGNED_BYTE, ImageData );
  75. glEnable(GL_TEXTURE_2D);
  76. OldIndex = TexIndex;
  77. }
  78. /********************************/
  79. /* function : CloseTex */     
  80. /********************************/
  81. void CloseTex()
  82. {
  83. glDisable(GL_TEXTURE_2D);
  84. }
  85. void LoadAllTexture()
  86. {
  87.     int i;
  88.     
  89. for (i=0; i <texnum ; i++)
  90.   ImageDatas[i] = OpenTexImage( i+1, &rslxs[i], &rslys[i] );
  91. }
  92. void FreeAllTexture()
  93. {
  94.     int i;
  95.     
  96. for (i=0; i <texnum ; i++)
  97.   free(ImageDatas[i]);
  98. }