// 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...