電子書籍の厳選無料作品が豊富!

int Bmp[][] = {
// R G B
{0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF},
{0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00},
{0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF},
};
// 元画像(4×4)
// 青透透青
// 透青青透
// 透青青透
// 青透透青

上記のような、C++の配列にコンバートした、画像ファイルがあるとします。

DirectX9にて、
この画像を、四角ポリゴンにテクスチャとして貼り付け、
RGB成分すべてが、0x00になっている部分を透明にして表示したいです。

どのようにしたら実現できそうか、
適当な資料や、良い関数等があったら、教えていただけると幸いです。

コンバートするためのツールは、自作の物なので、配列側の仕様を変えることは可能です。
よろしくお願いします。

A 回答 (1件)

各メソッドの戻り値のチェックは省略しています。




// ARGB 画像バッファ。
const D3DCOLOR texImgSrcBuf[4][4] =
{
0xFF0000FF, 0x00000000, 0x00000000, 0xFF0000FF,
0x00000000, 0xFF0000FF, 0xFF0000FF, 0x00000000,
0x00000000, 0xFF0000FF, 0xFF0000FF, 0x00000000,
0xFF0000FF, 0x00000000, 0x00000000, 0xFF0000FF,
};

IDirect3DDevice9* pDevice;
IDirect3DTexture9* pTexture = NULL;

// ARGB テクスチャの作成。
pDevice->CreateTexture(4, 4, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTexture, NULL);

D3DLOCKED_RECT lockRect = {};
pTexture->LockRect(0, &lockRect, NULL, D3DLOCK_DISCARD);

// ここでテクスチャ ARGB を、D3DLOCKED_RECT::pBits(と D3DLOCKED_RECT::Pitch)を使って書き込む。
// 今回はサイズが2のべき乗なのでコードを簡略化する。

memcpy(lockRect.pBits, texImgSrcBuf, sizeof(texImgSrcBuf));

pTexture->UnlockRect(0);


あとは任意のポリゴンにテクスチャをマッピングして、アルファ ブレンドを有効にしてレンダリングするだけです。テクスチャ マッピングやアルファ ブレンディングに関しては、Webにいくらでも資料が転がっているので、ご自分で検索してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!