Правильный способ указания индексов в Direct3D

0

Предположим, я хочу отобразить пирамиду в Direct3D. У меня есть следующие вершины в моем вершинном буфере:

Vertex vertices[] = {
    {XMFLOAT3(+1.0f,0.0f,+1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(+1.0f,0.0f,-1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(-1.0f,0.0f,-1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(-1.0f,0.0f,+1.0f),(const float*)&Colors::Green},
    {XMFLOAT3(0.0f,1.5f,0.0f),(const float*)&Colors::Blue}
 }

Где Vertex - простая struct с позицией и значением цвета.

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

  • 0
    Если бы все треугольники были обращены вперед, это не была бы пирамида ;-)
Теги:
3d
directx

1 ответ

1
Лучший ответ

Как обычно я это делал:

  • нарисуйте свою модель на листе бумаги, в 3d-редакторе сетки или просто в Google снимите изображение
  • разделите не треугольники (например, квадрат в основании пирамиды) на треугольники
  • назначать последовательные числа и записывать их рядом с каждой вершиной
  • начинайте индексирование с фронтальных видимых треугольников в порядке, в зависимости от того, что ожидает рендер (например, по часовой стрелке)
  • затем указательные треугольники, обратные в обратном порядке (против часовой стрелки в нашем примере) - или - мысленно поверните сетку на 180 градусов (или мысленно поверните себя вокруг нее), "посмотрите на нее с обратной стороны" и указате треугольники в прямом порядке (по часовой стрелке).

В качестве альтернативы:

  • получить 3d-редактор сетки, нарисовать модель, сохранить в любом текстовом формате (например,.obj), открыть его с помощью текстового редактора и найти данные индекса
  • Google для этого

Разумеется, ваш рендерер и, особенно, вводный примитивный тип ассемблера (например, треугольный список или треугольная полоска) и отбраковка должны быть правильно настроены для правильной рисования модели.

Надеюсь, поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню