other.cpp
上传用户:liujun12jf
上传日期:2022-07-12
资源大小:638k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #include "other.h"
  2. // this function stores current matrix (useful after glulookat) and can restore it later
  3. void glxMatrix(bool b) // holds one matrix ('1'nput - save current matrix, '0'utput - use saved matrix)
  4. {
  5. static float f[16];
  6. if (b)
  7. {
  8. glGetFloatv(GL_MODELVIEW_MATRIX, f);
  9. }
  10. else // (!b)
  11. {
  12. glMultMatrixf(f);
  13. }
  14. }
  15.  /*********************/
  16. /* MOTION BLUR CLASS */
  17. CMotionBlur::CMotionBlur()
  18. {
  19. var_return = 0.99f;
  20. var_accum = 0.99f;
  21. var_mult = 0.5f;
  22. enabled = false;
  23. }
  24. void CMotionBlur::Enable()
  25. { enabled = 1; }
  26. void CMotionBlur::Disable()
  27. { enabled = 0; }
  28. void CMotionBlur::Switch()
  29. { enabled = !enabled; }
  30. void CMotionBlur::step(int i, float var)
  31. {
  32. if (!enabled) return;
  33. switch(i)
  34. {
  35. case 1: acc_return(var); break;
  36. case 2: acc_accum(var); break;
  37. case 3: acc_mult(var); break;
  38. case 23: acc_accum(var); acc_mult(var); break;
  39. default: break;
  40. }
  41. }
  42. void CMotionBlur::acc_return(float var)
  43. {
  44. if (var == -1) var = var_return;
  45. glAccum(GL_RETURN, var);
  46. }
  47. void CMotionBlur::acc_accum(float var)
  48. {
  49. if (var == -1) var = var_accum;
  50. glAccum(GL_ACCUM, var);
  51. }
  52. void CMotionBlur::acc_mult(float var)
  53. {
  54. if (var == -1) var = var_mult;
  55. glAccum(GL_MULT, var);
  56. }
  57.  /* END OF MOTION BLUR CLASS */
  58. /****************************/
  59. float rnd(float fMin, float fMax)
  60. {
  61. float fRandNum = (float)rand () / RAND_MAX;
  62. return fMin + (fMax - fMin) * fRandNum;
  63. }
  64. bool Clampf(float *f, float min, float max)
  65. {
  66. if (*f < min)
  67. {
  68. *f = min;
  69. return 1;
  70. }
  71. if (*f > max)
  72. {
  73. *f = max;
  74. return 1;
  75. }
  76. return 0;
  77. }
  78. bool Clampi(int *i, int min, int max)
  79. {
  80. if (*i < min)
  81. {
  82. *i = min;
  83. return 1;
  84. }
  85. if (*i > max)
  86. {
  87. *i = max;
  88. return 1;
  89. }
  90. return 0;
  91. }
  92. void ftoa(float f, char *str)
  93. {
  94. sprintf(str, "%11.3f", f);
  95. }
  96. ////////////////////////////////////////////////////////////////////////////////
  97. void errf(char *message, char *var)
  98. {
  99. static char filename[64]="errors.txt";
  100. static char error[256];
  101. char t[16];
  102. GetDayTimeS(t);
  103. strcpy(error, t);
  104. strcat(error, " :: ");
  105. strcat(error, message);
  106. strcat(error, " ( ");
  107. strcat(error, var);
  108. strcat(error, " )n");
  109. FILE *fff;
  110. if (fff=fopen(filename, "a"))
  111. {
  112. char tmp[1]; fgets(tmp, 1, fff); // this goes to eof :))
  113. fputs(error, fff);
  114. fclose(fff);
  115. }
  116. }
  117. ////////////////////////////////////////////////////////////////////////////////
  118. void renderCube(CVector v, float t)
  119. {
  120. glBegin(GL_QUADS);
  121. // front
  122. glNormal3f(0.0, 0.0, 1.0);
  123. glTexCoord2f(0.0, 0.0); glVertex3f(-v.x, -v.y, v.z);
  124. glTexCoord2f(t, 0.0); glVertex3f( v.x, -v.y, v.z);
  125. glTexCoord2f(t, t); glVertex3f( v.x,  v.y, v.z);
  126. glTexCoord2f(0.0, t); glVertex3f(-v.x,  v.y, v.z);
  127. // back
  128. glNormal3f(0.0, 0.0, -1.0);
  129. glTexCoord2f(0.0, 0.0); glVertex3f( v.x, -v.y, -v.z);
  130. glTexCoord2f(t, 0.0); glVertex3f(-v.x, -v.y, -v.z);
  131. glTexCoord2f(t, t); glVertex3f(-v.x,  v.y, -v.z);
  132. glTexCoord2f(0.0, t); glVertex3f( v.x,  v.y, -v.z);
  133. // top
  134. glNormal3f(0.0, 1.0, 0.0);
  135. glTexCoord2f(0.0, 0.0); glVertex3f(-v.x,  v.y,  v.z);
  136. glTexCoord2f(t, 0.0); glVertex3f( v.x,  v.y,  v.z);
  137. glTexCoord2f(t, t); glVertex3f( v.x,  v.y, -v.z);
  138. glTexCoord2f(0.0, t); glVertex3f(-v.x,  v.y, -v.z);
  139. // bottom
  140. glNormal3f(0.0, -1.0, 0.0);
  141. glTexCoord2f(0.0, 0.0); glVertex3f(-v.x, -v.y, -v.z);
  142. glTexCoord2f(t, 0.0); glVertex3f( v.x, -v.y, -v.z);
  143. glTexCoord2f(t, t); glVertex3f( v.x, -v.y,  v.z);
  144. glTexCoord2f(0.0, t); glVertex3f(-v.x, -v.y,  v.z);
  145. // left
  146. glNormal3f(-1.0, 0.0, 0.0);
  147. glTexCoord2f(0.0, 0.0); glVertex3f(-v.x, -v.y, -v.z);
  148. glTexCoord2f(t, 0.0); glVertex3f(-v.x, -v.y,  v.z);
  149. glTexCoord2f(t, t); glVertex3f(-v.x,  v.y,  v.z);
  150. glTexCoord2f(0.0, t); glVertex3f(-v.x,  v.y, -v.z);
  151. // right
  152. glNormal3f(1.0, 0.0, 0.0);
  153. glTexCoord2f(0.0, 0.0); glVertex3f(v.x,  -v.y,  v.z);
  154. glTexCoord2f(t, 0.0); glVertex3f(v.x,  -v.y, -v.z);
  155. glTexCoord2f(t, t); glVertex3f(v.x,   v.y, -v.z);
  156. glTexCoord2f(0.0, t); glVertex3f(v.x,   v.y,  v.z);
  157. glEnd();
  158. }
  159. ////////////////////////////////////////////////////////////////////////////////
  160. void err(char *text, char *title)
  161. {
  162. MessageBox( NULL, text, title, MB_OK | MB_ICONERROR );
  163. }
  164. ////////////////////////////////////////////////////////////////////////////////
  165. void errfi(char *txt, float nmb1, float nmb2, float nmb3)
  166. {
  167. char str[256];
  168. err2str(str, txt, nmb1, nmb2, nmb3);
  169. errf(txt, str);
  170. }
  171. void erri(char *txt, float nmb1, float nmb2, float nmb3)
  172. {
  173. char str[256];
  174. err2str(str, txt, nmb1, nmb2, nmb3);
  175. err(str, txt);
  176. }
  177. void err2str(char *str, char *txt, float nmb1, float nmb2, float nmb3)
  178. {
  179. char brm[16];
  180. // char str[256];
  181. ftoa(nmb1, brm); strcpy(str, brm);
  182. if (nmb2 != -1.111f)
  183. {
  184. strcat(str, ", "); ftoa(nmb2, brm); strcat(str, brm);
  185. if (nmb3 != -1.111f)
  186. {
  187. strcat(str, ", "); ftoa(nmb3, brm); strcat(str, brm);
  188. }
  189. }
  190. }
  191. s_time_hms GetDayTime()
  192. {
  193. s_time_hms tt;
  194. int t = time(0);
  195. tt.s = t % 60; t /= 60;
  196. tt.m = t % 60; t /= 60;
  197. tt.h = t % 24;
  198. tt.h += 2; // lol :)
  199. return tt;
  200. }
  201. void GetDayTimeS(char *s)
  202. {
  203. char str[32];
  204. char q[8];
  205. s_time_hms t = GetDayTime();
  206. itoa(t.h, q, 10); strcpy(str, q); strcat(str, ":");
  207. itoa(t.m, q, 10); strcat(str, q); strcat(str, ":");
  208. itoa(t.s, q, 10); strcat(str, q);
  209. strcpy(s, str);
  210. }