相对于 3D 应用程序中的 Windows 消息循环的计时错误
Wrong Timing relative to Windows Message Loop in 3D appli?
我有一个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。您应该从计时器或游戏循环执行此操作,以便继续处理消息。
相关文章:
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 我在 c ++ 中有一个循环错误
- 无法发现嵌套的循环错误
- CPP 在读取结构数据时无限循环错误?
- 虽然循环错误:"Uninitialized local variable used"
- 如何修复关卡顺序遍历问题(二叉树)的无限循环错误
- 随机密码生成器的C++循环错误"以非零状态退出"
- <BadPtr> 循环错误
- 试图在C++中验证双精度有效输入的循环错误
- c++中的switchcase无限循环错误
- 文件IO循环错误
- for循环错误地输出指数
- 输入 Ctrl+Z 结束阅读单词将导致循环错误
- C++教授无法弄清楚的循环错误
- C++If循环错误
- 建议处理while循环错误
- 使用自动输入循环错误"auto must have an initializer"
- 输入数字时出现循环错误
- C++ "if"循环中的循环错误