2012-01-20 15 views
4

私は自分のグラフィックスカードが自動的にテクスチャを2の累乗にリサイズすることを発見しました。通常は問題はありませんが、テクスチャの一部だけをレンダリングする必要があります。それは...ダイレクトテクスチャのディメンションのサイズ

元にリサイズされています: 私は私の風合いに370x300ピクセルの画像をロードして、特定のソース矩形

RECT test; 
    test.left = 0; 
    test.top = 0; 
    test.right = 370; 
    test.bottom = 300; 

    lpSpriteHandler->Draw(
     lpTexture, 
     &test,   // srcRect 
     NULL,   // center 
     NULL,   // position 
     D3DCOLOR_XRGB(255,255,255) 
     ); 

でそれを描くしようとするが、テクスチャが自動的にされているので、 (この場合は)512x512にリサイズされていますが、私は元のテクスチャの一部しか見ません。

質問は、 私のテクスチャの寸法を見つけるために呼び出すことができる機能がありますか? (私はこれをグーグルで試してみましたが、常にオブジェクトとHSLか何かについてのいくつかの奇妙ながらくたを取得しました)

答えて

3

あなたはこのコールを使用して、ファイル情報を取得することがあります。

D3DXIMAGE_INFO info; 
D3DXGetImageInfoFromFile(file_name, &info); 

ものの、オリジナルのテクスチャサイズあなたを知っていますまだロード時にサイズが変更されます。明らかにテクスチャの質に影響を与えます。テクスチャのサイズ変更は、メッシュに適用すると大したことではありませんが(とにかにサイズが変更されます)、スプライトを描画するにはこれが問題になる可能性があります。これを回避するには、表面を作成し、D3DXLoadSurfaceFromFileで読み込み、それを「pow2」サイズのテクスチャにコピーすることをお勧めします。

そして、offtopic:あなたのカードの能力は間違いありませんか?実際にはあなたのカードdoは任意のテクスチャサイズをサポートしていますが、あなたはD3DXCreateTextureFromFile()を使用します。これは、deafultによってpow2サイズが適用されます。ハードウェアが非POW2テクスチャをsuppors場合はそのまま、あなたのファイルがロードされますでしょう

D3DTexture* texture; 
D3DXCreateTextureFromFileEx(
    device, file_name, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, 0, 
    D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, 
    &texture); 

:この問題を回避するには、このルーチンの拡張版を使用してみてください。ハードウェアがそれを処理できない場合、メソッドは失敗します。

関連する問題