ページ 11

Direct 3D 10 で60フレームにならない

Posted: 2013年1月06日(日) 19:04
by dic
Direct3D 10 を勉強中です
そこで、ゲームで重要なFPSの調節をしようかと思っているんですが、
Direct3D 10 には、FPSの調整が、ライブラリにあるので、それにまかせようとしました
そして、60FPSになっているか確認しても、全然60フレームになりません
せいぜい、30FPSくらいで、ウィンドウの大きさを変えると確かに60FPS,100FPSほどでるのですが、
60FPSで固定したいです
しかしライブラリにFPS調整機能があるのですが、60FPSで固定するにはどうしたらいいのでしょうか?

コード:


    DXGI_SWAP_CHAIN_DESC sd;
    ZeroMemory( &sd, sizeof( sd ) );
    sd.BufferCount = 1;
    sd.BufferDesc.Width = width;
    sd.BufferDesc.Height = height;
    sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    sd.BufferDesc.RefreshRate.Numerator = 60;  // ここで、60フレームを指定
    sd.BufferDesc.RefreshRate.Denominator = 1;
    sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;	//	バックバッファにレンダリング
    sd.OutputWindow = g_hWnd;
    sd.SampleDesc.Count = 1;							//	マルチサンプリング
    sd.SampleDesc.Quality = 0;							//	マルチサンプリングを無効に
    sd.Windowed = TRUE;

    for( UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++ )
    {
        g_driverType = driverTypes[driverTypeIndex];
        hr = D3D10CreateDeviceAndSwapChain( NULL, g_driverType, NULL, createDeviceFlags,
                                            D3D10_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice );
        if( SUCCEEDED( hr ) )
            break;
    }
チュートリアルにある、ソースコードを参考にしています
フレームの確認は、SetTime( .. で設定して、WM_TIMER のメッセージがきたところを確認しています

Re: Direct 3D 10 で60フレームにならない

Posted: 2013年1月06日(日) 20:24
by dic
やはり、よく考えた結果、最初からこんなことでつまづくようなので
Direct3D 10 は見送りたいと思います

DxLibを使いたいと思います

Re: Direct 3D 10 で60フレームにならない

Posted: 2013年1月07日(月) 01:01
by ISLe
それは60フレーム毎秒で動作するのではなく、ディスプレイモードを60Hzにするという意味です。
また、DXライブラリのデフォルト動作のように垂直帰線期間に同期するかどうかはここでは決まりません。
あとフルスクリーンでないときは無視されるかと。

それからDXライブラリでもモニタのリフレッシュレートに同期するのがデフォルト動作なので、必ずしも60FPSになるとは限りません。

Re: Direct 3D 10 で60フレームにならない

Posted: 2013年1月07日(月) 07:50
by dic
そうだったんですね
やっぱり英語のマニュアルは私には無理のようでした

Re: Direct 3D 10 で60フレームにならない

Posted: 2013年1月07日(月) 18:06
by ISLe
dic さんが書きました:やっぱり英語のマニュアルは私には無理のようでした
英語というのはDirectX SDK付属のマニュアルの話ですかね。

MSDNライブラリのサイトに行けば翻訳されている記事もありますし、日本語の解説サイトを探してみても良いのではないかと思います。
Direct3D 10以降はデバイスの作成手順が簡単になりましたし。

アプリケーションソフト完成までトータルで見たら、DXライブラリを使う場合と比べて、自前で実装しなければいけないものは他にも山ほどありますけど。

Re: Direct 3D 10 で60フレームにならない

Posted: 2013年1月07日(月) 19:32
by dic
プログラムに関してだけの知識ではなく
3Dグラフィックスに関する知識も必要なのかなと思ってます
そして、それは、段階的に知識として吸収していくのが無理なくできるのではないかと思ってます
いきなりDirect3D 10 のテクニックを覚えても、知識がおいついていないため
効果的に利用できないのではないかと思ってます
DirectX 3D 9 と 3D 10 ではダブル部分もあるかと思いますが
それはそれで、一気にハードルを上げないで、少しずつ勉強していきたいです