OSG控制帧率的方法

转载 2016年06月02日 09:53:26

 osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
 osg::ref_ptr<osg::Node> node;
   
 //申请一个定时器
 osg::Timer* timer = new osg::Timer;
 osg::Timer_t start_frame_time = 0;
 osg::Timer_t end_frame_time = 0;
    float start_time;
 float end_time;
 //控制帧率使用的睡眠时间
 float sleep_time = 0.0;
 float last_sleep_time = 0.0;
 //每帧的实际使用时间
 float current_time = 0.0;
 //每帧控制法
 //float per_start_time = 0.0;
 //float per_end_time = 0.0;
 //计算帧率
 int counts = 0;
 //得到一个tick值为多少second
 std::cout << timer->getSecondsPerTick()<<std::endl;
    //start_time = timer->tick();
 start_time = viewer->elapsedTime();
 timer->setStartTick();
 node = osgDB::readNodeFile("glider.osg");
 std::cout<<"方法一:读取模型的时间为:"<<timer->time_s()<<std::endl;
 //end_time = timer->tick();
 end_time = viewer->elapsedTime();
 std::cout<<"方法二:读取模型的时间为:"<<end_time - start_time<<std::endl;
 //添加帮助事件
 viewer->addEventHandler(new PrintName);
 viewer->addEventHandler(new osgViewer::HelpHandler);
 viewer->addEventHandler(new osgViewer::StatsHandler);
 viewer->addEventHandler(new osgViewer::WindowSizeHandler);
 viewer->addEventHandler(new osgViewer::ScreenCaptureHandler);
 viewer->setSceneData(node);

 viewer->setCameraManipulator(new osgGA::TrackballManipulator());
 while(!viewer->done())
 {
  //per_start_time = timer->tick();
  if(counts == 0)
  {
   start_frame_time = timer->tick();
  }
  counts++;
  
  viewer->frame();
        //per_end_time = timer->tick();
  //sleep_time =   1/35.0 - timer->delta_s(per_start_time, per_end_time);
  if(sleep_time < 0)
  {
   sleep_time = 0.0;
  }
  OpenThreads::Thread::microSleep(sleep_time*1000000);
  //last_sleep_time = sleep_time;
  if(counts == 3)
  {
   //限制帧率为35
   counts = 0;
   end_frame_time = timer->tick();
   std::cout<<"当前帧速为: " << 3/timer->delta_s(start_frame_time, end_frame_time)<<std::endl;
   
   sleep_time =   sleep_time + 1.0/35.0 - timer->delta_s(start_frame_time, end_frame_time)/3;
   if(sleep_time < 0)
    sleep_time = 0;     
  }

转载地址:http://blog.sina.com.cn/s/blog_48ed03c801018blt.html

DirectX控制帧率方法

大家都知道,在游戏制作里面,控制帧率是一件很重要的事情,那么我们在DirectX里面又是怎样来控制游戏的帧率呢?其实有两个方法可以实现:一、控制窗口刷新率在新建一个Direct3DDevice的时候我...

帧率(FPS)计算的六种方法总结

帧率(FPS)计算是游戏编程中常见的一个话题。大体来说,总共有如下六种方法:固定时间帧数法帧率计算的公式为:fps = frameNum / elapsedTime;如果记录固定时间内的帧数,就可以计...

Unity 显示帧率的方法

方法一 public class DeltaFPS { private float updateInterval = 0.5f;//更新周期 private float accum; p...

pygame库写游戏——入门<8>——动画和帧率

理解帧率 FPS(Frame Per Second),一般电视画面是24FPS,30FPS基本可提供流畅的体验,60FPS是LCD常用的刷新率;而绝大多数人无法分辨70FPS以上的画面。直线运动 ...

Fraps_测试工具_测试帧率

  • 2017年11月08日 14:31
  • 2.08MB
  • 下载

mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系

我们先来看一个公式:Mipiclock = [ (width+hsync+hfp+hbp) x (height+vsync+vfp+vbp) ] x(bus_width) x fps/ (lane...
  • c_L_j_
  • c_L_j_
  • 2017年12月08日 15:23
  • 29

fraps帧率测试软件

  • 2012年10月23日 20:19
  • 2.2MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSG控制帧率的方法
举报原因:
原因补充:

(最多只允许输入30个字)