ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

osg获取帧率

2022-03-19 17:33:17  阅读:337  来源: 互联网

标签:addEventHandler viewer Util 获取 osgEarth new include osg


#include<Windows.h>
#include<osgViewer/Viewer>
#include<osgDB/ReadFile>
#include<osgViewer/ViewerEventHandlers>
#include<osgGA/StateSetManipulator>
#include <osgEarthUtil/EarthManipulator>
#include <osgEarthUtil/ExampleResources>


class GetFrameRate :public osgGA::GUIEventHandler
{
public:
	GetFrameRate(osgEarth::Util::LabelControl* fpsLabelContral):fpsLabel(fpsLabelContral)
	{
		curFrameNum = 0;
		curTime = 0;
		nextFrameNum = 0;
		nextTime = 0;
		fps = 0;
	}

	bool handle(const osgGA::GUIEventAdapter&ea, osgGA::GUIActionAdapter&aa)
	{
		osgViewer::Viewer *viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
		//获取帧率
		osg::FrameStamp* FS = viewer->getViewerFrameStamp();
		curFrameNum = FS->getFrameNumber();
		curTime = FS->getSimulationTime();
		if ((curTime - nextTime)<=0.005)
		{
		}
		else
		{ 
			fps = 1 / ((curTime - nextTime)); 
			char wsrc[512];
			sprintf(wsrc, "%.2f", fps);
			fpsLabel->setText(wsrc);
			std::cout << fps << std::endl;
		}

		nextFrameNum = FS->getFrameNumber();
		nextTime = FS->getSimulationTime();
		return false;
	}
public:
	double curFrameNum, curTime, nextFrameNum, nextTime;
	double fps;
	osgEarth::Util::LabelControl* fpsLabel;
};




int main()
{
	osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer;

	//添加状态事件,可以相应键盘和鼠标事件,响应L T B W
	viewer->addEventHandler(new osgGA::StateSetManipulator(viewer->getCamera()->getOrCreateStateSet()));
	//窗口大小变化,响应F
	viewer->addEventHandler(new osgViewer::WindowSizeHandler);
	//添加路径记录 Z
	viewer->addEventHandler(new osgViewer::RecordCameraPathHandler);
	//帮助文档显示H
	viewer->addEventHandler(new osgViewer::HelpHandler);
	//截屏 C
	viewer->addEventHandler(new osgViewer::ScreenCaptureHandler);
	//添加一些常用状态设置,响应S
	viewer->addEventHandler(new osgViewer::StatsHandler);


	osg::ref_ptr<osg::Group>root = new osg::Group;
	root->addChild(osgDB::readNodeFile("cow.osg"));
	viewer->setSceneData(root.get());

	//contralLable显示信息
	osgEarth::Util::Grid* grid = new osgEarth::Util::Grid();
	//设置几个Label文字控件显示在场景中
	grid->setControl(1, 1, new osgEarth::Util::LabelControl("FPS:  "));
	osgEarth::Util::LabelControl* fpsLabelContral = grid->setControl(2, 1, new osgEarth::Util::LabelControl("60.0"));
	grid->setPosition(0, 50);

	//控件绘制容器
	osgEarth::Util::ControlCanvas* fpsCanvas = new osgEarth::Util::ControlCanvas();
	//将要显示的控件加入到root组节点中去
	root->addChild(fpsCanvas);
	fpsCanvas->addControl(grid);
	fpsCanvas->setNodeMask(1);


	//获取帧率
	viewer->addEventHandler(new GetFrameRate(fpsLabelContral));

	viewer->run();
	return 0;
}

标签:addEventHandler,viewer,Util,获取,osgEarth,new,include,osg
来源: https://blog.csdn.net/ljjjjjjjjjjj/article/details/123598736

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有