Я использую OpenGL ES 2.0. У меня есть куча четырехугольников, которые я хотел бы нарисовать. Мне бы хотелось иметь возможность передавать только 4 вершины на каждый квад, как если бы я использовал GL_QUADS, но в основном я просто хочу знать лучший способ рисования куча отдельных квадов.
Пока, что я нашел, я мог сделать: -GL_TRIANGLES (6 вершин на квад) -Регенерация GL_TRIANGLE_STRIP (6 вершин на квад)
Возможности, которые я нашел: -GL_TRIANGLE_STRIPS со специальным значением индекса, которое сбрасывает полосу квадраторов (это будет означать 5 индексов на квад, но я не думаю, что это возможно, это OpenGL ES 2.0)
3, 4,
4, 5, 6, 7}. Вырожденные треугольники - это3,3,4
и3,4,4
. Стоит ли это делать? Нет, если только ваши четверки не собираются в пары (или больше) с общими ребрами. Если 2-й квадрат равен {3, 2, 4, 5}, то полоса равна{0,1,3,2,5,4}
.{0,1,2, 0,2,3, 4,5,6, 4,6,7}
или одинаково хорошо это{0,1,2, 2,3,0, 4,5,6, 6,7,4}
. Хороший класс, чтобы помочь в этом - glText-Android / SpriteBatchИспользование буферов индекса не обязательно быстрее, как указано в документации Apple: «Для лучшей производительности ваши модели должны быть представлены в виде одной неиндексированной треугольной полосы с использованием glDrawArrays» .
Таким образом, хотя a
GL_TRIANGLE_STRIP
будет делать это в 4 вершинах, не нуждаясь в буфере индекса, и вы можете использовать буфер индекса, довольно сложно попытаться «сохранить» повторяющиеся 2 вершины . По этой причине я бы предложил вам нарисовать 2 отдельныхGL_TRIANGLES
и повторить 2 вершины по диагонали .источник
Большим преимуществом на рабочем столе является перемещение данных в VBO GL_STATIC_DRAW. Предположительно, это относится и к графическому процессору iPhone MBX.
источник
Использование
GL_TRIANGLE_FAN
для четырехугольника использует 4 вершины, а не 6.источник
GL_TRIANGLE_STRIP
, как уже указали другие ответы.