glClearColor
löscht sich nicht selbst - es stellt nur die Farbe ein, wenn Sie tatsächlich löschen. Um das Clearing selbst durchzuführen, müssen Sie glClear
mit (mindestens) COLOR_BUFFER_BIT
aufrufen.
Edit: Es ist schon eine Weile her, seit ich überschwemmt habe, so dass die Details falsch sein könnten, aber wenn Speicher dient, um die Bildschirmfarbe als Reaktion auf eine Taste auf der Tastatur zu ändern, würden Sie etwas tun dies wie:
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();
}
Grundsätzlich haben Sie alle Ihre Zeichnung in welcher Funktion, die Sie glutDisplayFunc
passieren. Fast alles andere ändert nur den Zustand und ruft dann PostRedisplayFunc();
an, um zu sagen, dass das Fenster neu gezeichnet werden muss. Warnung: Wie gesagt, es ist schon eine Weile her, seit ich das Überangebot benutzt habe und diesen Code nicht getestet habe. Es zeigt die allgemeine Struktur eines Überschwemmungsprogramms nach bestem Wissen meiner Erinnerung, aber erwarte nicht, dass es genau so funktioniert wie es ist.
Nach dem Drücken von "Was Knopf"? – tafa
Seit 'glutMainLoop()' wird nie zurückkommen, wie erwarten Sie zu Ihrer 'System (" pause ") Anweisung und dem zweiten' glClearColor' Aufruf zu kommen? – Troubadour
@tafa: Wie kann ich meinen Code ändern, um diesen Effekt zu sehen? – lego69