glClearColor
không thực hiện bất kỳ thao tác xóa nào - nó chỉ đặt màu sẽ là khi bạn thực sự rõ ràng. Để tự xóa, bạn cần gọi số glClear
với (ít nhất) COLOR_BUFFER_BIT
.
Chỉnh sửa: đã khá lâu kể từ khi tôi sử dụng glut, vì vậy chi tiết này có thể sai, nhưng nếu bộ nhớ phục vụ, để thay đổi màu màn hình để phản hồi nhấn phím trên bàn phím, bạn sẽ làm điều gì đó như thế này:
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();
}
Về cơ bản, bạn thực hiện tất cả bản vẽ theo bất kỳ chức năng nào bạn chuyển đến glutDisplayFunc
. Hầu như bất cứ điều gì khác chỉ thay đổi trạng thái, sau đó gọi PostRedisplayFunc();
để nói rõ rằng cửa sổ cần được vẽ lại. Cảnh báo: như tôi đã nói, nó đã được một thời gian kể từ khi tôi sử dụng glut và tôi đã không thử nghiệm mã này. Nó cho thấy cấu trúc chung của một chương trình glut với sự hồi tưởng tốt nhất của tôi, nhưng tôi không mong đợi nó hoạt động chính xác như vậy.
Nguồn
2010-05-24 16:39:35
Sau khi nhấn "nút nào"? – tafa
Vì 'glutMainLoop()' sẽ không bao giờ trả về cách bạn mong đợi nhận được câu lệnh 'system (" pause ")' và lệnh 'glClearColor' thứ hai? – Troubadour
@tafa: làm cách nào để thay đổi mã của tôi để xem hiệu ứng này? – lego69