Возникли проблемы с топологиями в DirextX - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь нарисовать четырехугольник в 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 треугольника - один в правильном месте и 2 неправильных.

1 Ответ

0 голосов
/ 18 октября 2019

Поскольку вы явно указываете треугольники, вы должны использовать

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}
...