Порядок намотки вершин в DX11

Я пытаюсь нарисовать простой квадрат с помощью dx11, но порядок индексов каждого треугольника определяет, будет ли он отображаться. Я установил режим отключения в состояние растеризатора, но это ничего не меняет.

Если я укажу вершины первого треугольника равными 0, 1, 2 вместо 2, 1, 0, то треугольник не появится. Итак, мой вопрос: нужно ли упорядочивать вершины треугольника определенным образом, независимо от режима отбраковки?

Постскриптум Я рисую список треугольников, а не полосу.

UINT indices[] = {2, 1, 0,
1, 3, 0};MeshVertex vertices[] =
{
{ Vector3(1.0f, 1.0f, 0.0f)}, //Top Right
{ Vector3(-1.0f, -1.0f, 0.0f)}, //Bottom Left
{ Vector3(1.0f, -1.0f, 0.0f)}, //Bottom Right
{ Vector3(-1.0f, 1.0f, 0.0f)} //Top Left
};

mesh = new Mesh(vertices, indices, 4, 6, shader);

2

Решение

Итак, мой вопрос, нужно ли мне упорядочить вершины треугольника в
конкретный способ независимо от режима отбора?

** Определите / Нарисуйте свои вершины в порядке по часовой стрелке, и не меняйте значение по умолчанию
режим отбраковки. **

Чтобы определить, можно ли отобразить треугольник, необходимо учитывать 2 фактора.

  1. Передняя грань, или вы называете это порядком намотки, по умолчанию Direct3D обрабатывает вершины, определенные в порядке по часовой стрелке, как переднюю грань, а все грани, кроме лицевой, являются задними гранями.
  2. В режиме отбраковки по умолчанию Direct3D отбраковывает задние грани (грани, вершины которых определены в направлении против часовой стрелки).

Вы можете установить переднюю грань и режим отбраковки в D3D11_RASTERIZER_DESC состав

Причина, по которой вы не видите различий при изменении режима отбраковки на NONE, заключается в том, что оба треугольника были в одном и том же порядке, и D3D11_CULL_NONE означает, что не отбраковывалось ни одной грани.

Если треугольник 1 расположен по часовой стрелке, а треугольник 2 — против часовой стрелки, вы увидите только один треугольник, если вы установите режим отбраковки на D3D11_CULL_FRONT или D3D11_CULL_BACK, и увидите оба, когда вы установите его на D3D11_CULL_NONE.

3

Другие решения