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);
としても、表示はされますが、必ずずれます。
どうすれば中央に表示されますか?
なお、タイトルバーやメニューバー、ウインドウの縁の影響も考慮し、これらを全てはず
しても、ずれます。
あまり詳しくありませんが、
Windows 7以降の場合、「High DPI」の影響について
その可能性を検討してみましたでしょうか。
ご返答ありがとうございます。
High DPIのお話は、初めて知りました。調べてみます。
今、高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の大きさも変わったので、何か関係がありそうなので
すが、どのような関係にあるかがわかりません。
お騒がせいたしました。
g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDev)
を行う前に、
D3DPRESENT_PARAMETERS d3dppで指定するバックバッファの大きさを0ではなく、ウインド
ウの大きさにしたところ、ウインドウの中心にpngを置くことができました。
ありがとうございました。