OpenGL VBO шейдер - PullRequest
       7

OpenGL VBO шейдер

3 голосов
/ 26 сентября 2011

У меня есть 2D-объект VBO, который представляет точки в 2D-пространстве.Как лучше всего нарисовать произвольную фигуру в этой точке?Допустим, я хотел нарисовать красный крестик на каждом.

Можно ли использовать шейдер для этого?

1 Ответ

1 голос
/ 27 сентября 2011

Для этого вам не обязательно нужен специальный шейдер, вы можете просто использовать точечные спрайты. Это в основном означало бы рисовать VBO как набор точек (используя glDrawArrays(GL_POINTS, ...)) и разрешать точечным спрайтам рисовать текстурированный квадрат (с текстурой 'X') в позиции каждой точки, предполагая, что размер точки больше чем 1 пиксель.

Для фактического создания геометрии в месте каждой точки вы можете использовать геометрический шейдер. Таким образом, вы также визуализируете VBO как набор точек и генерируете две линии ('X') или любую другую геометрию для каждой точки внутри геометрического шейдера.

Альтернативой геометрическим шейдерам являются инстансированные массивы (требующие того же оборудования GL3 / DX10, что и для геометрических шейдеров). Таким образом, вы рисуете несколько экземпляров формы 'X' и получаете исходные позиции экземпляров 'из точки VBO, используя атрибут, индекс которого передвигается один раз за экземпляр.

Последней альтернативой будет генерирование геометрий фигур вручную в ЦП, чтобы в итоге вы получили набор линий или набор четырех квадратов, объединяющий все буквы X в виде линий или спрайтов или чего-либо еще.

Но самым простым (и, возможно, самым быстрым, неуверенным в этом) способом должен быть упомянутый вначале подход с точечным спрайтом, поскольку их обычные проблемы с отсечением не должны быть такой большой проблемой в вашем случае, и вы, похоже, этого не делаете все равно нужны 3d формы. Таким образом, вам не нужно генерировать геометрию самостоятельно на процессоре, а также вам не нужны специальные шейдеры или аппаратное обеспечение GL3 / DX10 (хотя это довольно часто встречается в настоящее время). Все, что вам нужно, это текстура фигуры и активация точечных спрайтов (которые должны быть ядром начиная с GL 1.5).

Если все эти общие идеи ничего вам не говорят, возможно, вы захотите немного углубиться в OpenGL и компьютерную графику в реальном времени в целом.

...