ページ 11

DirectXについて、認識の確認です

Posted: 2013年6月07日(金) 22:18
by びぎなぁ

コード:

//
#define FVF_VERTEX  D3DFVF_XYZ | D3DFVF_DIFFUSE

typedef struct {
  float x,y,z;
  D3DCOLOR diffuse;
}VERTEX;

VERTEX sq1[4] = {{ -50, -50,  50,   D3DCOLOR_RGBA(255,0,0,255)},
				   {  50, -50,  50, D3DCOLOR_RGBA(255,255,0,255)},
				   { -50,  50,  50,   D3DCOLOR_RGBA(0,0,255,255)},
				   {  50,  50,  50,   D3DCOLOR_RGBA(0,255,0,255)}};

VERTEX sq2[4] = {{  50, -50,  50,   D3DCOLOR_RGBA(255,0,0,255)},
				   {  50, -50, -50, D3DCOLOR_RGBA(255,255,0,255)},
				   {  50,  50,  50,   D3DCOLOR_RGBA(0,0,255,255)},
				   {  50,  50, -50,   D3DCOLOR_RGBA(0,255,0,255)}};

VERTEX sq3[4] = {{ -50, -50, -50,   D3DCOLOR_RGBA(255,0,0,255)},
				   {  50, -50, -50, D3DCOLOR_RGBA(255,255,0,255)},
				   { -50, -50,  50,   D3DCOLOR_RGBA(0,0,255,255)},
				   {  50, -50,  50,   D3DCOLOR_RGBA(0,255,0,255)}};

VERTEX sq4[4] = {{ -50,  50,  50,   D3DCOLOR_RGBA(255,0,0,255)},
				   { -50,  50, -50, D3DCOLOR_RGBA(255,255,0,255)},
				   { -50, -50,  50,   D3DCOLOR_RGBA(0,0,255,255)},
				   { -50, -50, -50,   D3DCOLOR_RGBA(0,255,0,255)}};

VERTEX sq5[4] = {{ -50,  50, -50,   D3DCOLOR_RGBA(255,0,0,255)},
				   {  50,  50, -50, D3DCOLOR_RGBA(255,255,0,255)},
				   { -50, -50, -50,   D3DCOLOR_RGBA(0,0,255,255)},
				   {  50, -50, -50,   D3DCOLOR_RGBA(0,255,0,255)}};

VERTEX sq6[4] = {{  50,  50, -50,   D3DCOLOR_RGBA(255,0,0,255)},
				   { -50,  50, -50, D3DCOLOR_RGBA(255,255,0,255)},
				   {  50,  50,  50,   D3DCOLOR_RGBA(0,0,255,255)},
				   { -50,  50,  50,   D3DCOLOR_RGBA(0,255,0,255)}};

g_pd3dDevice->SetFVF(FVF_TLVERTEX);

g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, sq1, sizeof(VERTEX));
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, sq2, sizeof(VERTEX)); 
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, sq3, sizeof(VERTEX)); 
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, sq4, sizeof(VERTEX)); 
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, sq5, sizeof(VERTEX)); 
g_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, sq6, sizeof(VERTEX));
これで立方体を表示しようとするとSetRenderState(D3DRS_LIGHTING, FALSE);しないと表示されませんが
これは「法線ベクトルの情報を持っていないために、ライトを設置して光を当てても反射されないので実質ブラックホールになってい、黒くて見えない」という認識で正解でしょうか?
カメラや光の位置、方向ベクトル、またレンダリングパイプラインなどの設定については正常とします。

Re: DirectXについて、認識の確認です

Posted: 2013年6月07日(金) 22:24
by びぎなぁ
39行目はg_pd3dDevice->SetFVF(FVF_VERTEX); の間違いです。

Re: DirectXについて、認識の確認です

Posted: 2013年6月07日(金) 23:04
by ISLe
提示したコードに法線情報を加えて表示されるかどうか確認してもらいたい、ということでしょうか?
ご自身で試すことはできないのですか?
というかこれは質問ですか?

Re: DirectXについて、認識の確認です

Posted: 2013年6月07日(金) 23:10
by びぎなぁ
なぜ、ライトを使わない設定にすると表示され、ライトを使う設定にすると表示されないのかが理解できているか不安なのです。
ライトを使わない設定の時は、真っ暗だろうが視界の範囲のポリゴンはすべて見える状態になるんでしょうか?

Re: DirectXについて、認識の確認です

Posted: 2013年6月08日(土) 00:11
by ISLe
ライトを使う場合も使わない場合もポリゴン表面のピクセルカラーの計算は行われます。

なぜ、ライトを使う設定にすると表示されないのか、の理由はD3DRENDERSTATETYPE 列挙型のD3DRS_LIGHTINGの説明に書かれています。

Re: DirectXについて、認識の確認です

Posted: 2013年6月08日(土) 00:54
by びぎなぁ
なるほど、やはり法線ベクトルの情報を持たないがために、表示できなかったのですね。
ありがとうございます。