Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [openGL] Problema gestione tempo
Forum - C/C++ - [openGL] Problema gestione tempo

Avatar
derin86 (Normal User)
Newbie


Messaggi: 1
Iscritto: 31/03/2014

Segnala al moderatore
Postato alle 12:46
Lunedì, 31/03/2014
Ciao a tutti,
sto cercando di eseguire un codice usando c++ e le lib openGl che esegua i seguenti comandi: mostrare una croce per 3 secondi e poi una colonna che va riempita fino ad un certo limite, ora io sono riuscito a creare la barra (che si riempie tramite un ciclo for) e so anche come creare la croce, il mio problema è come regolare il tempo, cioè fare in modo che uno appaia prima dell'altro e che ci resti per una durata da me decisa. Sapete darmi qualche consiglio? Di seguito posto il codice che sto usando, spero di non aver scritto cose troppo stupide e vi ringrazio in anticipo.

Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <GL/glut.h>
  6. /* GLUT callback Handlers */
  7. /*float RandomFloat(float min, float max)
  8. {
  9.     float r = (float)rand() / (float)RAND_MAX;
  10.     return min + r * (3.8 + 2.7 );
  11. }*/
  12. static void resize(int width, int height)
  13. {
  14.     const float ar = (float) width / (float) height;
  15.     glViewport(0, 0, width, height);
  16.     glMatrixMode(GL_PROJECTION);
  17.     glLoadIdentity();
  18.     glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
  19.     glMatrixMode(GL_MODELVIEW);
  20.     glLoadIdentity() ;
  21. }
  22. static void display(void)
  23. {
  24.    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  25.         unsigned int rgba = 0xFFFFFFFF; // white
  26.     unsigned int rgba1 = 0x00000000; // black
  27.         unsigned int rgba2 = 0x00EA00FF; //green
  28.         unsigned int rgba3 = 0xFF0000FF; //red
  29.         double i;
  30.  
  31.         for ( i = -2.7;i < 3.8;i+= 0.001)
  32. {
  33.         //rectangle
  34.         glBegin(GL_QUADS);
  35.  
  36.         //rectangle white
  37.         glColor4f(((rgba>>24)&0xff)/255.0f,
  38.              ((rgba>>16)&0xff)/255.0f,
  39.              ((rgba>>8)&0xff)/255.0f,
  40.              (rgba&0xff)/255.0f);
  41.  
  42.              glVertex3f(-3,-3,-10);
  43.              glVertex3f(3,-3,-10);
  44.              glVertex3f(3,4,-10);
  45.              glVertex3f(-3,4,-10);
  46.    
  47.         //rectangle black
  48.     glColor4f(((rgba1>>24)&0xff)/255.0f,
  49.              ((rgba1>>16)&0xff)/255.0f,
  50.              ((rgba1>>8)&0xff)/255.0f,
  51.              (rgba1&0xff)/255.0f);
  52.  
  53.                          glVertex3f(-2.9,-2.9,-10);
  54.              glVertex3f(2.9,-2.9,-10);
  55.              glVertex3f(2.9,3.9,-10);
  56.              glVertex3f(-2.9,3.9,-10);
  57.        
  58.     //rectangle feedback(green/red)
  59.                         if (i<=1.5)
  60.                                 {
  61.     glColor4f(((rgba2>>24)&0xff)/255.0f,
  62.              ((rgba2>>16)&0xff)/255.0f,
  63.              ((rgba2>>8)&0xff)/255.0f,
  64.              (rgba1&0xff)/255.0f);
  65.  
  66.                          glVertex3f(-2.7,-2.7,-10);
  67.              glVertex3f(2.7,-2.7,-10);
  68.              glVertex3f(2.7,(i),-10);
  69.              glVertex3f(-2.7,(i),-10);
  70.                          }
  71.                         else
  72.                                 {
  73.                          glColor4f(((rgba2>>24)&0xff)/255.0f,
  74.              ((rgba2>>16)&0xff)/255.0f,
  75.              ((rgba2>>8)&0xff)/255.0f,
  76.              (rgba2&0xff)/255.0f);
  77.  
  78.                          glVertex3f(-2.7,-2.7,-10);
  79.              glVertex3f(2.7,-2.7,-10);
  80.              glVertex3f(2.7,1.5,-10);
  81.              glVertex3f(-2.7,1.5,-10);
  82.  
  83.                          glColor4f(((rgba3>>24)&0xff)/255.0f,
  84.              ((rgba3>>16)&0xff)/255.0f,
  85.              ((rgba3>>8)&0xff)/255.0f,
  86.              (rgba2&0xff)/255.0f);
  87.  
  88.                          glVertex3f(-2.7,2,-10);
  89.              glVertex3f(2.7,2,-10);
  90.              glVertex3f(2.7,(i),-10);
  91.              glVertex3f(-2.7,(i),-10);
  92.                           }
  93.  
  94.         //horizontal black bar
  95.     glColor4f(((rgba>>24)&0xff)/255.0f,
  96.              ((rgba>>16)&0xff)/255.0f,
  97.              ((rgba>>8)&0xff)/255.0f,
  98.              (rgba&0xff)/255.0f);
  99.  
  100.                          glVertex3f(-3,1.5,-10);
  101.              glVertex3f(3,1.5,-10);
  102.              glVertex3f(3,2,-10);
  103.              glVertex3f(-3,2,-10);       
  104.                  
  105.                          glEnd();
  106.              glColor4f(1, 1, 1, 1);
  107.              glutSwapBuffers();
  108.                          glFlush();
  109.  
  110. }
  111. }
  112. static void key(unsigned char key, int x, int y)
  113. {
  114.     switch (key)
  115.     {
  116.         case 27 :
  117.         case 'q':
  118.             exit(0);
  119.             break;
  120.     }
  121.     //glutPostRedisplay();
  122. }
  123.  
  124. static void idle(void)
  125. {
  126.     glutPostRedisplay();
  127. }
  128.  
  129. /* Program entry point */
  130.  
  131. int main(int argc, char *argv[])
  132. {
  133.     glutInit(&argc, argv);
  134.     glutInitWindowSize(500,500);
  135.     glutInitWindowPosition(10,10);
  136.     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  137.  
  138.     glutCreateWindow("task");
  139.  
  140.     glutReshapeFunc(resize);
  141.     glutDisplayFunc(display);
  142.     glutKeyboardFunc(key);
  143.     glutIdleFunc(idle);
  144.  
  145.     glClearColor(0,0,0,0);
  146.  
  147.     glutMainLoop();
  148.  
  149.     return EXIT_SUCCESS;
  150. }


PM Quote