ページ 11

DirectX9における点描画について

Posted: 2015年2月07日(土) 00:57
by mage
2Dゲームにおいてパーティクルを作成する為に点描画のテストを行ったのですが描画が行われません。

コード:

#define FVF_sPOINT (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

typedef struct _sPlvertex{
    float		x,y,z;		//頂点座標
    float		rhw;		//射影フラグ
    D3DCOLOR	deffuse;	//色指定
}sPlvertex;

//---略---//

g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
if (SUCCEEDED(g_pd3dDevice->BeginScene()))	//描画情報読み込み開始
{
    sPlvertex vertex;    //点の頂点情報
    float pointSize=10;   //点のサイズ
    vertex.deffuse=D3DCOLOR_RGBA(255, 255, 255, 255);    //点の色
    vertex.rhw=1.0f;    //射影フラグ
    vertex.x=WINDOW_WIDTH/2;  //点のX座標
    vertex.y=WINDOW_HEIGHT/2;   //点のY座標
    vertex.z=0.0f;                         //点のZ座標
    g_pd3dDevice->SetFVF(FVF_sPOINT);    //FVF設定
    g_pd3dDevice->SetRenderState(D3DRS_POINTSIZE, *((DWORD*)&pointSize));   //点のサイズを設定
    g_pd3dDevice->DrawPrimitiveUP(D3DPT_POINTLIST,	//頂点データーをビデオカードに送る
    1,
    &vertex,
    sizeof(sPlvertex));
    g_pd3dDevice->EndScene();				//描画読み込み終了
}
g_pd3dDevice->Present(NULL, NULL, NULL, NULL);	//描画開始
//---略---//


以上が描画部分のソースコードです。
出来れば点描画の部分だけのサンプルソースを頂ければ嬉しいです。

Re: DirectX9における点描画について

Posted: 2015年2月07日(土) 21:32
by lriki
こんばんは。

ウィンドウの中央に点を打ちたいのだと読み取りましたが、
ビュー・プロジェクション行列は設定されていますか?

設定されていなければ、DrawPrimitiveUP() は直接スクリーン座標空間に描画を行うことになります。
この座標空間は -1.0~1.0 の範囲です。
例えば、左上は(-1.0, 1.0)、中央は (0, 0) です。

その後、DirectX は Present() によってクライアント座標空間(0~WINDOW_WIDTH(HEIGHT))へ
レンダリング結果の転送を行います。

まずは vertex.x と vertex.y を 0 にして試してみてください。

もし頂点座標を 0~WINDOW_WIDTH(HEIGHT) の範囲で指定したいときは D3DXMatrixOrthoLH 等を使用して
プロジェクション行列を工夫する必要があります。