Oppure

Loading
31/03/14 10:46
derin86
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.

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
/* GLUT callback Handlers */
/*float RandomFloat(float min, float max)
{
    float r = (float)rand() / (float)RAND_MAX;
    return min + r * (3.8 + 2.7 );
}*/
static void resize(int width, int height)
{
    const float ar = (float) width / (float) height;
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity() ;
}
static void display(void)
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	unsigned int rgba = 0xFFFFFFFF; // white
    unsigned int rgba1 = 0x00000000; // black
	unsigned int rgba2 = 0x00EA00FF; //green
	unsigned int rgba3 = 0xFF0000FF; //red
	double i;

	for ( i = -2.7;i < 3.8;i+= 0.001)
{
	//rectangle
	glBegin(GL_QUADS);

	//rectangle white
	glColor4f(((rgba>>24)&0xff)/255.0f,
             ((rgba>>16)&0xff)/255.0f, 
             ((rgba>>8)&0xff)/255.0f,
             (rgba&0xff)/255.0f);

             glVertex3f(-3,-3,-10);
             glVertex3f(3,-3,-10);
             glVertex3f(3,4,-10); 
             glVertex3f(-3,4,-10);
    
	//rectangle black
    glColor4f(((rgba1>>24)&0xff)/255.0f,
             ((rgba1>>16)&0xff)/255.0f, 
             ((rgba1>>8)&0xff)/255.0f,
             (rgba1&0xff)/255.0f);

			 glVertex3f(-2.9,-2.9,-10);
             glVertex3f(2.9,-2.9,-10);
             glVertex3f(2.9,3.9,-10); 
             glVertex3f(-2.9,3.9,-10);
	
    //rectangle feedback(green/red)
			if (i<=1.5)
				{
    glColor4f(((rgba2>>24)&0xff)/255.0f,
             ((rgba2>>16)&0xff)/255.0f, 
             ((rgba2>>8)&0xff)/255.0f,
             (rgba1&0xff)/255.0f);

			 glVertex3f(-2.7,-2.7,-10);
             glVertex3f(2.7,-2.7,-10);
             glVertex3f(2.7,(i),-10); 
             glVertex3f(-2.7,(i),-10);
			 }
			else
				{
			 glColor4f(((rgba2>>24)&0xff)/255.0f,
             ((rgba2>>16)&0xff)/255.0f, 
             ((rgba2>>8)&0xff)/255.0f,
             (rgba2&0xff)/255.0f);

			 glVertex3f(-2.7,-2.7,-10);
             glVertex3f(2.7,-2.7,-10);
             glVertex3f(2.7,1.5,-10); 
             glVertex3f(-2.7,1.5,-10);

			 glColor4f(((rgba3>>24)&0xff)/255.0f,
             ((rgba3>>16)&0xff)/255.0f, 
             ((rgba3>>8)&0xff)/255.0f,
             (rgba2&0xff)/255.0f);

			 glVertex3f(-2.7,2,-10);
             glVertex3f(2.7,2,-10);
             glVertex3f(2.7,(i),-10); 
             glVertex3f(-2.7,(i),-10);
			  }

	//horizontal black bar
    glColor4f(((rgba>>24)&0xff)/255.0f,
             ((rgba>>16)&0xff)/255.0f, 
             ((rgba>>8)&0xff)/255.0f,
             (rgba&0xff)/255.0f);

			 glVertex3f(-3,1.5,-10);
             glVertex3f(3,1.5,-10);
             glVertex3f(3,2,-10); 
             glVertex3f(-3,2,-10);	 
		 
			 glEnd();
             glColor4f(1, 1, 1, 1);
             glutSwapBuffers();
			 glFlush();

}
}
static void key(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 27 :
        case 'q':
            exit(0);
            break;
    }
    //glutPostRedisplay();
}
 
static void idle(void)
{
    glutPostRedisplay();
}
 
/* Program entry point */

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
 
    glutCreateWindow("task");
 
    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glutIdleFunc(idle);
 
    glClearColor(0,0,0,0);
 
    glutMainLoop();
 
    return EXIT_SUCCESS;
}
  
aaa