Texture.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:3k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. //
  2. // a64ki
  3. // Copyright (c) 2002 Henrik Carlgren
  4. // http://ziruz.cjb.net
  5. // ziruz@hotpop.com
  6. //
  7. //
  8. // INCLUDE FILES
  9. //
  10. #include "texture.h"
  11. #include "chrome.h"
  12. #include "cwl.h"
  13. #include <windows.h>
  14. #include <glgl.h>
  15. #include <cmath>
  16. double hypot(double a, double b)
  17. {
  18. double t;
  19. if(a<0) a = -a;
  20. if(b<0) b = -b;
  21. if(a > b) {
  22. t = a;
  23. a = b;
  24. b = t;
  25. }
  26. if(b==0) return(0.);
  27. a /= b;
  28. return(b*sqrt(1. + a*a));
  29. }
  30. //
  31. // GLOBAL VARIABLES
  32. //
  33. GLuint texture[TEXTURE_COUNT];
  34. //
  35. // FUNCTION: generateParticleTexture
  36. //
  37. void generateParticleTexture(void)
  38. {
  39. const int size = 64;
  40. float k;
  41. unsigned char buffer[size * size * 3];
  42. int c;
  43. int i = 0;
  44. for(int y = 0; y < size; y++)
  45. {
  46. for(int x = 0; x < size; x++)
  47. {
  48. k = float(1.0f - hypot(x - size / 2, y - size / 2) * 2 / size);
  49. if (k < 0) k = 0;
  50. c = (int)(255.f * k * k);
  51. buffer[i] = buffer[i+1] = buffer[i+2] = c;
  52. i+=3;
  53. }
  54. }
  55. uploadTexture(buffer, size, TEXTURE_PARTICLE);
  56. }
  57. //
  58. // FUNCTION: generateBackground0Texture
  59. //
  60. void generateBackground0Texture(void)
  61. {
  62. const int size = 256;
  63. unsigned char buffer[size * size * 3];
  64. int x, y, i = 0;
  65. for(y = 0; y < size; y++)
  66. {
  67. for(x = 0; x < size; x++)
  68. {
  69. buffer[i] = buffer[i+1] = buffer[i+2] = i^y;
  70. i+=3;
  71. }
  72. }
  73. uploadTexture(buffer, size, TEXTURE_BG0);
  74. }
  75. //
  76. // FUNCTION: generateBackground1Texture
  77. //
  78. void generateBackground1Texture(void)
  79. {
  80. const int size = 256;
  81. unsigned char buffer[size * size * 3];
  82. int i = 0;
  83. for(int y = 0; y < size; y++)
  84. {
  85. for(int x = 0; x < size; x++)
  86. {
  87. buffer[i] = buffer[i+1] = buffer[i+2] = (i^x*y);
  88. i+=3;
  89. }
  90. }
  91. uploadTexture(buffer, size, TEXTURE_BG1);
  92. }
  93. void generateEnv0Texture(void)
  94. {
  95. const int size = 256;
  96. float k;
  97. unsigned char buffer[size * size * 3];
  98. int c;
  99. int i = 0;
  100. for(int y = 0; y < size; y++)
  101. {
  102. for(int x = 0; x < size; x++)
  103. {
  104. k = float(1.0f - hypot(x - size / 2, y - size / 2) * 2 / size);
  105. if(k < 0)
  106. k = 0.1f;
  107. c = (int)(255.f * k);
  108. c /= 4;
  109. c *= 5;
  110. buffer[i] = buffer[i+1] = buffer[i+2] = c>255?255:c;
  111. i+=3;
  112. }
  113. }
  114. uploadTexture(buffer, size, TEXTURE_ENV0);
  115. }
  116. void generateEnv1Texture(void)
  117. {
  118. uploadTexture(chrome, 32, TEXTURE_ENV1);
  119. }
  120. void generateCwl0Texture(void)
  121. {
  122. uploadTexture(cwl, 128, TEXTURE_CWL0);
  123. }
  124. //
  125. // FUNCTION: generateTextures
  126. //
  127. void generateTextures(void)
  128. {
  129. glGenTextures(TEXTURE_COUNT, texture);
  130. generateParticleTexture();
  131. generateBackground0Texture();
  132. generateBackground1Texture();
  133. generateEnv0Texture();
  134. generateEnv1Texture();
  135. generateCwl0Texture();
  136. }
  137. //
  138. // FUNCTION: uploadTexture
  139. //
  140. void uploadTexture(const unsigned char *buffer , int size, int id)
  141. {
  142. glBindTexture(GL_TEXTURE_2D, texture[id]);
  143.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  144.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  145. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  146. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  147. glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, size, size, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
  148. }