我有一个加载对象文件的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的下一次迭代中重绘场景。我的问题是如何在下一次循环之前和函数返回之前重绘场景
答案 0 :(得分:0)
通过浏览glutPostRedisplay而不是直接绘图,你不会失去性能或看到生涩的渲染。 (或者,如果每微秒真的那么珍贵,为什么你开始使用GLUT?)
在某些系统上,无论如何都无法在显示功能之外绘制,因为GL上下文无效。
这也不是GLUT独有的。我熟悉的所有现代图形/ GUI工具包也要求你有一个由事件处理程序调用的指定显示函数,无论是WM_PAINT消息,NSView drawRect:还是其他。
如果您的程序没有顺利更新,则会出于其他原因。