游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9382|回复: 28

为什么我的帧率就是上不去?

[复制链接]

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2004-10-19 15:51:00 | 显示全部楼层 |阅读模式
请问如果不考虑三角形数量,决定帧率的因数还有什么呢?
我做的程序帧率最高都是85,就算渲染一个三角形也是如此,这怎么可能呢!Dx9SDK里的例子很都跑几百帧的!

找不到原因啊,很痛苦!请帮我看看问题在哪里好吗

我的机器配置:AMD XP 2200+ , Readon 9600 Pro , 256 M 内存

创建D3D:

HRESULT InitD3D(HWND hWnd)
{
                g_pd3d=Direct3DCreate9(D3D_SDK_VERSION);

                D3DDISPLAYMODE d3ddm;
                g_pd3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm);

                D3DPRESENT_PARAMETERS stPresentParam;
                ZeroMemory(&stPresentParam,sizeof(stPresentParam));
       
                stPresentParam.Windowed = FALSE;
                stPresentParam.FullScreen_RefreshRateInHz = 0;
                stPresentParam.PresentationInterval = 0;
       
                stPresentParam.BackBufferHeight = 600;
                stPresentParam.BackBufferWidth = 800;
                stPresentParam.BackBufferFormat=D3DFMT_A8R8G8B8;       
       
                stPresentParam.MultiSampleType =D3DMULTISAMPLE_2_SAMPLES;
                stPresentParam.MultiSampleQuality =0;
       
                stPresentParam.SwapEffect=D3DSWAPEFFECT_DISCARD;

                stPresentParam.EnableAutoDepthStencil = TRUE;
                stPresentParam.AutoDepthStencilFormat = D3DFMT_D16;
                stPresentParam.BackBufferCount =1;
                g_pd3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING,&stPresentParam,&g_pd3ddevice);

                g_pd3ddevice->SetRenderState (D3DRS_ZENABLE,TRUE);
                g_pd3ddevice->SetRenderState (D3DRS_ZFUNC,D3DCMP_LESS);
                g_pd3ddevice->SetRenderState (D3DRS_ZWRITEENABLE,TRUE);
       
                return 0;
}

渲染调用放在 CALLBACK WndProc 里的 WM_PAINT事件处理:

      case WM_PAINT:
             Render();
             g_pd3ddevice-&gtresent (NULL,NULL,NULL,NULL);
             break;

渲染过程:
void Render2()
{

                RefreshMatrix();

                g_pd3ddevice->Clear (0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0x0,1.0f,0L);

                if(SUCCEEDED(g_pd3ddevice->BeginScene ()))
                {
                g_pd3ddevice->DrawPrimitive (D3DPT_TRIANGLELIST,0,1);
                g_pd3ddevice->EndScene ();
                }

}

主过程消息循环:

                for(;;)
                {
                                if (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))        
                                {
                                                if (msg.message ==WM_QUIT) break;
                                                TranslateMessage(&msg);
                                                DispatchMessage(&msg);
                                }
                                else
                                {
                                                Render();
                                 }
                }


没有用灯光,只设置了背景环境光为(255,255,255)

还需要其他过程的我再发上来

多谢了!

50

主题

992

帖子

1012

积分

金牌会员

Rank: 6Rank: 6

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

Re:为什么我的帧率就是上不去?

有可能是你打开了垂直同步了,可以在你的驱动程序里找到它的设置,把它关掉

50

主题

992

帖子

1012

积分

金牌会员

Rank: 6Rank: 6

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

Re:为什么我的帧率就是上不去?

你的显示器刷新率一定是85HZ吧:)

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

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

Re:为什么我的帧率就是上不去?

stPresentParam.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2004-10-19 16:00:00 | 显示全部楼层

Re:为什么我的帧率就是上不去?

恩,驱动里已经将垂直同步设置为始终关闭了

刷新率是85,但我想可能不关它的事,因为在相同环境下,运行很多Dx9SDK的例子都好几百帧的

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

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

Re:为什么我的帧率就是上不去?

错了,是
stPresentParam.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2004-10-19 16:07:00 | 显示全部楼层

Re:为什么我的帧率就是上不去?

好的,现在行了,多谢!

对了,有的资料里写的是 FullScreen_PresentationInterval,有的是 PresentationInterval
我的SDK里 stPresentParam 是没有 FullScreen_PresentationInterval 的,只有 PresentationInterval

他们有什么不同,有存在 FullScreen_PresentationInterval 的SDK的吗?

50

主题

992

帖子

1012

积分

金牌会员

Rank: 6Rank: 6

积分
1012
发表于 2004-10-19 16:08:00 | 显示全部楼层

Re:为什么我的帧率就是上不去?

对啊像ljm兄说的交换帧也要用立即提交方式,否则还是同步

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

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

Re:为什么我的帧率就是上不去?

dx8是FullScreen_PresentationInterval
dx9是PresentationInterval

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2004-10-19 16:17:00 | 显示全部楼层

Re:为什么我的帧率就是上不去?

哦,是这样

还想问一问,现在的 fps 游戏一般一帧里面真正用 DrawPrimitive 绘画的三角形数量是多少呢?

我在程序中渲染 50000 个三角形,帧率就只有 16 了,这还是纯粹画三角形,其他什么事情都没做。看一些其他人的文章说画20万的三角形还有几十帧,真是伤心啊
我想可能是算法或程序结构上有问题

程序如下:
            
             UINT oo2;

             if(SUCCEEDED(g_pd3ddevice->BeginScene ()))
                          {
                               
                                       for(oo2=0;oo2<=50000;oo2++)
               
                                                    {               
                                                    g_pd3ddevice->DrawPrimitive (D3DPT_TRIANGLELIST,oo2*3,1);
                                                    }
                                                    g_pd3ddevice->EndScene ();                                       
                                      }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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