run迴圈中
while(!viewer->done())
幀數=1/一幀的時間
float start_time=0.0;
float end_time=0.0;
while(!viewer->done())
count++:
frame();
if(count==3)
count++:
openthreads::thread::microsleep(sleep_time*1000000);
frame();
//控制幀數10,每幀0.1
if(count==3)
}}
出現的問題:當實際時間比預期時間長,sleep為負值,導致沒有睡眠,三幀時間短,3/很小的數,最後結果很大;
將sleep_time適當分割,此處用last_time,記錄以前的睡眠時間,適當減小,設為下一幀的睡眠時間,防止睡過頭。
float start_time=0.0;
float end_time=0.0;
float sleep_time=0.0;
float last_time=0.0;
int count=0;
while(!viewer->done())
count++:
openthreads::thread::microsleep(sleep_time*1000000);
last_time=sleep_time;
frame();
//控制幀數10,每幀0.1
if(count==3)
}}
將sleep_time適當分割,此處用last_time,記錄以前的睡眠時間,適當減小,設為下一幀的睡眠時間,防止睡過頭,對每幀進行睡眠。
float start_time=0.0;
float end_time=0.0;
float per_str_time =0.0;
float per_end_time =0.0;
float sleep_time=0.0;
float last_time=0.0;
int count=0;
while (!viewer->done())
count++;
viewer->frame();
per_end_time = timer->tick();
sleep_time = 0.1 - (timer->delta_s(per_str_time, per_end_time));
if (sleep_time<0)
last_sleep = sleep_time;
openthreads::thread::microsleep(sleep_time*1000000);
if (count == 3)
osg自學筆記5 《最長的一幀》第12日
osg自學筆記4 最長的一幀 第12日 當前位置 osgdb databasepager.cpp osgdb databasepager databasethread run 函式 那麼,我們就得到了乙個也許可行的資料流圖,如下所示 當前位置 osgdb databasepager.cpp 第 45...
資料結構 第4講 單鏈表
資料結構 第4講 單鏈表 結點結構體的定義 定義了結點之後,我們就可以把若干個結點連線在一起,形成乙個鍊錶 是不是像乙個鐵鍊子,一環扣一環的連在一起?不管這個鐵鍊子有多長,只要我們找到它的頭,就可以拉起整個鐵鍊子,因此我們給這個鍊錶設定乙個頭指標,這個鍊錶中的每個結點都可以找到了。有時候為了操作方便...
Python 基礎第4講 運算子
x 1 2 x hello world 字串相加是拼接x 6 2 x hello world 報錯 字串不能相減x 6 2 x 50 x x 6 2 x 3.0x 6 2 x 3x 7 2 x 1x 2 3x 25 0.5x 3 x x 3 x 3 x x 3 x 3 x x 3 x 3 x x 3...