3

我在我的窗户上用openGL画了一张照片。现在每当我在窗户上按住鼠标按钮并移动它时,我的图片总是会失真。我不知道openGL中有什么功能可以帮助我在移动窗口时重绘图片。有人可以帮忙吗?

我试过了,但似乎不起作用:

void myDisplay()
{
   .....
}

void reshape(int x, int y)
{
   glutPostRedisplay();
}

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutReshapeFunc(reshape);
}
4

3 回答 3

3

第一步(通常也是唯一的)必要步骤是停止使用 glut。glut 主要面向生成静态显示,因此它会尝试累积更改,然后仅在状态再次“稳定”时重绘,例如当您完成调整窗口大小时。这曾经是有道理的,但现在大部分都没有了。

鉴于 glut 上次更新已经过去了大约 10 年,过时的设计目标也就不足为奇了。这并没有改变它经过仔细编写以防止发生您想要的事情的事实。如果您愿意,您可能会重写它以更好地满足您的期望,但是使用其他旨在做您想做的事情(或至少更接近您想要做的事情)的东西几乎肯定会简单得多。

于 2010-03-21T13:56:28.683 回答
2

添加 glutIdleFunc 函数

int main()
{
   .....
   glutDisplayFunc(myDisplay);
   glutIdleFunc(myDisplay);
   glutReshapeFunc(reshape);
}
于 2010-11-03T16:58:29.467 回答
0

对我有用的解决方案是在 WM_MOUSEMOVE 上调用 MoveWindow 后跳过 InvalidateRect/RedrawWindow 函数的执行(我没有使用 glut)。因为通常在所有鼠标/键盘事件之后执行 InvalidateRect(wnd,0,0) 是有意义的,但是在 MoveWindow 之后调用它会导致窗口内容“落后”拖动。

于 2011-03-24T04:30:36.313 回答