вырожденные вершины и GL_LINE_STRIP - PullRequest
2 голосов
/ 13 марта 2012

Я на iOS 5.1

Я пытался отобразить несколько партий строк в одном массиве вершин и хотел разделить их, используя вырожденные вершины.Но это не похоже на работу.I линия проводится между каждой партией вершин.

Погуглив проблему, я обнаружил, что вырожденные вершины не совместимы с GL_LINE_STRIP, но я не совсем уверен в этом.Кто-нибудь может это подтвердить?А также какая альтернатива?

Ответы [ 3 ]

2 голосов
/ 07 июня 2012

Одна возможность, которая может прийти вам в голову, - это использовать вершины с некоторыми странными значениями (например, бесконечность или aw, равные 0), но они, скорее всего, просто будут отображаться как нормальные точки на некотором безумном расстоянии (и, таким образом, вы получить странные обрезанные линии). Так что это вообще не сработает.

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

Таким образом, нет никакого реального способа поместить несколько строк в один вызов отрисовки, используя вырожденные вершины (хотя у современного настольного GL есть другие способы сделать это). Лучше всего было бы просто использовать обычный набор строк (GL_LINES), как предлагает Drewsmits . Хорошо, вы примерно вдвое увеличите количество вершин (если ваши полосы очень длинные), но меньшие накладные расходы драйвера из-за пакетной обработки могут перевесить дополнительную память и накладные расходы на копирование.

2 голосов
/ 24 августа 2014

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

2 голосов
/ 06 июня 2012

Насколько я знаю, вы можете нарисовать непрерывную линию только с использованием одного массива вершин и GL_LINE_STRIP.Альтернативой является использование GL_LINES, который рассматривает каждую пару вершин как независимый отрезок.Чтобы получить непрерывную линию, продублируйте последнюю вершину предыдущего сегмента как начало следующего сегмента в массиве вершин.

...