DirectX勉強会 第2回
内容
•ポリゴンの描画
•テクスチャの貼り付け
•半透明ポリゴンの描画
ポリゴンの描画1
•DirectXでは物を描くのにポリゴンを使う
•すべてのポリゴンは3角形によって描く
•3角形は頂点を指定することで描く
•頂点のフォーマットは自分で作ることができ、サンプルプログ
ラムでは次のようなフォーマットになっている
–struct TLVERTEX
–{
–float x,y,z; 頂点の座標を表している
–float rhw; プロジェクション頂点変換に関係する
–D3DCOLOR color; 頂点の色を指定する
–float tu,tv; テクスチャ座標を指定する
–};
ポリゴンの描画2
•まず頂点を準備する
•TLVERTEX vertex[4];によって頂点を4つ宣言し、
値を代入することで頂点の場所などが決まる
•ポリゴンの描画は開始を宣言する
lpD3DDEV->BeginScene();
と描画の終わりを宣言する lpD3DDEV-
>EndScene(); の間でする
•lpD3DDEV->DrawPrimitiveUP
でポリゴンを描画する
ポリゴンの描画3
•lpD3DDEV->DrawPrimitiveUP関数の第1引数でポリゴンの描画法を指
定する
–D3DPT_POINTLIST
•指定された頂点はすべて点として描画する
–D3DPT_LINELIST
•別々の線のリストとして描画する
–D3DPT_LINESTRIP
•連続した線分のリストとして描画する
–D3DPT_TRIANGLELIST
•3頂点ずつの別々の頂点として描画する
–D3DPT_TRIANGLESTRIP
•連続した3角形のリストとして描画する
–D3DPT_TRIANGLEFAN
•1つの頂点を共有した連続した3角形のリストとして描画する
•lpD3DDEV->DrawPrimitiveUP関数の第2引数は3角形ポリゴンの数
•lpD3DDEV->DrawPrimitiveUP関数の第3引数は頂点の配列へのポイ
ンタ
•lpD3DDEV->DrawPrimitiveUP関数の第4引数は1頂点あたりのサイズ
D3DPT_POINTLIST D3DPT_LINELIST
頂点5
頂点4
頂点3
頂点2
頂点1
頂点0
頂点5
頂点4
頂点3
頂点2
頂点1
頂点0
D3DPT_LINESTRIP D3DPT_TRIANGLELIST
頂点5
頂点4
頂点3
頂点2
頂点1
頂点0
頂点5
頂点4
頂点3
頂点2
頂点1
頂点0
D3DPT_LINESTRIP D3DPT_TRIANGLELIST
頂点5
頂点4
頂点3
頂点2
頂点1
頂点0
頂点5 頂点4
頂点3
頂点2
頂点1
頂点0
サンプルプログラム(Poly2D)
元のまま( vertex[0]とvertex[3]の
X座標は100 )
vertex[0]とvertex[3]のX座標を200
にした場合
テクスチャの貼り付け1
•D3DXCreateTextureFromFileEx関数を使っ
て貼り付けたいテクスチャを読み込む
–D3DXCreateTextureFromFileEx関数の第2引
数に読み込みたい画像ファイルのファイル名を指
定する
–D3DXCreateTextureFromFileEx関数の第14引
数にテクスチャオブジェクトへのポインタを指定す
る
テクスチャの貼り付け2
•lpD3DDEV->SetTexture関数でテクスチャの
設定をする
–第2引数のポインタでテクスチャを指定する
–NULLにするとテクスチャは使われなくなる
•頂点のフォーマットでテクスチャを指定する部
分があるが(tu,tv)で(0,0)はテクスチャの左
上、(1,0)は右上の様に0~1の値でtuは横
方向、tvは縦方向を表す
サンプルプログラム(Poly2D)
元のまま(テクスチャとして
texture.bmpを貼り付ける)
テクスチャオブジェクトへのポインタ
をNULLにした場合
半透明ポリゴンの描画1
•lpD3DDEV->SetRenderState関数でアルファ・ブレ
ンディングをONにすることで半透明にすることがで
きる
•lpD3DDEV->SetRenderState関数で透明化の方
法を指定できる
–D3DRS_SRCBLENDをD3DBLEND_SRCALPHAに、
D3DRS_DESTBLENDをD3DBLEND_INVSRCALPHA
にすることで普通の半透明にできる(透明度を考慮した値
になっている)
–D3DRS_SRCBLENDをD3DBLEND_ONEに、
D3DRS_DESTBLENDをD3DBLEND_ONEにすること
で加算合計による半透明にできる(重なった色を単純に
足している)
半透明ポリゴンの描画2
•透明化をするためには色の表現をRGBの3
つの変数だけではなく、RGBAの4つの変数
で表現する
–Aは透明度を表す
–D3DCOLOR_RGBA(r,g,b,a)で定義する
–RGBだけの表現はD3DCOLOR_XRGB(r,g,b)
で定義する
サンプルプログラム(Poly2DCalc)
元のまま(普通の半透明) 加算合計による半透明