1

我有一个加载对象文件的 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() 只需设置一个标志,并且在主循环的下一次迭代中重新绘制场景。我的问题是如何在 while 的下一个循环之前和函数返回之前重绘场景

4

1 回答 1

0

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

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

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

如果您的程序没有顺利更新,那将是由于某些其他原因。

于 2013-05-28T02:28:50.700 回答