19 osg中控制幀速例項

2021-07-09 04:50:53 字數 2719 閱讀 1989

// example1.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include #include #include #include using namespace std;

class testhandler:public osgga::guieventhandler };

int _tmain(int argc, _tchar* argv)

counts++;

viewer->frame();

//方法二

per_end_time=timer->tick();

表示10幀每秒鐘

//sleep_time=0.1-timer->delta_s(per_str_time,per_end_time);

/*控制幀速的公式為:每幀睡眠的時間=期望每幀繪製的時間-實際繪製的時間

假如:幀速為x,那麼每幀繪製的時間為:1.0/x(秒),實際繪製的的時間為:t

那麼需要睡眠的時間=1.0/x-t

*///delta_s是計算per_str_time,per_end_time之間的差值,就是per_end_time-per_str_time

sleep_time=1.0/35.0-timer->delta_s(per_str_time,per_end_time);

//sleep_time是得到每幀

//如果sleep_time的值小於0,則說明實際繪製的時間大於期望的時間

//因此此時就不需要再睡眠了,如果在繼續睡眠,則效率會更差

if (sleep_time<0)

openthreads::thread::microsleep(sleep_time*1000000);

if (counts==3)

}} return 0;

}

其中osglib.h的內容為:

#ifdef _debug

#pragma comment(lib,"osganimationd.lib")

#pragma comment(lib,"osgterraind.lib")

#pragma comment(lib,"osgqtd.lib")

#pragma comment(lib,"osgparticled.lib")

#pragma comment(lib,"osgpresentationd.lib")

#pragma comment(lib,"osgshadowd.lib")

#pragma comment(lib,"osgsimd.lib")

#pragma comment(lib,"osgvolumed.lib")

#pragma comment(lib,"osgmanipulatord.lib")

#pragma comment(lib,"osgfxd.lib")

#pragma comment(lib,"osgwidgetd.lib")

#pragma comment(lib,"osgviewerd.lib")

#pragma comment(lib,"osgtextd.lib")

#pragma comment(lib,"osggad.lib")

#pragma comment(lib,"osgdbd.lib")

#pragma comment(lib,"osgutild.lib")

#pragma comment(lib,"osgd.lib")

#pragma comment(lib,"openthreadsd.lib")

#else

#pragma comment(lib,"osganimation.lib")

#pragma comment(lib,"osgterrain.lib")

#pragma comment(lib,"osgqt.lib")

#pragma comment(lib,"osgparticle.lib")

#pragma comment(lib,"osgpresentation.lib")

#pragma comment(lib,"osgshadow.lib")

#pragma comment(lib,"osgsim.lib")

#pragma comment(lib,"osgvolume.lib")

#pragma comment(lib,"osgmanipulator.lib")

#pragma comment(lib,"osgfx.lib")

#pragma comment(lib,"osgwidget.lib")

#pragma comment(lib,"osgviewer.lib")

#pragma comment(lib,"osgtext.lib")

#pragma comment(lib,"osgga.lib")

#pragma comment(lib,"osgdb.lib")

#pragma comment(lib,"osgutil.lib")

#pragma comment(lib,"osg.lib")

#pragma comment(lib,"openthreads.lib")

#endif

執行效果為:

OSG學習筆記19 再看pick點選物體

之前一直使用的pick方法就是將第乙個點選到的節點儲存下來,如果場景中只有乙個物體,當然是沒有問題的。當場景中出現多個物體,並且每個物體設定了標籤,是可以被修改還是不能被修改,當兩個物體重合的時候就不能得到正確的結果。正確的做法是 用迭代器遍歷所有獲取到的節點並再遍歷nodepath,找到需要的節點...

《OSG3 4 0》Part2 OSG中的多執行緒

osg中的多執行緒 osg中的多執行緒是通過openthreads實現的。主要有七大類 thread 預設建構函式 static int yieldcurrentthread 要求當前執行緒出讓cpu控制權,交給其他正在等待的執行緒 int start 啟動執行緒。此時將自動開始執行執行緒的run ...

OSG中圓錐的使用

以前寫的一些測試程式,整理一下,看什麼時候需要用的時候能把功能盡快新增到工程中。圓錐的使用,包括圓錐大小的定義,圓錐的顏色修改,圓錐的透明效果,圓錐的線框模型,圓錐的旋轉,圓錐的中心點。如下 pragma comment lib,osg.lib pragma comment lib,osgdb.li...