#include<iostream>#include<Windows.h>#include"osgViewer/Viewer"//視圖管理#include"osgDB/ReadFile"//osgDB用來模型的讀寫#include"osgGA/GUIEventAdapter"//osgGA主要是管理事件,也可以控制操作器,他是操作器的一個(gè)大虛類,管理外設(shè)#include<osgViewer/ViewerEventHandlers>#include<osgGA/TrackballManipulator>//模擬一個(gè)事件類,響應(yīng)單擊hint main(){ osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer; osg::ref_ptr<osg::Node> node = new osg::Node; //申請(qǐng)一個(gè)定時(shí)器類 osg::Timer*timer = new osg::Timer;//timer不支持超級(jí)指針 //得到一個(gè)tick值為多少second(值很小) std::cout << timer->getSecondsPerTick() << std::endl; osg::Timer_t start_frame_time = 0;//開始時(shí)間 osg::Timer_t end_frame_timer = 0;//結(jié)束時(shí)間 //控制幀速使用的睡眠時(shí)間 float sleep_time = 0.0; float last_sleep = 0.000001; //每幀控制法 float per_str_time = 0.0;//一幀的開始時(shí)間 float per_end_time = 0.0;//一幀的結(jié)束時(shí)間 //計(jì)算幀速 int counts = 0; //讀取模型 node = osgDB::readNodeFile("glider.osg"); viewer->setSceneData(node.get()); //加操作器 viewer->setCameraManipulator(new osgGA::TrackballManipulator()); //return viewer->run();//顯示信息文字是時(shí)候是在這個(gè)時(shí)候 while (!viewer->done())//加了操作器才能使用done控制viewer { per_str_time = timer->tick();//將當(dāng)前的tick值賦值給一幀開始的時(shí)間 if (counts == 0) { start_frame_time = timer->tick();//將當(dāng)前的tick值賦值給為了計(jì)算幀速的開始時(shí)間 } counts++;//計(jì)數(shù)器+1 viewer->frame(); per_end_time = timer->tick();//一幀結(jié)束,將當(dāng)前的tick值賦值給一幀的結(jié)束時(shí)間 sleep_time = 1.0 / 35.0 - (timer->delta_s(per_str_time, per_end_time));//為了把幀速控制到35,將需要sleep的時(shí)間算出來 if (sleep_time<0) { //當(dāng)sleep小于0的時(shí)候,也就是不需要sleep時(shí),也讓程序小睡一會(huì),睡個(gè)八分飽,為了解決幀速猛增的問題 sleep_time = last_sleep*0.8; } last_sleep = sleep_time; OpenThreads::Thread::microSleep(sleep_time * 1000000);//microSleep方法的參數(shù)為百萬分之一秒,所以一百萬為1s if (counts == 3)//三幀一計(jì)算,可以使數(shù)據(jù)更穩(wěn)定 { //到了三幀,counts置為0,獲取當(dāng)前的tick值給結(jié)束時(shí)間 counts = 0; end_frame_timer = timer->tick(); std::cout << "當(dāng)前幀速為: " << 3 / (timer->delta_s(start_frame_time, end_frame_timer)) << std::endl;//計(jì)算 } } return 0;}這只是在學(xué)識(shí)OSG入門的一個(gè)開端,寫的不好,但希望有用。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注