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

  1. /*
  2.  
  3. 1st rayed object - 3ds viewer
  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_01.h"
  16. #include "syncs.h"
  17.  
  18. extern int sync_id;
  19. extern BOOL usefog;
  20.  
  21. int efekt_01::init()
  22. {
  23.   cout << "Efekt 1 init ... ";
  24.   start=TRUE;
  25.   counter=ZACIATOK01*refresh;
  26.   glClearColor (cl_r, cl_g, cl_b, 1.0);
  27.   cout << "ok!" << endl;
  28. return 1;
  29. }
  30.  
  31. int efekt_01::load()
  32. {
  33.    cout << "Loading efekt01 ... ";
  34.    FILE *stream=fopen(CFGNAME01,"r");
  35.    if (stream==NULL) return 0;
  36.    fscanf(stream,"file name            %s\n",scene_name);
  37.    fscanf(stream,"camera name          %s\n",camera_name);
  38.    fscanf(stream,"begin                %f\n",&begin3d);
  39.    fscanf(stream,"end                  %f\n",&end3d);
  40.    fscanf(stream,"background color     %f,%f,%f\n",&cl_r,&cl_g,&cl_b);
  41.    fscanf(stream,"lightning            %i\n",&lgt);
  42.    fscanf(stream,"fog                  %i\n",&fog);
  43.    fscanf(stream,"fog color            %f,%f,%f\n",&fg_r,&fg_g,&fg_b);
  44.    fscanf(stream,"fog density          %f\n",&fgd);
  45.    fscanf(stream,"visibility           %f\n",&vis);
  46.    fscanf(stream,"minvisibility        %f\n",&minvis);
  47.    fscanf(stream,"hfov,vfov (PI/x)     %f,%f\n",&hfov,&vfov);
  48.    fscanf(stream,"render               %i\n",&render);
  49.    fscanf(stream,"rays                 %i\n",&rays);
  50.    fscanf(stream,"outline              %i\n",&obrysy);
  51.    fscanf(stream,"outline color        %f,%f,%f\n",&ob_r,&ob_g,&ob_b);
  52.    fscanf(stream,"outline width        %i\n",&ob_wdt);
  53.    fscanf(stream,"object name          %s\n",object_name);
  54.    fclose(stream);
  55.    fog&=usefog;
  56.    Loader3DS loader;
  57.    sce = loader.Load(scene_name,texture_library);
  58.    if (sce==NULL) return 0;
  59.    cout << "ok!"<<endl;
  60. return 1;
  61. }
  62.  
  63. int efekt_01::free() //vrati 3 ak ok, 0 ak doslo k chybe
  64. {
  65. end=true;
  66. return 3;
  67. }
  68.  
  69. int efekt_01::update()
  70. {
  71. return 1;
  72. }
  73.  
  74. int efekt_01::go(double t)
  75. {
  76. if (t<ZACIATOK01) return 1;
  77. if (t<begin3d) return 1;
  78. if (end) return 3;
  79. if (t>=KONIEC01) return free();
  80.  
  81. if (!start) if (!init()) return 0;
  82. /*
  83. int cur_frm=(int)(t*refresh);
  84. if (cur_frm>KONIEC01*refresh) cur_frm=int(KONIEC01*refresh);
  85. if (cur_frm>counter)
  86.   while (counter<cur_frm)
  87.     {
  88.     counter++;
  89.     if (counter<KONIEC01*refresh) update();
  90.     }
  91. if (counter>=KONIEC01*refresh) return free();
  92. */
  93. //tu sa kresli->
  94.   if (lgt) 
  95.     {
  96.     glEnable(GL_LIGHTING);    
  97.     glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
  98.     }
  99.    else 
  100.     glDisable(GL_LIGHTING);    
  101.  
  102.   if (fog) 
  103.     {
  104.     GLfloat fc[4] = {fg_r,fg_g,fg_b, 1.0};
  105.     glEnable(GL_FOG);
  106.     glFogi(GL_FOG_MODE, GL_EXP2);
  107.     glFogfv(GL_FOG_COLOR, fc);
  108.     glFogf(GL_FOG_DENSITY, fgd);
  109.     }
  110.    else glDisable(GL_FOG);    
  111.  
  112.  
  113.   float frejm=(t-begin3d)/(end3d-begin3d);
  114.  
  115.   kam = sce->GetCamera(camera_name);
  116.   kam->FarClipplane(vis);
  117.   kam->NearClipplane(minvis);
  118.   kam->HorizontalFOV(PI/hfov);
  119.   kam->VerticalFOV(PI/vfov);
  120.   kam->GL(frejm);
  121.   if (render) sce->Render(frejm);
  122.  
  123.   if (obrysy||rays)
  124.     {
  125.     Object3DS* object = dynamic_cast<Object3DS*>(sce->GetObject(object_name));
  126.     if(object)
  127.       {
  128.       Vector3f S( 0.0, 200.0, 0.0);
  129.       Vector3f C=kam->Origin(frejm);
  130.       if (rays)   object->Rays(C, S, 500 ,GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
  131.       if (obrysy) object->Outline (C, 8, 1.0,1.0,1.0);
  132.       }
  133.     }
  134. //<-
  135. return 2;
  136. }
  137.