查看: 2185|回复: 2

请教osg帧速问题

[复制链接]

该用户从未签到

发表于 2011-3-17 19:23:30 | 显示全部楼层 |阅读模式
向大家请教个问题,OSG里面的帧速是根据什么确定的,为什么不是恒定的,两个机子里面就不一样,而且即使在同一个程序里,如果把模型切换到线或点显示的时候,帧速就慢下来了,请知道的同行告诉我是什么原因,不胜感谢!!

该用户从未签到

发表于 2011-3-17 22:15:25 | 显示全部楼层
帧数是个永恒的话题,所谓的一帧就是计算机从计算场景到渲染到屏幕上的一个过程。
计算和渲染都是需要时间的,在好的电脑上当然需要的时间就少了,相应的帧率就提高了。一般可以这样计算,定义5到10个变量,分别保存最近5-10帧所用的时间(就是从渲染循环里面获取当前系统时间,然后最近一次的减去上一帧获取的时间)。然后取这5-10个变量的平均值就是平均一帧所需要的时间s。然后1/s得到的就是所谓游戏里面的帧率了,一般60为表现优秀。
为何要取平均值,因为每次渲染的内容不一样(以前主要取决于三角形数量,现在三角形貌似不是什么大问题了),计算所有物体坐标、筛选、贴图、绘制纹理、渲染到像素所花的时间就不一样了。你可以试着运行osg的例子,然后旋转摄像机看着范围很大的场景以及直接看相天空,你可以看到帧率是不一样的。在我的电脑上最快可以达到900。
当然,有些时候我们不能让程序在性能好的电脑上运行太快。比如你有一个动画默认是1000帧,在你的电脑上正常,可是在好的和差的电脑上播放的时间不一样了那可不行。(比如avi电影也是基于帧数的,要是那样每部电影在不同的电脑上表现快慢都不一样也不行)所以要控制帧数。最简单的是在渲染循环里面判断上一帧花的时间是不是你需要的时间,如果比预计的要少很多,可以sleep一下。如果太久,就要跳过当前帧的渲染直接进入下一帧(这样子就会丢失一帧的画面,反映到游戏上就是瞬移了)。
总之有几种控制方式:一个是限定帧数,太快了就等或者干别的;太慢了就丢弃(瞬移)或者继续按部就班渲染(卡画面)。还有也可以设定定时器定时刷新,看你需要了。

该用户从未签到

发表于 2011-3-17 22:32:45 | 显示全部楼层
本帖最后由 rcyboom 于 2011-3-17 22:34 编辑

另外,现在的系统都是多任务同时并行,所以在计算机运行其他任务不同的情况下就算摄像机不动帧数也可能变化,最明显的就是你同时运行好几个osg程序试一下就知道了。因此也有了在玩大型3D游戏的情况下,关闭桌面图标,背景甚至文件浏览器等尽量减少运行其他不必要的程序也是一个措施,为的就是少让其他程序占用cpu、内存和显存了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表