Заказ покраски OpenGL VBO - PullRequest
       9

Заказ покраски OpenGL VBO

0 голосов
/ 04 декабря 2011

Я планирую использовать VBO для отображения массива больших точек, около 512x512.Для его отображения каждая вершина зависит от ближайших соседей.Например, если у меня есть следующая таблица:

[ 1, 2, 3, 5, 6, 7
  8, 9,10,11,12,13,
 14,15,16,17,18,19]

, и я хотел бы нарисовать многоугольник, используя 5-ю точку, мне нужно будет использовать следующий код:

glBegin(GL_TRIANGLE_STRIP)
glVertex(Points5)
glVertex(Points6)
glVertex(Points11)
glVertex(Points12)
glEnd()

и т. Д.для любой другой точки ..

Я знаю, что в любой данный момент мой буфер содержит только 512x512 точек, но как я могу "научить" его рисовать таким образом, используя GL_TRIANGLE_STRIP и VBOs?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Я думаю, что лучшим решением является выражение примитивов через индексы с использованием буфера индекса (GL_ELEMENT_ARRAY_BUFFER). ref .

Редактировать:

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

0 голосов
/ 04 декабря 2011

Прежде всего не рисуйте отдельную полосу треугольника для каждого отдельного четырехугольника !Просто разбейте каждый из этих четырех квадратов на два треугольника и поместите все индексы вершин этих треугольников в один индексный массив / буфер, как предполагает Бретт Хейл.Таким образом, вы можете нарисовать всю сетку одним вызовом glDrawElements(GL_TRIANGLES, ...).

. Если вы не знаете, что такое индексный массив или что такое массив / буфер вершин в целом, то вам следует изучитьнемного глубже в эту тему.Но, во что бы то ни стало, пожалуйста, держитесь подальше от вашего текущего решения - нарисовать одну полосу для каждого квадратора.Сначала это может звучать великолепно (относительно количества отправляемых вершин), но это не так.Помните, что преимущество VBO заключается не только в возможном хранении графического процессора, но и в том, что вам не нужен вызов драйвера для каждого отдельного примитива, и ваше текущее решение может быть сделано только таким образом.

Вы можететакже используйте GL_QUADS вместо GL_TRIANGLES.Таким образом, вам все еще нужно только 4 индекса на квад (в отличие от 6 при использовании треугольников), и вы все равно можете нарисовать его за один вызов.Но также имейте в виду, что GL_QUADS был удален из основного профиля более новых версий OpenGL (3+), а также из ES.Так что GL_TRIANGLES может быть более портативным решением (и графический процессор все равно разбивает его на треугольники).

...