游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2378|回复: 6

DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网游也

[复制链接]

15

主题

40

帖子

40

积分

注册会员

Rank: 2

积分
40
发表于 2009-9-1 11:19:00 | 显示全部楼层 |阅读模式
DX框架 什么也不渲染 为什么FPS最高只有60多,玩剑3 AION 大型网游也能到30~50
渲染1万个左右顶点就下降到30多了
我用的PeekMessage消息循环,是消息循环的问题吗?
如果不是,AION里的人物一个就1万个面,它是怎么做到的

另外想确认下,现在3D游戏中的静态场景是一下子全导入的吧?不是单一模型一个一个导入的哦?

22

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
QQ
发表于 2009-9-1 13:23:00 | 显示全部楼层

Re:DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网

DX创建设备的时候如果不把PresentationInterval设成D3DPRESENT_INTERVAL_IMMEDIATE的话,默认情况下下一次渲染会等待屏幕刷新完毕后再进行,也就是如果你的屏幕刷新率是60HZ,帧率会自动控制在60帧.应该是这个问题吧?

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-9-5 12:04:00 | 显示全部楼层

Re: DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网

确实这个问题,因为一直没注意,而且还产生一误会,前段时间用MDX+C#帮别人搞一个3D框架因为没注意这一项的设置
后来框架怎么也超不过80帧,感到很疑惑是不是.net 拖累的。对MDX+C#的效率很担忧。
但最近用C++/DX 也遇到这个问题,找到了原因才恍然大悟。
回头把MDX+C#空框架的PresentationInterval设成D3DPRESENT_INTERVAL_IMMEDIATE也达到2000多帧

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-9-5 14:39:00 | 显示全部楼层

Re:DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网

dx例子的框架,我过去“移植”过里面的东西[em22]
把ui方面渲染去掉以后帧数一下子就上去了,感觉是它的ui拖累的,我没有去用它的ui部分

15

主题

40

帖子

40

积分

注册会员

Rank: 2

积分
40
 楼主| 发表于 2009-9-6 21:34:00 | 显示全部楼层

Re: DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网

楼上说的D3DPRESENT_INTERVAL_IMMEDIATE 的确有效;
不过最近在FPS计算上,又发现了一个诡异的问题,不知道各位有没有碰到过
同样的场景, 用以下两种方法计算FPS

第一种方法(老师教的): FPS = 1.0f/ 每一次渲染的时间差;然后累加求平均,每一秒更新一次(也可以直接显示结果一样FPS在60多~)

第二种方法(框架演示,龙书上都这样做): 当时间>=一秒时, FPS = 一秒钟渲染的次数N/ 渲染N次的时间(差不多一秒)
FPS 在600~900左右

想想两种方法理论上都是对的, 为啥结果差那么多呢....

第一种方法:

                static float lastSec = timeGetTime()/1000.f;// 上一秒刷新FPS的时间
                static float preTime = timeGetTime()/1000.f;// 上一次执行该函数的时间
                float curTime = timeGetTime()/1000.f;                // 当前的时间
               
                if(curTime-preTime!=0)
                        m_fps = 1.f/(curTime-preTime);

                preTime = curTime;


第二种方法:

                static float lastSec = timeGetTime()/1000.f;// 上一秒刷新FPS的时间
                float curTime = timeGetTime()/1000.f;                // 当前的时间
               
                m_frameCnt++;

                if(curTime-lastSec>1.0f) // 每秒钟更新一次FPS, 数值为一秒钟内的渲染次数
                {
                        m_fps = (float)m_frameCnt / (curTime-lastSec);

                        lastSec = curTime;
                        m_frameCnt = 0;
                }

27

主题

563

帖子

568

积分

高级会员

Rank: 4

积分
568
发表于 2009-9-6 23:14:00 | 显示全部楼层

Re:DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网

timeGetTime并不十分精确.

15

主题

40

帖子

40

积分

注册会员

Rank: 2

积分
40
 楼主| 发表于 2009-9-7 06:54:00 | 显示全部楼层

Re: Re:DX框架 什么也不渲染 为什么FPS最高只有80多,玩大型

山高: ReX框架 什么也不渲染 为什么FPS最高只有80多,玩大型网游也能到30~50

timeGetTime并不十分精确.


呵呵, 原来是timeGetTime精度不行.十几毫秒的误差...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 19:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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