home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 February / Chip_2001-02_cd1.bin / bonus / demos / CS / exp / SOURCES / DEMO / EFEKT_09.CPP < prev    next >
C/C++ Source or Header  |  2000-08-14  |  4KB  |  176 lines

  1. /*
  2.  
  3. valec
  4.  
  5. return:
  6.   0 - doslo k chybe
  7.   1 - este nezacal
  8.   2 - prebehol v poriadku
  9.   3 - uz skoncil
  10. */
  11.  
  12. #include <iostream>
  13. #include "api3ds.h"
  14. #include "efekt.h"
  15. #include "efekt_09.h"
  16.  
  17. extern int sync_num;
  18.  
  19. #define valec_strany 20
  20. #define valec_polomer 25
  21. #define vr (valec_polomer/sin(PI/4))
  22. #define valec_dlzka 50
  23. #define c1 0.7
  24. #define c3 0.2
  25.  
  26. void efekt_09::RenderValec(float f, float pos_x, float pos_y, float size, float inte) {
  27.   float d3=c3*inte;
  28.   float d1=c1*inte;
  29.  
  30.   glBegin(GL_TRIANGLE_FAN);
  31.   glColor3f(d1,d1,d1);
  32.   glTexCoord2f(pos_x,pos_y);
  33.   glVertex3f(valec_dlzka,0,0);
  34.   glColor3f(d3,d3,d3);
  35.   for(int i=0; i<=valec_strany; i++) {
  36.     GLfloat a = ((PI*2.0)/(double)valec_strany)*i;
  37.     GLfloat x = valec_polomer*cos(a);
  38.     GLfloat y = valec_polomer*sin(a);
  39.  
  40.     glTexCoord2f(pos_x + size*cos(a-f), pos_y + size*sin(a-f));
  41.     glVertex3f(valec_dlzka,x, y);
  42.   }
  43.   glEnd();
  44.  
  45.   glBegin(GL_TRIANGLE_FAN);
  46.   glColor3f(d1,d1,d1);
  47.   glTexCoord2f(pos_x,pos_y);
  48.   glVertex3f(-valec_dlzka,0,0);
  49.   glColor3f(d3,d3,d3);
  50.   for(int i=0; i<=valec_strany; i++) {
  51.     GLfloat a = ((PI*2.0)/(double)valec_strany)*i;
  52.     GLfloat x = valec_polomer*cos(a);
  53.     GLfloat y = valec_polomer*sin(a);
  54.  
  55.     glTexCoord2f(pos_x + size*cos(a-f), pos_y + size*sin(a-f));
  56.     glVertex3f(-valec_dlzka,x, y);
  57.   }
  58.   glEnd();
  59.  
  60.   glBegin(GL_QUAD_STRIP);
  61.   for(int i=0; i<=valec_strany; i++) {
  62.     GLfloat a = ((PI*2.0)/(double)valec_strany)*i;
  63.     GLfloat x = valec_polomer*cos(a);
  64.     GLfloat y = valec_polomer*sin(a);
  65.  
  66.     glTexCoord2f(pos_x + size*cos(a-f), pos_y + size*sin(a-f));
  67.  
  68.     glVertex3f(valec_dlzka,x, y);
  69.     glVertex3f(-valec_dlzka,x, y);
  70.   }
  71.   glEnd();
  72. }
  73.  
  74.  
  75. int efekt_09::init()
  76. {
  77.   start=TRUE;
  78.   counter=ZACIATOK09*refresh;
  79.   f_counter1=0.0;
  80.   f_counter2=0.0;
  81.   int1=1.0;
  82.   int2=1.0;
  83. return 1;
  84. }
  85.  
  86. int efekt_09::load()
  87. {
  88.    cout << "Loading efekt09 ... ";
  89.    FILE *stream=fopen(CFGNAME09,"r");
  90.    if (stream==NULL) return 0;
  91.    fscanf(stream,"file name            %s\n",scene_name);
  92.    fscanf(stream,"camera name          %s\n",camera_name);
  93.    fscanf(stream,"begin                %f\n",&begin3d);
  94.    fscanf(stream,"end                  %f\n",&end3d);
  95.    fscanf(stream,"background color     %f,%f,%f\n",&cl_r,&cl_g,&cl_b);
  96.    fscanf(stream,"visibility           %f\n",&vis);
  97.    fscanf(stream,"minvisibility        %f\n",&minvis);
  98.    fclose(stream);
  99.  
  100.    tex1=texture_library->GetOrCreate("VALEC.JPG");
  101.  
  102.    Loader3DS loader;
  103.    sce = loader.Load(scene_name,texture_library);
  104.    if (sce==NULL) return 0;
  105.  
  106.    kam=sce->GetCamera(camera_name);
  107.    kam->HorizontalFOV(2.26672);
  108.    kam->VerticalFOV  (1.98626);
  109.  
  110.    cout << "ok!"<<endl;
  111. return 1;
  112. }
  113.  
  114. int efekt_09::free()
  115. {
  116. return 1;
  117. }
  118.  
  119. int efekt_09::update()
  120. {
  121.   f_counter1+=0.005;
  122.   f_counter2-=0.003;
  123. return 1;
  124. }
  125.  
  126. int efekt_09::go(double t)
  127. {
  128. if (t<ZACIATOK09) return 1;
  129. if (t<begin3d) return 1;
  130. if (end) return 3;
  131. if (counter>=KONIEC09*refresh) return free();
  132.  
  133. if (!start) if (!init()) return 0;
  134.  
  135. int cur_frm=(int)(t*refresh);
  136. if (cur_frm>KONIEC09*refresh) cur_frm=int(KONIEC09*refresh);
  137. if (cur_frm>counter)
  138.   while (counter<cur_frm)
  139.     {
  140.     counter++;
  141.     if (counter<KONIEC09*refresh) update();
  142.     }
  143. if (counter>=KONIEC09*refresh) return free();
  144.  
  145.  
  146. //tu sa kresli->
  147.  
  148.   glEnable(GL_TEXTURE_2D);
  149.   glDisable(GL_DEPTH_TEST);
  150.   glDisable(GL_CULL_FACE);
  151.   glDisable(GL_LIGHTING);
  152.   glDisable(GL_FOG);
  153.  
  154.   float frejm=(t-begin3d)/(end3d-begin3d);
  155.   while (t>1.0) t-=1.0;
  156.  
  157.   kam->FarClipplane(vis);
  158.   kam->NearClipplane(minvis);
  159.   kam->GL(frejm);
  160.   tex1->GL();
  161.  
  162.   glDisable(GL_BLEND);
  163.   RenderValec(10*f_counter1, 0.3+0.8*sin(f_counter1*3), 0.3+0.8*cos(f_counter1*2), 0.2, int1);
  164.  
  165.   float frejm2=frejm+0.3;
  166.   if (frejm2>1.0) frejm2-=1.0;
  167.   kam->GL(frejm2);
  168.  
  169.   glEnable(GL_BLEND);
  170.   glBlendFunc(GL_ONE,GL_ONE);
  171.   RenderValec(10*f_counter2, 0.3+0.8*sin(f_counter2*3), 0.3+0.8*cos(f_counter2*2), 0.3+0.15*sin(f_counter1), int2);
  172.  
  173. //<-
  174. return 2;
  175. }
  176.