1

まず第一に、ここに私のコードの重要な部分があります。

頂点を作成しています。

D3DVertexTexture Vertices[] =
{
    {-1.0f,  1.0f, 0.0f, 0.0f, 0.0f, },
    { 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, },
    { 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, },
    {-1.0f, -1.0f, 0.0f, 0.0f, 1.0f, },
};

頂点バッファーを作成します。

D3DDevice->CreateVertexBuffer(sizeof(Vertices),
                              0,
                              D3DFVF_CUSTOMVERTEXTEXTURE,
                              D3DPOOL_MANAGED,
                              &vb,
                              NULL);

メモリのがらくた。

void* pVoid;

vb->Lock(0, sizeof(pVoid), (void**) &pVoid, 0);
    memcpy(pVoid, Vertices, sizeof(Vertices));
vb->Unlock();

テクスチャをロードしています。

D3DXCreateTextureFromFile(D3DDevice, "images/tex.png", &t);

レンダリング。

D3DDevice->SetFVF(D3DFVF_CUSTOMVERTEXTEXTURE);

D3DDevice->SetTexture(0, t);
D3DDevice->SetStreamSource(0, vb, 0, sizeof(D3DVertexTexture));
D3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

私の問題はどこにありますか。

正方形に見えますが、このように三角形に辺の左側が欠けています。

ここに画像の説明を入力

4

2 に答える 2

4

三角形ストリップの頂点 A、B、C、D は、A、B、C および B、C、D の 2 つの三角形を生成します。

A -- B A--BB
| | | | \ | /|
| | | | \| / |
D -- CC D -- C

その図を見て、それらの 2 つの三角形を思い浮かべてください...

次に、頂点を正しい順序で配置します。三角形のストリップは、時計回りまたは反時計回りの順序ではなく、「ジグザグ」にする必要があります。

それらを注文すると、A、B、D、C - クワッドは正しく描画されます。

于 2012-12-15T20:03:52.653 に答える
0

この順序で頂点を定義しようとしましたか:

D3DVertexTexture Vertices[] =
{
    { 1.0f, -1.0f, 0.0f, 1.0f, 1.0f, },
    {-1.0f, -1.0f, 0.0f, 0.0f, 1.0f, },
    {-1.0f,  1.0f, 0.0f, 0.0f, 0.0f, },
    { 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, },
};

頂点が描画される順序は、デフォルトでは時計回りの順序であると思います。間違った順序で定義しています。

于 2015-01-16T10:58:13.753 に答える