我在我的窗户上用openGL画了一张照片。现在每当我按住窗户上的鼠标按钮移动它,我的图片总是扭曲。我不知道openGL中的哪个函数可以帮助我在移动窗口时重绘图片。有人可以帮忙吗?
我试过这个但看起来不行:
void myDisplay()
{
.....
}
void reshape(int x, int y)
{
glutPostRedisplay();
}
int main()
{
.....
glutDisplayFunc(myDisplay);
glutReshapeFunc(reshape);
}
答案 0 :(得分:2)
第一个(通常也是唯一的)必要步骤是退出使用过剩。过剩主要是为了产生静态显示,因此它会尝试累积变化,然后仅在状态再次“稳定”时重绘,例如当您完成调整窗口大小时。这在某个时候是有道理的,但现在大部分时间都没有了。
鉴于自上次更新过剩以来已经过去10年左右,过时的设计目标并不令人意外。这并没有改变这样一个事实,即它是经过精心编写的,以防止你想要发生什么。如果你愿意的话,你可能会改写它以更好地满足你的期望,但是使用其他旨在做你想要的东西(或者至少更接近你想要的东西)几乎肯定会更简单一点。
答案 1 :(得分:2)
添加glutIdleFunc函数
int main()
{
.....
glutDisplayFunc(myDisplay);
glutIdleFunc(myDisplay);
glutReshapeFunc(reshape);
}
答案 2 :(得分:0)
对我有用的解决方案是在WM_MOUSEMOVE上调用MoveWindow之后跳过执行InvalidateRect / RedrawWindow函数(我没有使用过剩)。因为通常在所有鼠标/键盘事件之后执行InvalidateRect(wnd,0,0)是有意义的,但是在MoveWindow之后显然调用它会导致窗口内容“滞留”拖动。