LPD3DXSPRITEの位置調整 – プログラミング – Home

通知
すべてクリア

[解決済] LPD3DXSPRITEの位置調整


ショボーン
 ショボーン
(@ショボーン)
ゲスト
結合: 11年前
投稿: 6
Topic starter  

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);

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

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


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

あまり詳しくありませんが、
Windows 7以降の場合、「High DPI」の影響について
その可能性を検討してみましたでしょうか。


返信引用
ショボーン
 ショボーン
(@ショボーン)
ゲスト
結合: 11年前
投稿: 6
Topic starter  

ご返答ありがとうございます。

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


返信引用
ショボーン
 ショボーン
(@ショボーン)
ゲスト
結合: 11年前
投稿: 6
Topic starter  

今、高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の大きさも変わったので、何か関係がありそうなので
すが、どのような関係にあるかがわかりません。


返信引用
ショボーン
 ショボーン
(@ショボーン)
ゲスト
結合: 11年前
投稿: 6
Topic starter  

お騒がせいたしました。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました