Ogre中设置渲染性能参数

来源:互联网 发布:手机五线谱编辑软件 编辑:程序博客网 时间:2024/05/01 13:23

        先转载一部分关于Ogre中设置渲染性能参数的内容,然后叙述自己在设置过程中设置失效的问题。

        在ogre示例框架程序启动时,我们会看到一个配置窗口,在这个Rendering Setup配置窗口中,我们可以设置窗口启动大小、抗锯齿度、是否垂直同步、是否Gamma校正等。在Ogre::Root中有showConfigDialog方法来显示配置窗口,ogre会自动调会Root::restoreConfig来填充这个窗口中的参数。
       如果我们不想用ogre的配置窗口来设置参数怎么办呢? 我们一般不会在启动自己的游戏的时候使用ogre自带的配置窗口,这时就需要自己向ogre传递渲染参数了。
       我们只需要在调用Root的createRenderWindow函数时设置渲染参数就可以了。 此函数的最后一个参数是NameValuePairList类型(其实它是std::map<String,String>的重定义),包涵了ogre自带配置窗口中出现的所有参数!例:
    NameValuePairList params;
    params["externalWindowHandle"] = StringConverter::toString(hWnd);     // 手动创建的窗口句柄
    params["vsync"]                = “Yes”; // 开启垂直同步
    params["gamma"]              = “Yes”; // 开启Gamma校正
    params["FSAA"]                 = "2";    // 抗锯齿等级
    // 创建渲染窗口
    mOgreRenderWindow = mOgreRoot->createRenderWindow(
        "Ogre Window",                           // 窗口的名字
        800,                                             // 窗口的宽度(像素)
        600,                                             // 窗口的高度(像素)
       false,                                             // 是否全屏显示
        &params);                                    // 渲染性能参数

下面解释下这几个常用的渲染参数:

1.垂直同步(VSync): 如果设置成“Yes”表示开启,"No"表示关闭。开启此项设置后,窗口的刷新速率将会设置为当前屏幕的刷新速率(ogre在创建D3D设备时,会把D3DPRESENT_PARAMETERS结构体中的BackBufferCount设置为2(2个后台缓冲区)和PresentationInterval设置为D3DPRESENT_INTERVAL_ONE(表示当屏幕刷新一次时前后台数据进行交换))。如不开启此选项,则当后台图形绘制完成后立即进行前后台数据交换。 一般来说,我们会觉得帧速越大越好,其实不然! 我们一般用float型变量来计时,在帧速太大时,由于float型变量的误差会导致时间记录上的不准确。 这时开启垂直同步就是一个很好的解决方法了,因为在帧速到达60-70时人的肉眼是感觉不到停顿的。曾经有人问如何在ogre中限制帧速,我也想到过用Sleep函数,但设置垂直同步的方法更有效,更简单!

2.伽玛校正(Gamma):这个参数这得从显示器成像说起了。使用CRT的电视机等显示器屏幕,由于对于输入信号的发光灰度,不是线性函数,而是指数函数,因此必需校正。这其实只是在校正显示器的显示亮度,因为我们指定的显示亮度是线性的。 就也就是为什么我们没有开启伽玛校正时,画面显示会比较暗的原因。

3.抗锯齿(FSAA):开启抗锯齿,会使图像更加圆滑,从而减少锯齿感。 这个参数一般设置为0、2、4、8...等,它表示抗锯齿类型(值越大,画面锯齿感越小)。在DX9中,这个数可以是0-16中的任意一个,根据显卡的不同而不同。当显卡不能支持我们指定的抗锯齿类型时,ogre会提示创建D3D设备失败,这时我们就需要在创建时对显卡的最大支持类型进行判断了。 还好,ogre已经帮我们做了,这将在下面提及。

