Что означает «полигон» с точки зрения трехмерной графики? - PullRequest
2 голосов
/ 27 октября 2008

Старая книга о Direct3D гласит:

"... Вы можете достичь приемлемого кадра оценить с аппаратным ускорением в то время как отображение между 2000 и 4000 многоугольников в кадре ... "

Что такое один полигон в Direct3D? Они означают один примитив (индексированный или иным образом) или один треугольник?

Ответы [ 5 ]

7 голосов
/ 27 октября 2008

Эта книга означает треугольники. В противном случае, что если бы я хотел 1000-сторонние полигоны? Могу ли я достичь 2000-4000 таких фигур на кадр?

4 голосов
/ 27 октября 2008

На практике единственное, что вам нужно, это треугольник, потому что, если многоугольник не является треугольником, он обычно тесселяется как единое целое. (Например, четверка состоит из двух треугольников и так далее). Основной алгоритм триангуляции (тесселяции) для этого действительно прост; Вы просто зацикливаете вершины и превращаете каждые три вершины в треугольник.

3 голосов
/ 17 ноября 2008

Здесь «многоугольник» относится к треугольнику. Все . Однако, как вы указали, существует гораздо больше переменных, чем просто количество треугольников, которые определяют производительность.

Ключевые вопросы, которые имеют значение:

  • Формат хранилища (индексированный или нет; список, вентилятор или полоса)
  • Местоположение хранилища (массивы вершин памяти хоста, буферы вершин памяти хоста или буферы вершин памяти GPU)
  • Режим рендеринга (это команда примитива рисования, полностью выданная с хоста или через инстансинг)
  • Размер треугольника

Вместе эти переменные могут создать намного более чем двукратное изменение производительности.

Аналогично, оборудование, на котором работает приложение, в реальном мире может отличаться в 10 и более раз производительностью: графический процессор (или встроенный графический процессор), который был бюджетным в 2005 году, будет работать в 10-100 раз медленнее в любой значимой метрике. чем текущий топовый графический процессор.

В общем, любая рекомендация использовать 2-4000 треугольников настолько нелепо устарела, что сегодня ее следует полностью игнорировать. Даже низкоуровневое оборудование сегодня может легко протолкнуть 100 000 треугольников в кадре при разумных условиях. Кроме того, в большинстве визуально интересных приложений сегодня преобладают показатели затенения пикселей, а не числа треугольников.

Общие правила для достижения хорошей пропускной способности треугольника сегодня:

  • Использовать [проиндексированные] треугольные (или четырехугольные) списки
  • Хранить данные в буферах вершин GPU-памяти
  • Розыгрыш больших партий при каждом вызове розыгрыша примитивов (тысячи примитивов)
  • Используйте в основном треугольники> = 16 пикселей на экране
  • Не используйте геометрический шейдер (особенно для усиления геометрии)

Делайте все это, и любая современная машина должна с легкостью отображать десятки или сотни тысяч треугольников.

2 голосов
/ 27 октября 2008

Согласно этой странице , многоугольник является n-сторонним в Direct3d.

В C #:

public static Mesh Polygon(
    Device device,
    float length,
    int sides
)
0 голосов
/ 13 февраля 2009

Как уже говорили другие, многоугольники здесь означают треугольники. Основное преимущество треугольников состоит в том, что, поскольку 3 точки определяют плоскость, треугольники являются копланарными по определению. Это означает, что каждая точка в треугольнике точно определяется как линейная комбинация точек многоугольника. Больше вершин не обязательно копланарно, и они не определяют уникальную изогнутую плоскость.

Преимущество в механическом моделировании больше, чем в графике, состоит в том, что треугольники также недеформируемы.

...