1

D3DPT_TRIANGLELIST を使用しようとすると問題が発生します。次のサンプルは本からのものなので、何が問題なのかわかりません。

頂点データ:

ColorVertex *v;

Triangle->Lock(0,0,(void**)&v,0);

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0));
v[1] = ColorVertex(0.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,255,0));
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255));

Triangle->Unlock();

描画機能:

Device->SetFVF(ColorVertex::FVF);
Device->SetStreamSource(0,Triangle,0,sizeof(ColorVertex));

D3DXMatrixTranslation(&World,-1.25f,0.0f,0.0f);
Device->SetTransform(D3DTS_WORLD,&World);

Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

D3DXMatrixTranslation(&World,1.25f,0.0f,0.0f);
Device->SetTransform(D3DTS_WORLD,&World);

Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

Device->EndScene();
Device->Present(0,0,0,0);

ただし、D3DPT_TRIANGLELIST からたとえば D3DPT_LINELIST に変更すると、線が描画されます。D3DPT_POINTLIST を使用すると、DrawPrimite 呼び出しごとに 1 つのポイント (ピクセル) しか描画されません。

助けてくれてありがとう!

4

2 に答える 2

0

さて、いろいろ試した結果、MISTAKE(!) を見つけました。それはいつも私の目の前にあり、座標にあります:

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0));
v[1] = ColorVertex(0.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,255,0));
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255));

頂点の Y 座標が新しく変更されるため、これは三角形を形成できません。もちろん、仕様を形成するために Y 座標を必要としないため、線や点を描くことは可能です。したがって、解決策はたとえば次のとおりです。

v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(255, 0,0));
v[1] = ColorVertex(0.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(0,255,0));
v[2] = ColorVertex(1.0f, 0.0f, 2.0f, D3DCOLOR_XRGB(0,0,255));
于 2012-07-21T08:13:44.820 に答える
0

頂点座標は三角形を形成しません。それらは直線上の 3 点です。

于 2012-07-20T20:42:21.837 に答える