class CBillboard

【概要】
 Direct3D の 3D シーンに描画可能な ビルボードクラス。テクスチャは複数使用可能。

重要度メソッド名と解説アクセス
CBillboard(CD3DEnv *pEnv,int numTexture)
本クラスのコンストラクタ。描画環境へのポインタと使用するテクスチャの数を指定する。
public
~CBillboard()
デストラクタ
public
HRESULT SetTexture(DWORD dwTexNo, LPSTR fName)
テクスチャをファイル名で指定し、描画に使用できるようにする。
public
void Render(LPDIRECT3DDEVICE9 lpd3ddev,D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView, FLOAT fW, FLOAT fH, int texNo)
3Dモードでビルボードを描画する。
public
void Render(LPDIRECT3DDEVICE9 lpd3ddev,D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView, FLOAT fW, FLOAT fH, DWORD dwU, DWORD dwV, DWORD dwW, DWORD dwH, int texNo)
テクスチャの中の使用部分を指定して、3Dモードでビルボードを描画する。
public
void Render(LPDIRECT3DDEVICE9 lpd3ddev,FLOAT x, FLOAT y, FLOAT w, FLOAT h, int texNo)
2Dモードでビルボードを描画する。テクスチャ番号を負の値にするとテクスチャ無しで矩形を描画する。
public
void Render(LPDIRECT3DDEVICE9 lpd3ddev,FLOAT x, FLOAT y, FLOAT w, FLOAT h, DWORD dwU, DWORD dwV, DWORD dwW, DWORD dwH, int texNo)
テクスチャの中の使用部分を指定して、2Dモードでビルボードを描画する。
public
void Render2DVertices(LPDIRECT3DDEVICE9 lpd3ddev,D3DXVECTOR3 *pvec, int texNo)
2Dモードでビルボードを描画する。テクスチャ番号を負の値にするとテクスチャ無しで矩形を描画する。
public
void Render2DVertices(LPDIRECT3DDEVICE9 lpd3ddev,D3DXVECTOR3 *pvec, DWORD dwU, DWORD dwV, DWORD dwW, DWORD dwH, int texNo)
2Dモードでビルボードを描画する。テクスチャ番号を負の値にするとテクスチャ無しで矩形を描画する。
public
LPDIRECT3DTEXTURE9 GetTexture(UINT texNo)
指定したテクスチャへのポインタを返す。※テクスチャの参照カウントをインクリメントします。
public
HRESULT GetTextureSize(UINT texNo, DWORD *w, DWORD *h)
指定したテクスチャのサイズを返す。
public
void SetDiffuse(D3DCOLOR diffuse)
テクスチャ無しモードで描画する場合の色を指定する。
public
void SetBlendingMethod(UINT method)
半透明時の背景との混色方法を指定 (BILLBOARD_SEMI_TRANS(半透明)/BILLBOARD_ADD_IN(加算混合))。
public
void SetVirtualScreenSize(DWORD w, DWORD h)
想定画面のサイズを設定する。ビューポートに合わせた拡大・縮小の基準となる。
public
void SetScreenFitMode(DWORD mode)
ビューポートサイズに応じた表示方法を設定する
public
void CalculateScreenScaledViewport(RECT *rc, FLOAT *wscale, FLOAT *hscale)
想定画面をビューポート内にスケーリングして表示する場合の位置とサイズを返す
public
static void SetDefaultScreenSize(DWORD w, DWORD h)
以降生成される Billboardオブジェクトに適用される想定画面のサイズを設定する。
public
static void SetDefaultScreenFitMode(DWORD mode)
以降生成されるBillboardオブジェクトに適用されるビューポートサイズに応じた表示方法を設定する
public

※重要度の意味:

◎これを知らないとこのライブラリを使えないもの。
○知っておいたほうが良いもの。
△知らなくても支障は無いもの。


CBillboard(CD3DEnv *pEnv, int numTexture)

引数:pEnv:このメッシュオブジェクトが使用する描画環境へのポインタ。
numTexture:使用するテクスチャの数を指定する。


コンストラクタ。使用するテクスチャの数を指定して、CBillboard クラスのオブジェクトを 生成する。


~CBillboard()

デストラクタ


HRESULT SetTexture(DWORD dwTexNo, LPSTR fName)

引数:dwTexNo:テクスチャ番号を指定。
fName:指定したテクスチャ番号へ読み込むテクスチャのファイル名を指定。


読み込むファイルを指定する。 実際にはファイル名を指定しただけでは読み込まれないので、描画環境に対して、 ReloadGraphics()などで明示的に読み込み指示をする必要がある。


