相对于 3D 应用程序中的 Windows 消息循环的计时错误

Wrong Timing relative to Windows Message Loop in 3D appli?

本文关键字:循环 错误 消息 Windows 3D 应用程序 相对于      更新时间:2023-10-16

我有一个Pb,可能在Windows消息循环方面有时序,我认为(?

在为 Windows 操作在 (OpenGL + C++) 下绘制的 3D 场景时,我希望它响应 WM_ LBUTTONDOWN 用户事件,连续更改相机位置从 A 点到 B 点(但具有相同的 lookAt 点)。我还想要该移动的~2秒持续时间:

在用于 LBUTTONDOWN 消息WM_ OnLButtonDown() 处理程序中,我输入了一个 100 次迭代循环,如下所示:

{ m_camera.setEyePos(...#i...

SendMessage(m_hWnd, WM_PAINT,0,0);}

在所需的摄像机位置结束。

但是我的场景在 99 种中间状态下根本没有重绘: 它只是在最终位置重新绘制!(但以正确的方式) 它直接从最初的视角跳到最终的视角!(但按照预期需要 2 秒才能完成。

怎么了?你能帮忙吗?谢谢。

附言对不起我的英语(我是法国人.和Windows编程的初学者...

这种方法存在问题。如果您在循环中迭代 100 次,则您没有处理 Windows 消息。因此,在离开循环之前,您不会处理WM_PAINT。然后是WM_PAINT有一个与之关联的剪辑区域,只有操作系统知道,因此自己发送消息永远不会有效。相反,调用 InvalidateRect 以请求操作系统生成WM_PAINT。您应该从计时器或游戏循环执行此操作,以便继续处理消息。