在DirextX中遇到拓扑问题

时间:2019-10-18 07:55:12

标签: c++ graphics 3d directx directx-11

我正在尝试在DirectX 11中绘制四边形,但是我有一些问题:

VERTEX vert[] = {
        {-0.5f, 0.5f, 0.0f,     1.0f, 0.0f, 0.0f},
        {0.5f, -0.5f, 0.0f,     1.0f, 0.0f, 0.0f},
        {-0.5f, -0.5f, 0.0f,    1.0f, 0.0f, 0.0f},

        {0.5f, -0.5f, 0.0f,     0.0f, 0.0f, 0.0f},
        {5.0f, 0.5f, 0.0f,      0.0f, 1.0f, 0.0f},
        {-0.5f, 0.5f, 0.0f,     0.0f, 1.0f, 0.0f}
    };
    //0, 1, 2,
    //2, 3, 0

    vbo->Update(vert);
    vbo->Bind();
    deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
    deviceContext->Draw(6, 0);

它将绘制3个三角形-一个在正确的位置,两个错误的三角形。

1 个答案:

答案 0 :(得分:0)

由于您明确指定了三角形,因此应使用

D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST 

这会将每3个顶点视为三角形的一部分>

如果是三角形带,则只需绘制4个顶点,因为将使用此索引完成绘制:

Triangle 0->1->2
Triangle 1->2->3

在这种情况下绘制的正确数组是:

{-0.5f, 0.5f, 0.0f,     1.0f, 0.0f, 0.0f},
{0.5f, -0.5f, 0.0f,     1.0f, 0.0f, 0.0f},
{-0.5f, -0.5f, 0.0f,    1.0f, 0.0f, 0.0f},
{5.0f, 0.5f, 0.0f,      0.0f, 1.0f, 0.0f}