virtual void Render(LPDIRECT3DDEVICE9 lpd3ddev,D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView, FLOAT fW, FLOAT fH, int texNo);

引数:lpd3ddev:描画に使用するDirect3D9 デバイス。
pMatWorld:表示に使用するワールド行列。
pMatView:表示に使用するビュー行列。
fW:表示幅。
fH:表示高。
texNo:表示に使用するテクスチャ番号。

引数に指定された Direct3D9 デバイスに対して描画を行う。
ワールド行列とビュー行列を用いて座標変換が成されるが、ポリゴンの面の向きは必ずカメラの方を向く。

fW ないし fH のいずれかを 0 にすると、テクスチャの縦横比に合わせてサイズを計算する。
fW と fH の両方を 0 にする事はできない。


virtual void Render(LPDIRECT3DDEVICE9 lpd3ddev,D3DXMATRIX *pMatWorld, D3DXMATRIX *pMatView, FLOAT fW, FLOAT fH, DWORD dwU, DWORD dwV, DWORD dwW, DWORD dwH, int texNo);

引数:lpd3ddev:描画に使用するDirect3D9 デバイス。
pMatWorld:表示に使用するワールド行列。
pMatView:表示に使用するビュー行列。
fW:表示幅。
fH:表示高。
dwU:使用する部分テクスチャの左上隅のX座標。
dwV:使用する部分テクスチャの左上隅のY座標。
dwW:使用する部分テクスチャの幅。
dwH:使用する部分テクスチャの高。
texNo:表示に使用するテクスチャ番号。

引数に指定された Direct3D9 デバイスに対して描画を行う。
テクスチャの一部を描画に使用する。テクスチャの部分は、テクスチャ全体の左上隅を(0, 0) とし、 (dwU, dwV, dwW, dwH) の矩形で表現する。 ワールド行列とビュー行列を用いて座標変換が成されるが、ポリゴンの面の向きは必ずカメラの方を向く。

fW ないし fH のいずれかを 0 にすると、テクスチャの縦横比に合わせてサイズを計算する。
fW と fH の両方を 0 にする事はできない。


virtual void Render(LPDIRECT3DDEVICE9 lpd3ddev,FLOAT x, FLOAT y, FLOAT w, FLOAT h, int texNo);

引数:lpd3ddev:描画に使用するDirect3D9 デバイス。
x:x座標。
y:y座標。
w:表示幅。
h:表示高。
texNo:表示に使用するテクスチャ番号。

引数に指定された Direct3D9 デバイスに対して2Dモードで描画を行う。
座標は左上済みを(0,0)とする2Dの座標である。


virtual void Render(LPDIRECT3DDEVICE9 lpd3ddev,FLOAT x, FLOAT y, FLOAT w, FLOAT h, DWORD dwU, DWORD dwV, DWORD dwW, DWORD dwH, int texNo);

引数:lpd3ddev:描画に使用するDirect3D9 デバイス。
x:x座標。
y:y座標。
w:表示幅。
h:表示高。
dwU:使用する部分テクスチャの左上隅のX座標。
dwV:使用する部分テクスチャの左上隅のY座標。
dwW:使用する部分テクスチャの幅。
dwH:使用する部分テクスチャの高。
texNo:表示に使用するテクスチャ番号。

引数に指定された Direct3D9 デバイスに対して2Dモードで描画を行う。
座標は左上済みを(0,0)とする2Dの座標である。
テクスチャの一部を描画に使用する。テクスチャの部分は、テクスチャ全体の左上隅を(0, 0) とし、 (dwU, dwV, dwW, dwH) の矩形で表現する。


virtual void Render2DVertices(LPDIRECT3DDEVICE9 lpd3ddev, D3DXVECTOR3 *pvec, int texNo);

引数:lpd3ddev:描画に使用するDirect3D9 デバイス。
pvec:4点の頂点座標を格納したD3DXVECTOR3型の配列。
texNo:表示に使用するテクスチャ番号。

引数に指定された Direct3D9 デバイスに対して描画を行う。
4つの頂点の座標を、pvec 配列にて指定する。座標は、TRIANGLE_STRIP を利用して描画されるため、左上−右上−左下−右下のような順番で指定する。


virtual void Render2DVertices(LPDIRECT3DDEVICE9 lpd3ddev, D3DXVECTOR3 *pvec, DWORD dwU, DWORD dwV, DWORD dwW, DWORD dwH, int texNo);

引数:lpd3ddev:描画に使用するDirect3D9 デバイス。
pvec:4点の頂点座標を格納したD3DXVECTOR3型の配列。
dwU:使用する部分テクスチャの左上隅のX座標。
dwV:使用する部分テクスチャの左上隅のY座標。
dwW:使用する部分テクスチャの幅。
dwH:使用する部分テクスチャの高。
texNo:表示に使用するテクスチャ番号。

