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

OpenGL

开发平台:

Windows_Unix

  1. #include "../../main.h"
  2. extern NIMG FlyTextFore;
  3. float curTime = 0.0;
  4. float startTime;
  5. extern NSCENE  NScene[NUM_SCENE];
  6. bool FlyInit = true;
  7. extern float m_Z;
  8. extern bool TimeFly;
  9. #define MAX_FADEIN 3
  10. #define MAX_FADE_ALPHA 0.1
  11. float NDalpha = 0.0001f;
  12. float SlideIn = 0.0f;
  13. namespace fly
  14. {
  15. void Draw()
  16. {
  17. float ActuTime = (timeGetTime()*0.001f) - StartTime;
  18. glEnable (GL_TEXTURE_2D);
  19. if (FlyInit) {
  20. glShadeModel(GL_SMOOTH);
  21. glBlendFunc(GL_SRC_ALPHA, GL_SRC_ALPHA);
  22. glEnable(GL_BLEND);
  23. glEnable( GL_LIGHT0 );
  24. glEnable( GL_NORMALIZE );
  25. glEnable( GL_COLOR_MATERIAL );
  26. glColorMaterial( GL_FRONT, GL_DIFFUSE );
  27. startTime = (float)rand();///RAND_MAX;
  28. // On remet la projection... 
  29. glMatrixMode(GL_PROJECTION);
  30. glLoadIdentity();
  31. gluPerspective(45.0, 4/3, 0.001, 100.0);  // Do the perspective calculations. Last value = max clipping depth
  32. glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
  33. glLoadIdentity();
  34. FlyInit = false;
  35. }
  36. static double lastTime=0;
  37. if(curTime>4) curTime/=5;
  38. else  curTime=4;// - startTime;
  39. glEnable(GL_BLEND);
  40. static BOOL gen = TRUE;
  41. static float float_pos[80][3];
  42. static float float_vel[80][2];
  43. static float float_col[80][3];
  44. int i;
  45. float tex_u, tex_v;
  46. float alpha;
  47. alpha = ActuTime / 90.0f;
  48. alpha = NDalpha;
  49. NDalpha+=0.0005;
  50. if (alpha>0.9) alpha = 0.9f;
  51. glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
  52. glDisable( GL_DEPTH_TEST );
  53. if( gen==TRUE )
  54. {
  55. gen = FALSE;
  56. for( i=0;i<80;i++ )
  57. {
  58. float_pos[i][0] = (float)rand()/RAND_MAX * 24.0f - 12.0f;
  59. float_pos[i][1] = (float)rand()/RAND_MAX * 8.0f - 4.0f;
  60. float_pos[i][2] = -(float)rand()/RAND_MAX * 1 - 1.8f;
  61. float_vel[i][0] = (float)rand()/RAND_MAX * 0.1f+0.05f;
  62. float_vel[i][1] = (float)rand()/RAND_MAX * 0.01f-0.005f;
  63. float_vel[i][2] = 0;
  64. float_col[i][0] = (float)rand()/RAND_MAX * 0.1f+0.6f;
  65. float_col[i][1] = (float)rand()/RAND_MAX * 0.1f+0.6f;
  66. float_col[i][2] = (float)rand()/RAND_MAX * 0.1f+0.6f;
  67. }
  68. }
  69. glBindTexture( GL_TEXTURE_2D, FlyTextFore.ID );
  70. for( i=0;i<80;i++ )
  71. {
  72. tex_u = (float_pos[i][0] + 12) / 24.0f;
  73. tex_v = (float_pos[i][1] + 8) / 16.0f;
  74. glColor4f( float_col[i][0], float_col[i][1], float_col[i][2], alpha );
  75. glBegin( GL_QUADS );
  76. glTexCoord2f( tex_u-0.05f, tex_v+0.08f );
  77. glVertex3f( float_pos[i][0]-1.0f, float_pos[i][1]+1.0f, float_pos[i][2] );
  78. glTexCoord2f( tex_u-0.05f, tex_v-0.08f );
  79. glVertex3f( float_pos[i][0]-1.0f, float_pos[i][1]-1.0f, float_pos[i][2] );
  80. glTexCoord2f( tex_u+0.05f, tex_v-0.08f );
  81. glVertex3f( float_pos[i][0]+1.0f, float_pos[i][1]-1.0f, float_pos[i][2] );
  82. glTexCoord2f( tex_u+0.05f, tex_v+0.08f );
  83. glVertex3f( float_pos[i][0]+1.0f, float_pos[i][1]+1.0f, float_pos[i][2] );
  84. glEnd();
  85. float_pos[i][0] += float_vel[i][0]*curTime/10;
  86. float_pos[i][1] += float_vel[i][1]*curTime/10;
  87. if( float_pos[i][0] > 12.0f )
  88. {
  89. float_pos[i][0] -= 24.0f;
  90. float_pos[i][1] = (float)rand()/RAND_MAX * 8.0f - 4.0f;
  91. float_vel[i][0] = (float)rand()/RAND_MAX * 0.2f+0.05f;
  92. float_vel[i][1] = (float)rand()/RAND_MAX * 0.01f-0.005f;
  93. }
  94. }
  95. glEnable( GL_DEPTH_TEST );
  96. glBlendFunc( GL_ONE, GL_ONE );
  97. }
  98. }