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;
}
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


0