- 締切済み
コンバートした画像をポリゴンに透明色つきで表示。
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になっている部分を透明にして表示したいです。 どのようにしたら実現できそうか、 適当な資料や、良い関数等があったら、教えていただけると幸いです。 コンバートするためのツールは、自作の物なので、配列側の仕様を変えることは可能です。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- sygh
- ベストアンサー率76% (42/55)
各メソッドの戻り値のチェックは省略しています。 // 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にいくらでも資料が転がっているので、ご自分で検索してください。