glClearColor
no hace ningún aclarado en sí mismo, simplemente establece cuál será el color cuando realmente se borre. Para hacer la limpieza en sí, debe llamar al glClear
con (al menos) COLOR_BUFFER_BIT
.
Editar: Ha pasado bastante tiempo desde que usé exceso, así que los detalles de esto podrían ser incorrectos, pero si la memoria sirve, para cambiar el color de la pantalla en respuesta a presionar una tecla en el teclado, harías algo de esta manera:
void keyboard (unsigned char key, int x, int y)
{
// we'll switch between red and blue when the user presses a key:
GLfloat colors[][3] = { { 0.0f, 0.0f, 1.0f}, {1.0f, 0.0f, 0.0f } };
static int back;
switch (key) {
case 27:
exit(0);
default:
back ^= 1;
glClearColor(colors[back][0], colors[back][1], colors[back][2], 1.0f);
glutPostRedisplay();
}
}
void draw() {
glClear(GL_COLOR_BUFFER_BIT);
// other drawing here...
}
int main() {
// glutInit, glutInitDisplayMode, etc.
glutDisplayFunc(draw);
glutKeyboardFunc(keyboard);
glutMainLoop();
}
Básicamente, haces todo su dibujo en función de lo que sea que pase a glutDisplayFunc
. Casi todo lo demás simplemente cambia el estado, luego llama al PostRedisplayFunc();
para indicar que hay que volver a dibujar la ventana. Advertencia: como dije, ha pasado un tiempo desde que usé exceso y no he probado este código. Muestra la estructura general de un programa de exceso a lo mejor de mi recuerdo, pero no esperes que funcione exactamente como está.
Después de presionar "¿qué botón"? – tafa
Dado que 'glutMainLoop()' nunca volverá ¿cómo esperas llegar a tu declaración 'system (" pause ")' y la segunda llamada 'glClearColor'? – Troubadour
@tafa: ¿cómo puedo cambiar mi código para ver este efecto? – lego69