游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2489|回复: 5

昨天帧率上不去的问题已解决,写个小小的总结,跟过帖

[复制链接]

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2004-10-20 11:29:00 | 显示全部楼层 |阅读模式
昨天发了个"为什么我的帧率就是上不去?"的贴,大家这么热情讨论和跟帖,真是很感谢..现在问题已经解决了,大致总结如下,希望对遇到类似问题的朋友有帮助

如果你的程序帧率上不去,请看看下面的几个问题你注意了没有

1.  如果是程序算法本来就很复杂,导致帧率下降的话,那没其他的办法了,只能优化算法或减少三角形数量

2.  是否用了多个光源。   光源对帧率有不少的影响,请斟酌使用

3.  是否使用了很多效果,特别是使用了显卡不支持的,需要软模拟的效果,这样会减少大量帧率

4.  Render() 调用位置不当

     一般的 Render() 调用都应该放在 CALLBACK MsgProc 里的 WM_PAINT 消息处理中,或者直接放到主消息循环里,除特殊要求外不需要也不要放到其他地方,否则有可能影响帧率

5. PresentationInterval 的设置

    D3DPRESENT_PARAMETERS 里的  PresentationInterval 除特殊情况外,要设置成  D3DPRESENT_INTERVAL_IMMEDIATE ,否则对帧率有一定的影响(但不会太大)

     stPresentParam.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

6. 最关键的是这个! CreateVertexBuffer

    创建顶点池时,顶点池数据的读写属性对帧率有巨大影响!!
    如果你只是想渲染池内数据,而不需要对池内数据作读操作时(大部分程序都不需要读池内数据的),请务必用 D3DUSAGE_WRITEONLY 标志建立池!
    如果真的是因为这个影响了你的帧率,那你改完后会发现帧率有质的飞跃。

    g_pd3ddevice->CreateVertexBuffer(三角形数*3*sizeof(CUSTOMVERTEX),D3DUSAGE_WRITEONLY,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pVB,NULL);


7. 另外,我觉得如果是纯渲染的话,渲染结构对帧率的影响不大,如下:

    不用灯光,用以下渲染结构(单个渲染)时:

    UINT n;
    for(n=0;n<三角形数;n++)
        {
              g_pd3ddevice->DrawPrimitive (D3DPT_TRIANGLELIST,n*3,1);
        }

        每帧 40000 个三角形时,帧率为 245 帧
        每帧 80000 个三角形时,帧率为 102 帧
        每帧 160000 个三角形时,帧率为 45 帧
        每帧 240000 个三角形时,帧率为 32 帧
        每帧 320000 个三角形时,帧率为 23 帧
        每帧 480000 个三角形时,帧率为 16 帧
        每帧 640000 个三角形时,帧率为 11 帧
        .
        .

    不用灯光,用以下渲染结构时:

        g_pd3ddevice->DrawPrimitive (D3DPT_TRIANGLELIST,0,三角形数);

        每帧 40000 个三角形时,帧率为 256 帧
        每帧 80000 个三角形时,帧率为 100 帧
        每帧 160000 个三角形时,帧率为 51 帧
        每帧 240000 个三角形时,帧率为 35 帧
        每帧 320000 个三角形时,帧率为 26 帧
        每帧 480000 个三角形时,帧率为 17 帧
        每帧 640000 个三角形时,帧率为 13 帧
        .
        .

    可得,单个渲染个群体渲染的帧率相差不大

    只是不知道有没有注意到,帧率和三角形数是成反比例的,这样好象挺合逻辑的,但我有一点想不通,为什么 40000 到 80000 时只增加了40000 个三角形,帧率就减了150几,而后面的 160000 到 640000 ,增加了480000 个,帧率才减了38左右?

    我暂时大概就想到这些了,也不知道对不对,大家有什么意见可以再讨论一下
    昨天最大的问题就是第6个那个CreateVertexBuffer的问题,现在已经可以了

9

主题

155

帖子

155

积分

注册会员

Rank: 2

积分
155
发表于 2004-10-20 12:24:00 | 显示全部楼层

Re:昨天帧率上不去的问题已解决,写个小小的总结,跟过

对于OpenGL适用吗?

18

主题

579

帖子

583

积分

高级会员

Rank: 4

积分
583
发表于 2004-10-20 13:01:00 | 显示全部楼层

Re:昨天帧率上不去的问题已解决,写个小小的总结,跟过

OpenGL当然。。。
不完全适用。
1234还是可以的

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2004-10-20 19:15:00 | 显示全部楼层

Re:昨天帧率上不去的问题已解决,写个小小的总结,跟过

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2004-10-20 23:30:00 | 显示全部楼层

Re:昨天帧率上不去的问题已解决,写个小小的总结,跟过

那个,不会是驱动加进了优化吧……

37

主题

587

帖子

587

积分

高级会员

Rank: 4

积分
587
发表于 2004-10-21 10:02:00 | 显示全部楼层

Re:昨天帧率上不去的问题已解决,写个小小的总结,跟过

把Render()     放在WM_PAINT里,是不是会"很"影响运行速度啊 ???
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-22 21:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表