前へ 第04章 ポリゴンにテクスチャを貼る 次へ

ソース 実行ファイル
dx8_04.cpp dx8_04.exe

前回でポリゴンの表示は出来ましたね
各点に色をつけることが出来ある程度の模様を表現することは可能ですけど
やはりちゃんとした「絵」を表示したいものですね
「ポリゴンに絵を張る」今回はこれの解説です。
ちなみにこういった絵のことを「テクスチャ」と言い,
ポリゴンに絵を張ることを「テクスチャマッピング」と言います。

今回は下記の画像を貼り付けます
同時に周りの黒い部分は透過させます。
出てくる関数:
関数名 詳細
HRESULT D3DXCreateTextureFromFileExA(
LPDIRECT3DDEVICE8 pDevice,/*Direct3Dデバイスを指定*/
LPCSTR pSrcFile,/*読み込むファイル名*/
UINT Width,/*0指定で自動的に読み込まれた値を使用する*/
UINT Height,/*0指定で自動的に読み込まれた値を使用する*/
UINT MipLevels,/*ミップ レベルの数*/
DWORD Usage,/*0 または D3DUSAGE_RENDERTARGETを指定*/
D3DFORMAT Format,/*ピクセル フォーマットを記述する*/
D3DPOOL Pool,/*テクスチャの配置先となるメモリ クラスを記述する*/
DWORD Filter,/*フィルタリングフラグの組み合わせを指定する*/
DWORD MipFilter,/*ミップマップ用の同上*/
D3DCOLOR ColorKey,/*透過色を指定する*/
D3DXIMAGE_INFO* pSrcInfo,/*NULLを指定*/
PALETTEENTRY* pPalette,/*NULLを指定*/
LPDIRECT3DTEXTURE8* ppTexture/*保存するテクスチャ構造体を指定*/
);
テクスチャを読み込む
HRESULT SetTexture(
DWORD Stage,/*テクスチャを設定するステージ*/
IDirect3DBaseTexture8* pTexture/*設定するテクスチャのポインタ*/
);
テクスチャを指定する
ノイズが入ってるのはビデオボードの問題と思われる.. それではソースを追っていきましょう。 *前回と同じ部分は省略しています。 LPDIRECT3DTEXTURE8 texture = NULL; テクスチャを使う為の構造体です。 // テクスチャ読み込み D3DXCreateTextureFromFileEx(g_pd3dDevice, "dx8_04.bmp", 0,0,0,0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, D3DCOLOR_ARGB(255, 0, 0, 0),NULL,NULL,&texture); テクスチャ用の画像ファイルを読み込んでいます。 同時に透過色も指定しています。。 //カラーキー用アルファテスト g_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE ); g_pd3dDevice->SetRenderState( D3DRS_ALPHAREF, 0x08 ); g_pd3dDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL ); 透過色を使用するためにはアルファテストを行わなければいけません。 1,アルファテストを使用する。 2,アルファテストするための基準アルファ値を指定する値(実はよくわからない..0x01でもいけたが0x08が一般的らしい) 3,カラーキー用ピクセルの受け取りを許可する。 // テクスチャ設定 g_pd3dDevice->SetTexture(0,texture); テクスチャを選択します。0は一つ目のテクスチャステージです。 この数字を変えて別のテクスチャを指定することにより重ね合わすことも可能です。 // 頂点を準備 TLVERTEX vertex[4]; vertex[0] =_TLVERTEX( 40.0f, 30.0f,0,1.0f,D3DCOLOR_XRGB(255,255,255),0,0); vertex[1] =_TLVERTEX(160.0f, 30.0f,0,1.0f,D3DCOLOR_XRGB(255,255,255),1,0); vertex[2] =_TLVERTEX( 40.0f,150.0f,0,1.0f,D3DCOLOR_XRGB(255,255,255),0,1); vertex[3] =_TLVERTEX(160.0f,150.0f,0,1.0f,D3DCOLOR_XRGB(255,255,255),1,1); 座標自体は前回と同じですけど最後の二つの引数が変わっています。 これはUV値と言ってテクスチャの座標を指定しています。(U=X座標,V=Y座標) テクスチャ全体から0は一番左(上),1は一番右(下)をあらわします。 今回の場合は4点をテクスチャの端に指定しています。 だからこのポリゴンにはテクスチャの全体が移るわけです。 あとは前回と同じように描画するのみです。 テクスチャの表示方法として数パターンのアニメーションをひとつの画像ファイルにした場合 テクスチャの座標(UV値)を調整すれば好きなパターンだけを表示といったことも可能です。 間違っても「各アニメパターン=画像ファイル数」なんてことは止めましょう。 無茶苦茶遅くなっちゃいます。 これで好きな画像を表示することが出来るようになりました。 もう2Dのゲームなら作成可能ですね。