下面是一个基于时间的渲染框架
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
//
Get last time
2 static float lastTime = ( float )timeGetTime();
3
4 while (msg.message != WM_QUIT)
5 {
6 if ( PeekMessage( & msg, NULL, 0U , 0U , PM_REMOVE) != 0 )
7 {
8 TranslateMessage ( & msg) ;
9 DispatchMessage ( & msg) ;
10 }
11 else // Render the game if there is no message to process
12 {
13 // Get current time
14 float currTime = ( float )timeGetTime();
15
16 // Calculate time elapsed
17 float timeDelta = (currTime - lastTime) * 0.001f ;
18
19 // Render
20 Render(timeDelta) ;
21
22 // Update last time to current time for next loop
23 lastTime = currTime;
24 }
25 }
26
2 static float lastTime = ( float )timeGetTime();
3
4 while (msg.message != WM_QUIT)
5 {
6 if ( PeekMessage( & msg, NULL, 0U , 0U , PM_REMOVE) != 0 )
7 {
8 TranslateMessage ( & msg) ;
9 DispatchMessage ( & msg) ;
10 }
11 else // Render the game if there is no message to process
12 {
13 // Get current time
14 float currTime = ( float )timeGetTime();
15
16 // Calculate time elapsed
17 float timeDelta = (currTime - lastTime) * 0.001f ;
18
19 // Render
20 Render(timeDelta) ;
21
22 // Update last time to current time for next loop
23 lastTime = currTime;
24 }
25 }
26
这样,在Render函数中就可以调用各种对象的渲染函数了,所有这些函数都有一个时间参数,用来求速度,加速度,位移等,比如粒子系统,摄像机,地形等等渲染