我有一个简单的窗口,其背景颜色在主循环中设置,并带有一些全局变量:
顶部的全局值:
static GLfloat redIntensity = 0.0; //values for background color
static GLfloat greenIntensity = 0.0;
static GLfloat blueIntensity = 0.0;
主要的:
int main(int argc, char** argv){
...
glutDisplayFunc(display);
...
glutKeyboardFunc(keyboard); //****
glutMainLoop();
return 0;
}
根据全局值实际设置颜色的显示:
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glClearColor(redIntensity, greenIntensity, blueIntensity, 0.0);
...
... //other stuff here is polygon drawn in middle of screen
glPopMatrix();
glutSwapBuffers();
}
在键盘功能中,我有一个 switch 语句,它应该根据按下的键来改变背景颜色,例如:
...
case 'm':
{
redIntensity = 0.5;
greenIntensity = 0.0;
blueIntensity = 0.5;
bgc = MAGENTA; //another global thing to keep track of current color for other reasons...
}
...
glutPostRedisplay();
不幸的是,通过glutPostRedisplay()
调用,背景颜色不会立即改变......用户必须单击其他位置或先按另一个键。我在其他地方读到glutPostRedisplay()
只有 QUEUES 重新显示,所以我尝试glFlush()
在之后直接添加该行。这仍然不起作用,所以我尝试在glutDisplayFunc(display)
那里直接跟注。再一次,失败。
按下键后如何强制更改颜色?也许 main 或其他地方的排序调用引起了问题?唔...