如何在处理过程中更新 OpenGL 中的显示?

Posted

技术标签:

【中文标题】如何在处理过程中更新 OpenGL 中的显示?【英文标题】:How to update display in OpenGL during processing? 【发布时间】:2011-04-01 04:14:33 【问题描述】:

自从我上次使用 OpenGL 已经一年多了,所以我对这个话题很生疏。

我有一张图像,我正在对其进行一些处理,具体来说是颜色聚类,我想在每次循环迭代后更新图像,这样我就可以看到发生的变化,而不是在处理结束时看到完成。

这是目前正在发生的事情。显示原始图像,从键盘回调函数执行颜色聚类函数,处理图像并在程序控制离开颜色聚类函数时显示更新的图像。

我尝试在每次聚类算法迭代后调用 glutPostRedisplay(),并尝试在其中使用带有 glutPostRedisplay() 的 glutIdleFunc 回调。在这两种情况下,它都不会调用显示回调,直到图像完成处理。

如何在处理图像时让它更新图像(即调用显示回调)?

【问题讨论】:

【参考方案1】:

为了解决这个问题,我在每次迭代结束时明确调用了我的显示回调函数,而不是让 glut 决定何时调用显示回调的最佳时间。在伪代码中,解决方案如下所示。

colourClustering()

    loop
    
        image processing code
    
    display()  // Previously I tried using glutPostRedisplay() here.


...

display()

    drawing code
    glutSwapBuffers()


...

main()

    ....
    glutDisplayFunc(display);
    ....

但是,这感觉像是一种变通方法,而不是真正的解决方案。

【讨论】:

【参考方案2】:

您需要确保已绘制最新版本的图像(使用它来纹理完整视口四边形似乎是最简单的方法),然后添加对 glutSwapBuffers() 的调用(或等效的,如果不是 double-缓冲)在您的主 GLUT 循环中。

【讨论】:

【参考方案3】:

我知道它的老问题,但调用 glFinish();让它立即出现在我面前。

【讨论】:

以上是关于如何在处理过程中更新 OpenGL 中的显示?的主要内容,如果未能解决你的问题,请参考以下文章

控制台菜单更新 OpenGL 窗口

如何频繁更新顶点缓冲区数据(每帧)opengl [重复]

如何在 C++ 中的 OpenGL 中的矩形上显示文本?

不断更新OpenGL窗口

使用 OpenGL 进行正交投影以及如何实现相机或物体在空间中的移动

如何使用 Opengl 库从文本文件中显示 3D 点