gpt4 book ai didi

opengl - 当调用 glutPostRedisplay 时,如何强制我的 GL 应用程序中的背景颜色立即更改?

转载 作者:行者123 更新时间:2023-12-02 05:29:00 25 4
gpt4 key购买 nike

我有一个简单的窗口,其背景颜色是在带有一些全局变量的主循环中设置的:

顶部的全局值:

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) 。又一次,失败了。

如何在按键按下后强制改变颜色?也许主要或其他地方的订购电话导致了问题?嗯……

最佳答案

OpenGL 是一个状态机。当调用 glClear 时,它使用之前通过 glClearColor、glClearDepth、glClearStencil 设置的值。所以解决方案是将 glClearColor 调用放在显示中的 glClear 调用之前。

关于opengl - 当调用 glutPostRedisplay 时,如何强制我的 GL 应用程序中的背景颜色立即更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12665986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com