c - Opengl 形状未在回调函数中绘制

标签 c opengl graphics drawing

在我的opengl程序中,我想让屏幕在用户按下某个键时变成红色。在我的 my_keyboard 函数中,我有以下内容:

void my_keyboard( unsigned char key, int x, int y ) {
    int feedback_code=0;
    if (key == 49) {
        feedback_code=1;
    }
    if (feedback_code==1) {
        flash_screen();
    }

我的flash_screen方法如下:

void screen_flash() {
    float mat[16];
    glGetFloatv(GL_MODELVIEW_MATRIX,mat);

    glColor3f(1.0f,0.0f,0.0f);

    glBegin(GL_POLYGON);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.0f, 640.0f);
    glVertex2f(888.0f, 640.f);
    glVertex2f(888.0f, 0.0f);
    glEnd();
}

通过 glGetFloatv 调用,我知道我的变换矩阵回到了它应该在的左下角,即点 (0,0)。所以绘制函数应该绘制一个 888x640px 的红色正方形,即我的窗口的大小。然而,当我运行程序并按“1”键时,我没有得到形状!我使用了断点并确定 GlBegin-GlEnd 语句确实运行,但它们似乎没有产生任何结果。

我拥有的唯一其他形状是在主显示函数中完成的,在 main_loop 开始之前调用。

我做错了什么?

最佳答案

这是新手常见的错误。因此,一般规则如下:切勿从事件处理程序进行 OpenGL 绘图调用。从来没有!

当您希望屏幕上发生某些内容以响应输入事件时,请设置一些标志变量,并发出重绘信号。然后在绘图函数中根据信号进行绘制。

关于c - Opengl 形状未在回调函数中绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25944013/

相关文章:

c - 从C中的文件中逐行读取

c - 在 if 语句中使用 scanf

c - 这个机器代码在 C 中看起来像什么?

math - 多边形数学

c - 从 Go 代码修改 C void* 字节数组

opengl - 为什么剪刀测试要落后于片段操作?

opengl - 如何将递归数据结构发送到 OpenGL 着色器?

c++ - 如何使用着色器制作复古/ NEON /发光效果?

java - 鼠标绘图程序Java

opencv - 如何检测视频的滚动速度/如何检测图像的差异