4.视频模式(Video Mode):视频模式包括窗口大小和颜色位数。颜色位数现在一般为16位或32位,32位颜色下要比16位色彩更丰富一些,当然也更漂亮一些。ogre在启动时已经为我们检测了硬件,把设备能够支持的视频模式记录下来(配置框中“Video Mode”栏所列举的值,比如800X600@32-bit colour)。如果想在程序里面动态改变窗口的大小,可以用RenderWindow::setFullscreen函数和RenderWindow::resize函数。 这二个之间有区别,resize函数只能在窗口模式下使用,setFullscreen函数则没有限制;但setFullscreen在窗口模式下使用时会发生"意外"(ogre论坛上这么说的),所以最好是窗口下变化用resize,全屏下变化用setFullscreen。 不过在ogre1.6.2中已经把setFullscreen全屏变到窗口不正常的问题修改过了。二个函数最大的区别是:resize函数仅仅是把窗口大小变化了,而setFullscreen在变化窗口大小的同时还对D3D后备缓冲大小也修改过。所以用setFullscreen变化窗口大小后,图像不会变模糊。

       有些时候我们需要获取显卡设备是否支持某个参数的调节或最大支持值(比如抗锯齿),ogre同样为我们提供了接口来返回这些信息。RenderSystem::getConfigOptions方法会返回一个ConfigOptionMap类型的值,它里面就保存着当前显卡设备的支持信息。使用起来也很简单,下面以抗锯齿为例:
        Ogre::ConfigOptionMap optionMap = mOgreRoot->getRenderSystem()->getConfigOptions();
        Ogre::StringVector           fsaaVector = optionMap["Anti aliasing"].possibleValues; // 返回可能的值
这样fsaaVector 中就保存着当前显卡在抗锯齿类型上可能的取值,ogre自带的配置窗口也是这么做的。 遍历fsaaVector ,我们会发现有三种取值。1. None 这表示类型为0,就是不开启抗锯齿。 2.NonMaskable+x,这类表示抗锯齿类型为1。x表示此类型下的品质,当然品质值越高,效果也越好。 3.Level+x,这表示抗锯齿类型为x,x的取值一般为2、4、8、16(支持16的显卡我还没见过,好像GF9系的能支持到这个高度)。在D3D9中抗锯齿类型值是0-16,ogre会调用D3D中的CheckDeviceMultiSampleType方法去逐个检查显卡是否支持各种抗锯齿类型,但一般我们的电脑是支持0、1、2、4、8、16这几种,所以在ogre文档上的FSAA取值就是这几种。

        其它参数也可以根据optionMap中的possibleValues来获取值,比如optionMap["vsync"].possibleValues就存在"Yes"或"No"的不同取值。这样,我们就可以知道显卡的支持能力了。

===================================================================================

        设置失效的原因,不是程序本身,而是硬件是否支持;如果支持的话,而仍然存在设置的问题,则可能是设置的问题。我的显卡是GeForce GTX 460,在“3D 设置”中的“管理3D设置”中的“全局设置”下面的“平滑处理 — FXAA”设置为“开”,这样抗锯齿功能就打开了,默认是关闭的。

===================================================================================

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 保研夏令营被拒怎么办 小学生去英国游学怎么办签证 医生说我湿气重怎么办 喉咙痛有来医生感冒喉咙痛怎么办 暴马丁香叶子卷怎么办 房产权40年以后怎么办 面试回答不了考官的问题怎么办 轻伤事故对方要钱太多我怎么办 退休后有房子住公积金怎么办 江苏副高评过不聘怎么办 抗环瓜氨酸肽抗体高怎么办 脚被磨破了好痛怎么办 脚磨破皮肿了怎么办 脚磨破皮发炎了怎么办 3个月婴儿流口水怎么办 beats耳机被偷了怎么办 beats X耳机丢了怎么办 头戴耳机戴着热怎么办 长时间戴耳机耳朵疼怎么办 手表秒针走得声音很大怎么办 顾客总找老板剪头发怎么办 马来西亚国籍想去中国怎么办 有限元学位课挂了怎么办 五百丁简历导出后不一样怎么办 面试早到了1小时怎么办 头顶头发会越来越少怎么办 vr游戏过后想吐怎么办 win10电脑不能打汉字怎么办 手机看vr特别烫怎么办 苹果手机浏览器横屏怎么办 苹果笔记本浏览器没有了怎么办 剑与家园魔镜带错兵怎么办 橙子vr上下反了怎么办 我的恐龙手机不支持ar怎么办 被小人陷害又无计可施怎么办 蚂蚁借呗2万逾期怎么办 蚂蚁借呗还款金额受限怎么办 蚂蚁借呗不能借钱了怎么办 美柚手机号换了怎么办 美柚他他圈被禁言了怎么办? 被蝎子蜇了屁股怎么办