如何在函数返回之前强制GLUT重绘场景?

时间:2013-05-27 08:41:59

标签: opengl glut

我有一个加载对象文件的OpenGL项目,在加载对象后我希望能够顺利地用键盘移动它,所以我写了这段代码来完成这项工作:

while (remains) {
    if (x_remains) {
        refPosition[0] += speed.x;
        if (refPosition[0] > nextPos[0]) {
            x_remains = false;
        }
    }
    if (y_remains) {
        refPosition[1] += speed.y;
        if (refPosition[1] > nextPos[1]) {
            y_remains = false;
        }
    }
    if (z_remains) {
        refPosition[2] += speed.z;
        if (refPosition[2] >= nextPos[2]) {
            z_remains = false;
        }
    }

    remains = x_remains || y_remains || z_remains;        
    glutPostRedisplay();
}

如你所见,我想在while中重新显示场景,但是当执行此操作时,glutpostredisplay()只会设置一个标志,并在mainloop的下一次迭代中重绘场景。我的问题是如何在下一次循环之前和函数返回之前重绘场景

1 个答案:

答案 0 :(得分:0)

通过浏览glutPostRedisplay而不是直接绘图,你不会失去性能或看到生涩的渲染。 (或者,如果每微秒真的那么珍贵,为什么你开始使用GLUT?)

在某些系统上,无论如何都无法在显示功能之外绘制,因为GL上下文无效。

这也不是GLUT独有的。我熟悉的所有现代图形/ GUI工具包也要求你有一个由事件处理程序调用的指定显示函数,无论是WM_PAINT消息,NSView drawRect:还是其他。

如果您的程序没有顺利更新,则会出于其他原因。