LPD3DXSPRITEの位置調整

[戻る]
ショボーン 2015/06/10(水) 20:40:33
VisualStudio2013を使っています。

D3DXCreateTextureFromFileExで作ったLPDIRECT3DTEXTURE9のpngを、LPD3DXSPRITEで表示
させようとしましたが、LPD3DXSPRITEを左上隅に置いてpngを表示させることはできたも
のの、LPD3DXSPRITEをウィンドウの中央に置いて表示させても、中央に表示されず、右下
にずれます。

描画の前に、
D3DXMatrixIdentity(&mat);
mat._41 = windowの幅/2; 
mat._42 = windowの高さ/2;

g_pSprite->SetTransform(&mat);
を書き、描画に
g_pSprite->Draw(g_pTexture, NULL, NULL, NULL, 0xFFFFFFFF);

としても、表示はされますが、必ずずれます。
どうすれば中央に表示されますか?

なお、タイトルバーやメニューバー、ウインドウの縁の影響も考慮し、これらを全てはず
しても、ずれます。

仲澤@失業者 2015/06/15(月) 11:11:11
あまり詳しくありませんが、
Windows 7以降の場合、「High DPI」の影響について
その可能性を検討してみましたでしょうか。

ショボーン 2015/06/15(月) 20:10:09
ご返答ありがとうございます。

High DPIのお話は、初めて知りました。調べてみます。

ショボーン 2015/06/15(月) 21:44:02
今、高DPIについて調べてみました。

手持ちのコードで

    ID2D1Factory*          g_Factory=NULL;
    if (FAILED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &g_Facto
ry)))  
    {
        return false;
    }
    FLOAT dpiX;
    FLOAT dpiY;
    g_Factory->GetDesktopDpi(&dpiX, &dpiY);

としたところ、上記の最後の行を抜けたとき、dpiX,Y共に96が入っておりました。
これは標準的なサイズなのですが、それでもやはりずれます。

ちなみに、GetSystemMetricsでディスプレイのサイズを取得し、SetWindowPosでウィンド
ウのサイズをディスプレイのサイズの半分にすることはできます。

その際、なぜが表示されているpngの大きさも変わったので、何か関係がありそうなので
すが、どのような関係にあるかがわかりません。

ショボーン 2015/06/15(月) 21:51:11
[[解決]]
お騒がせいたしました。

g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
        D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDev)
を行う前に、
D3DPRESENT_PARAMETERS d3dppで指定するバックバッファの大きさを0ではなく、ウインド
ウの大きさにしたところ、ウインドウの中心にpngを置くことができました。

ありがとうございました。

古いスレッドには追加発言できません。