国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

OSG控制幀速的小程序

2019-11-08 20:14:45
字體:
供稿:網(wǎng)友
只要能超過大概35幀就能欺騙人眼,但大多數(shù)的設(shè)備都大于35幀,60幀是很正常的數(shù)值,以下小程序就可以將幀速控制到35幀左右
#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è)開端,寫的不好,但希望有用。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 天台县| 察隅县| 工布江达县| 东海县| 苏尼特右旗| 渝中区| 广水市| 舞阳县| 龙南县| 大名县| 和平区| 阿图什市| 德州市| 台北县| 宿州市| 贵阳市| 凉山| 库尔勒市| 建宁县| 天柱县| 仙桃市| 山东省| 景洪市| 册亨县| 永州市| 怀柔区| 文昌市| 金门县| 呼和浩特市| 淳安县| 扎囊县| 平南县| 盐城市| 达州市| 辉县市| 黑水县| 方山县| 常州市| 读书| 南投市| 沙洋县|