Open GL - problema con programa sencillo

 
Vista:

problema con programa sencillo

Publicado por Jose (1 intervención) el 06/10/2006 16:17:56
Saludos. Estoy aprendiendo OPENGL y GLUT e hice el siguiente codigo que dibuja un triangulo en una ventana y modifica su color al presionar 'v': verde, 'a': azul o 'r': rojo. El problema es que los cambios solo hacen efecto cuando cambio el tama~no de la ventana, o cambio la ventana que esta activa y regreso a la ventana con del programa en OPENGL.

Como hago que los cambios tengan efecto de inmediato ?

De antemano gracias, aqui esta el codigo:

/*
* 'Hello World' de OpenGL
*/

#include <GL/glut.h>

double rojo = 1;
double verde = 1;
double azul = 1;

double i = 0.5; // variable para cambiar las proporciones del triangulo

void reshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
//glPushMatrix();
glLoadIdentity();
glColor3f(rojo,verde,azul); // color del triangulo

glBegin(GL_TRIANGLES);
glVertex3f(0-i,0-i,0);
glVertex3f(0+i,0-i,0);
glVertex3f(0,0+i,0);
glEnd();
//glPopMatrix();
glFlush();
glutSwapBuffers();

}

// Esta funcion cambia los colores y proporcion del triangulo
void teclado(unsigned char key, int x, int y) {

switch(key) {
case 114 :
rojo = 1; //rojo al presionar r
verde= 0;
azul = 0;
break;
case 118 :
rojo = 0; //verde al presionar v
verde= 1;
azul = 0;
break;
case 97 :
rojo = 0; //azul al presionar a
verde= 0;
azul = 1;
break;
case 49 :
i= i+0.25; // incrementa las proporciones del triangulo al presionar 1
break;
case 50 :
i= i-0.25; // decrementa las proporciones del triangulo al presionar 2

}
glutSwapBuffers();

}

void init()
{
glClearColor(0,0,0,0);
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 50);
glutInitWindowSize(500, 500);
glutCreateWindow("Hello OpenGL");
init();
glutDisplayFunc(display);
glutKeyboardFunc(teclado); // la parte del teclado
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con programa sencillo

Publicado por Marcial Rial (4 intervenciones) el 09/10/2006 18:36:34
Prueba quitando glutSwapBuffers() de la función teclado. Eso solo iria en la función display()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con programa sencillo

Publicado por carlos (2 intervenciones) el 03/09/2009 17:20:05
ehy nesecito un programa que contenga un triagulo que pueda cambiar d colores... y que tenga un boton opcional que cuando c oprima quede en pausa luego en reanudar y luego iniciar... porfavor...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con programa sencillo

Publicado por carlos (2 intervenciones) el 03/09/2009 17:20:16
ehy nesecito un programa que contenga un triagulo que pueda cambiar d colores... y que tenga un boton opcional que cuando c oprima quede en pausa luego en reanudar y luego iniciar... porfavor...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con programa sencillo

Publicado por Nekro (3 intervenciones) el 08/12/2006 07:31:27
Tu problema se puede solucionar con agregar una nueva función:

void Idle(){ glutPostRedisplay(); }

y agregando lo siguiente dentro de tu función main:
glutIdleFunc(Idle);

Lo que hace esto, es que mientras no se este realizando nada, se va a repintar la geometría que contenga tu display.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con programa sencillo

Publicado por Luis Armendariz (1 intervención) el 12/11/2008 06:47:10
al final de cada case antes del break escribe el glutPostRedisplay(); es para q se redibuje la esena y quita el glutSwapBuffers();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar