游戏开发论坛

 找回密码
 立即注册
搜索
楼主: acefighter

我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,内

[复制链接]

1

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2007-3-23 10:32:00 | 显示全部楼层

Re: Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20

whb9633: Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,内存占用不到100MB,想知道原因和解决方法

另外,补充两点:
1."有同学说是因为D3D会把许多工作交给显卡去做,所以在显卡渲染的时候CPU就会等显...


绝对没有做广告的意思,冤枉啊,呵呵!
在程序里我没用过Sleep(),但CPU占用率确实不高,有图为证
sf_200732310328.jpg

1

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2007-3-23 10:42:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

这是WinMain()函数的大况,看一下就会发现每次消息循环的时候CPU的工作并不大,就是赋一下值什么的,渲染的工作都是通过调用Render()来完成的,而Render()中会调用D3D的API来渲染的。

int APIENTRY WinMain(HINSTANCE hInstance,//传入的窗口句柄
                                         HINSTANCE hPrevInstance,//已存在的窗口句柄
                                         LPSTR lpCmdLine,//传入的命令行参数
                                         int nCmdShow/*显示方式*/)
{
        init_flag=0;
        MSG msg;//消息结构体
        if(!hPrevInstance)
        {
                RegWndClass(hInstance);
        }

        if(!InitWnd(hInstance,nCmdShow))
        {
                return FALSE;
        }

        Missile_oldtime=Bullet_oldtime=0;
        //将实例句柄和窗口句柄赋予对应的输入处理变量


/////////////////////////////调用与初始化d3d有关的函数/////////////////////////////////////

        //将敌机开火标志清0
        for(int i=0;i<6;i++)
                e_shoot[6]=0;
       
        stup_bgtime=timeGetTime();

        InitKeyboard();
        InitD3D();//初始化设备与场境
        InitGeometry();//载入各个模型,并对其进行参数属性设置
        ......
        ......


///////////////////////////////////消息循环////////////////////////////////////////

        ZeroMemory(&msg,sizeof(msg));
        //在使用msg之前一定要用ZeroMemory将其清0否则出错
        while(msg.message!=WM_QUIT)
        {
                if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
                {
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);               
                }
                else
                {
                        //用D3D输入设备来处理键盘输入
                        if(IsKeyPressed(DIK_W))
                        {
                                m_nRotateX+=0.5;
                        }
                        if(IsKeyPressed(DIK_S))
                        {
                                m_nRotateX-=0.5;
                        }
                        if(IsKeyPressed(DIK_A))
                        {
                                m_nRotateZ+=3;
                        }
                        ......
                        ......

                        //渲染游戏场景
                        if(game_step==0||game_step==2||game_step==3)
                                Render_0();
                       
                        if(game_step==106)//过场动画106
                        {
                                Render_106();
                                if(timeGetTime()-game_bg>10000)
                                {
                                        game_step=0;//退出到菜单
                                        //清理内存
                                        pVF1->Cleanup();
                                        pABus->Cleanup();
                                        sky->Cleanup();
                                        land->Cleanup();
                                        for(int i=0;i<6;i++)
                                                pMle->Cleanup();
                                        for(int i=0;i<2;i++)
                                                pEExpS->Cleanup();
                                        InitGeometry();
                                        Sound_BGM->Stop();
                                        Sound_Plane.Stop();
                                        sd_bg_bgm-&gtlay(1);
                                }
                        }

                        if(game_step==1)
                                 Render();
                        if(game_step==-1)
                                 Render__1();

                }
        }
        //此处添加释放D3D设备和资源的代码
        Cleanup();
        //释放与输入有关的设备
        ReleaseCOMObject();
        //结束释放
        UnregisterClass(g_szWndClass,g_wcex.hInstance);
        return msg.wParam;
}

0

主题

243

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
发表于 2007-3-23 13:25:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

王牌飞行员这个名字听起来还挺耳熟。。。。

1

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2007-3-23 14:35:00 | 显示全部楼层

Re: Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20

conquerors: Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,内存占用不到100MB,想知道原因和解决方法

不错的作品啊,非常好奇作品中physics engine的实现细节,楼主可否透露些


你的“物理引擎”是指飞机的空气动力学和碰撞检测吗?
如果是的话我的答案可能会让你失望哦,关于飞行姿态和飞行轨迹的计算我只考虑了两个因素:速度和加速度,至于 重力空气阻力还有流体力学通通都没考虑(不过炮弹是加了重力这一项的,所以你会看到机炮的弹道是一个下抛物线),所以在游戏中你想怎么飞就怎么飞,再用力的抱杆和压舵都不会失速,这与<IL-2>还有<锁定:现代空战>等就差远了。
碰撞检测就更简单了,最简单的距离判断法,只要敌机或友机与子弹、导弹等的形心距离小于一定值就认为是命中,连包围盒都 没用 [em10]

3

主题

89

帖子

89

积分

注册会员

Rank: 2

积分
89
QQ
发表于 2007-3-23 16:03:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

会不会是默认打开了垂直同步(V-Sync)?导致FPS高不起来。

28

主题

433

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2007-3-23 21:34:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

你 可能 用了 显卡 不支持 的 DX  特性,最后 用 软件 模拟实现 了~
你该把 程序和 代码 发 上来 让我门测试 一下~

1

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2007-3-23 22:22:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

回楼上的怎么上传啊,贴图声音文件加起来就80多MB呢

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-3-23 23:44:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

我给你出个主意吧,去www.4shared.com申请一个盘盘就是了

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2007-3-24 09:07:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

请问:“cpu等待gpu用的是while(1)来等的”,是什么意思,与其他的有什么不同。

6

主题

471

帖子

1047

积分

金牌会员

Rank: 6Rank: 6

积分
1047
发表于 2007-3-24 10:50:00 | 显示全部楼层

Re:我用D3D写的三维游戏,画面挺卡,但CPU占用率不到20%,

不用X不是效率问题,X虽然可以导出用户自定义数据但比较麻烦.
一般是使用自定义模型,还能加密模型数据,
而且方便编辑效果(例如纹理动画,材质混合,灯光和摄像机属性等)
载入后的绘制与X其实是一样的,只不过在绘制的时候可控性更大点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 19:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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