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.
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