前へ 第03章 ポリゴンを表示する 次へ

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

「字」を表示することは出来ましたけどやはりゲームを作りたい人は「絵」を
表示する方法を待ち望んでることと思います。
最初に説明しましたけどDirectX8では2Dの絵を表示する場合もポリゴンです。
ポリゴンを表示する>テクスチャに貼り付ける。と言った手順が必要です。
それではそのための一つ目「ポリゴンを表示する」から説明しますね。

出てくる関数:
関数名 詳細
HRESULT SetRenderState(
D3DRENDERSTATETYPE State,/*変更対象のデバイス ステート変数*/
DWORD Value/*設定する新しい値*/
);
レンダリング ステート パラメータを設定する
HRESULT SetTextureStageState(
DWORD Stage,/*テクスチャのステージ識別子*/
D3DTEXTURESTAGESTATETYPE Type,/*テクスチャのステート*/
DWORD Value,/*ステート値*/
);
テクスチャにステート値を設定する
HRESULT SetVertexShader(
DWORD Handle/*頂点フォーマット フラグの組み合わせを指定する*/
);
現在の頂点シェーダを設定する
HRESULT DrawPrimitiveUP(
D3DPRIMITIVETYPE PrimitiveType,/*プリミティブの種類*/
UINT PrimitiveCount,/*プリミティブの数*/
CONST void* pVertexStreamZeroData,/*頂点データのポインタ*/
UINT VertexStreamZeroStride/*各頂点のデータ間のストライド (バイト単位)*/
);
レンダリングする
それではソースを追っていきましょう。 *前回と同じ部分は省略しています。 struct TLVERTEX { float x,y,z; float rhw; D3DCOLOR color; float tu,tv; }; TLVERTEX _TLVERTEX(int x,int y,int z,float r,D3DCOLOR c,float u,float v){ TLVERTEX tlver; tlver.x = (float)x; tlver.y = (float)y; tlver.z = (float)z; tlver.rhw = r;// tlver.color = c; //tlver.specular = (unsigned long)s; tlver.tu = u; tlver.tv = v; return tlver; } ポリゴン使う為の構造体と代入用のマクロです。 #define FVF_TLVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1) 必要なフォーマットを集めてわかりやすい定数に置き換えてるだけです。 TLVERTEX vertex[4]; vertex[0] =_TLVERTEX( 40.0f, 40.0f,0,1.0f,D3DCOLOR_XRGB(255,255,255),0,0); vertex[1] =_TLVERTEX(160.0f, 40.0f,0,1.0f,D3DCOLOR_XRGB( 0,255,255),0,0); vertex[2] =_TLVERTEX( 40.0f,120.0f,0,1.0f,D3DCOLOR_XRGB(255, 0,255),0,0); vertex[3] =_TLVERTEX(160.0f,120.0f,0,1.0f,D3DCOLOR_XRGB(255,255, 0),0,0); ポリゴンの座標を指定しています。 今回はポリゴンの座標がそのまま画面の座標になります。 g_pd3dDevice->SetVertexShader(FVF_TLVERTEX); 描画に使う頂点フォーマットを指定しています。 g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,4,vertex,sizeof(TLVERTEX)); そしていよいよ描画です。 引数が重要です。 最初のD3DPT_TRIANGLESTRIPはポリゴンを描画するときの描画方法です。 ここの指定により点,線,板,扇形といった描画方法を指定できます。

D3DPT_POINTLIST

D3DPT_LINELIST

D3DPT_LINESTRIP

D3DPT_TRIANGLELIST

D3DPT_TRIANGLESTRIP

D3DPT_TRIANGLEFAN
D3DPT_POINTLISTそれぞれの頂点を点として描画します。
D3DPT_LINELIST頂点から2点づつ線分にします
D3DPT_LINESTRIP頂点を連続した線分にします
D3DPT_TRIANGLELIST3点づつでポリゴンを作ります
D3DPT_TRIANGLESTRIP連続した頂点でポリゴンを作ります
D3DPT_TRIANGLEFAN最初の頂点を基点として扇形にポリゴンを作ります
色々な形式でレンダリングして実際に動作を確認してください