引数に指定された Direct3D9 デバイスに対して描画を行う。
引数に指定された Direct3D9 デバイスに対して描画を行う。
4つの頂点の座標を、pvec 配列にて指定する。座標は、TRIANGLE_STRIP を利用して描画されるため、左上−右上−左下−右下のような順番で指定する。
テクスチャの一部を描画に使用する。テクスチャの部分は、テクスチャ全体の左上隅を(0, 0) とし、 (dwU, dwV, dwW, dwH) の矩形でピクセル単位で表現する。


void SetVirtualScreenSize(DWORD w, DWORD h)

引数:w:想定画面の幅。
h:想定画面の高さ

このメソッドによって設定されたサイズの画面を想定して、2D描画を行うように設定する。 ビューポートのどの位置に表示されるかは、SetScreenFitMode に設定した表示方法に依存する。


void SetScreenFitMode(DWORD mode)

引数:mode:画面サイズに合わせた表示方法。

ビューポートに合わせて2D描画する際の表示方法を設定する。
以下のフラグの論理和を渡すことで、設定方法を組み合わせる事ができる。
FlagDesctiption
BILLBOARD_FIT_NONE画面に合わせた表示を行わない
BILLBOARD_FIT_SIZE画面サイズに合わせて表示する
BILLBOARD_FIT_KEEP_ASPECT拡大・縮小する際、縦横比を維持して拡大縮小する
BILLBOARD_FIT_CUTサイドカットまたは上下カットして、非表示部分が出ないように拡大・縮小する
BILLBOARD_FIT_TOP上下の表示位置を上に合わせる
BILLBOARD_FIT_MIDDLE上下の表示位置を中央に合わせる
BILLBOARD_FIT_BOTTOM上下の表示位置を下に合わせる
BILLBOARD_FIT_LEFT左右の表示位置を左に合わせる
BILLBOARD_FIT_CENTER左右の表示位置を中央に合わせる
BILLBOARD_FIT_RIGHT左右の表示位置を右に合わせる
BILLBOARD_FIT_CLIPPING指定された想定画面の外に出る部分をトリミングする

BILLBOARD_FIT_NONE 以外を指定した場合、2Dのビルボードをレンダリングする際に 使用される座標は、スクリーン上の座標ではなく、表示されるエリアの左上を基準 とした相対座標として扱われる。


void CalculateScreenScaledViewport(RECT *rc, FLOAT *wscale, FLOAT *hscale)

引数:rc:[in]表示しようとするビューポートの位置とサイズを表すRECT/[out]ビューポートに収まるように配置・スケールされた想定画面をあらわすRECT
wscale:ビルボードを想定画面に表示する際の横方向のスケール
hscale:ビルボードを想定画面に表示する際の縦方向のスケール

ビューポートに合わせて2D描画する際に想定画面が配置される位置と大きさを計算する。

【使用例】
 RECT    rc;
 FLOAT   wscale,hscale;
 D3DXMATRIX  *pProj = g_pD3DEnv->GetSystemProjection();
 rc.top = 0;
 rc.left = 0;
 rc.right = g_pD3DEnv->GetBackBufferWidth();
 rc.bottom = g_pD3DEnv->GetBackBufferHeight();
 g_pBillboard->CalculateScreenScaledViewport(&rc,&wscale,&hscale);
 D3DXMatrixPerspectiveFovLH(pProj,D3DX_PI*0.25f,(FLOAT)(rc.right-rc.left) / (FLOAT)(rc.bottom - rc.top),1.f,100.f);
 g_pD3DEnv->RenderSceneWithVP(&rc,RenderScene,NULL,true);


static void SetDefaultScreenSize(DWORD w, DWORD h)

引数:w:想定画面の幅。
h:想定画面の高さ

以降に生成するBillboard オブジェクトについて、想定画面サイズが、設定の値となるようにする。 ただし、生成された Billboard オブジェクトについて、SetVirtualScreenSize を呼び出した場合、 そのBillboardオブジェクトについては、個別の設定が優先される。


void SetDefaultScreenFitMode(DWORD mode)

引数:mode:画面サイズに合わせた表示方法。

以降に生成するBillboard オブジェクトについて、ビューポートサイズに応じた表示方法を設定する ただし、生成された Billboard オブジェクトについて、SetScreenFitMode を呼び出した場合、 そのBillboardオブジェクトについては、個別の設定が優先される。


D3DQuickLib のTOPページへ。