我有一个简单的窗口,其背景颜色在主循环中设置,带有一些全局变量:
顶部的全球价值观:
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()
仅重新显示重新显示,所以我尝试直接在行中添加glFlush()
。这仍然不起作用,所以我尝试在那里调用glutDisplayFunc(display)
。再一次,不成功。
如何在按下琴键后强制改变颜色?也许主要或其他地方的订购电话引起了问题?嗯......
答案 0 :(得分:5)
OpenGL是一个状态机。当调用glClear时,它使用先前使用glClearColor,glClearDepth,glClearStencil设置的值。所以解决方案是在显示的glClear调用之前调用glClearColor。