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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
びぎなぁ

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

#1

投稿記事 by びぎなぁ » 7年前

コード:

//
#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について、認識の確認です

#2

投稿記事 by びぎなぁ » 7年前

39行目はg_pd3dDevice->SetFVF(FVF_VERTEX); の間違いです。

ISLe
記事: 2648
登録日時: 9年前
連絡を取る:

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

#3

投稿記事 by ISLe » 7年前

提示したコードに法線情報を加えて表示されるかどうか確認してもらいたい、ということでしょうか?
ご自身で試すことはできないのですか?
というかこれは質問ですか?

びぎなぁ

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

#4

投稿記事 by びぎなぁ » 7年前

なぜ、ライトを使わない設定にすると表示され、ライトを使う設定にすると表示されないのかが理解できているか不安なのです。
ライトを使わない設定の時は、真っ暗だろうが視界の範囲のポリゴンはすべて見える状態になるんでしょうか?

ISLe
記事: 2648
登録日時: 9年前
連絡を取る:

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

#5

投稿記事 by ISLe » 7年前

ライトを使う場合も使わない場合もポリゴン表面のピクセルカラーの計算は行われます。

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

びぎなぁ
記事: 6
登録日時: 7年前

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

#6

投稿記事 by びぎなぁ » 7年前

なるほど、やはり法線ベクトルの情報を持たないがために、表示できなかったのですね。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る