WebGL: рисовать разные геометрические примитивы в одном вызове? - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть сцена WebGL, которая хочет рисовать точечные и линейные примитивы, и мне интересно: возможно ли нарисовать несколько примитивов WebGL в одном вызове отрисовки?

Я догадываюсь, что это невозможно, но WebGL постоянно удивляет меня трюками, которые можно сделать для выполнения странных крайних случаев, и поиск не позволяет мне подтвердить, возможно ли это или нет.

Буду благодарен за любые идеи, которые могут предложить другие по этому вопросу.

1 Ответ

0 голосов
/ 03 сентября 2018

Вы не можете рисовать линии, точки и треугольники WebGL в одном вызове. Вы можете генерировать точки и линии из треугольников, а затем просто рисовать треугольники в одном вызове отрисовки, в котором есть треугольники, которые создают точки, и треугольники, отрисовывающие линии и треугольники, которые рисуют другие вещи, за один вызов отрисовки.

Не хороший пример, но для развлечения вот вершинный шейдер, который генерирует точки и линии из треугольников на лету .

Также есть это пример создания линий из треугольников

Насколько креативно вы хотите работать со своими шейдерами по сравнению с работой на процессоре, зависит только от вас, но как правило, рисовать линии треугольниками, как указывалось в предыдущей статье, поскольку линии WebGL, как правило, могут иметь толщину всего в один пиксель.

Также принято рисовать точки треугольниками, поскольку

  • WebGL требуется только для поддержки точек размером 1

    При рисовании треугольниками этот предел снят

  • Точки WebGL всегда выровнены по экрану

    Треугольные точки гораздо более гибкие. Например, вы можете повернуть точку и ориентировать ее в 3D. Вот несколько точек из треугольников

  • Точки на основе треугольника можно масштабировать в 3D без дополнительной работы

    Другими словами, точка на основе треугольника в трехмерном пространстве будет масштабироваться с расстоянием от камеры с использованием стандартной трехмерной математики. Точка WebGL требует, чтобы вы вычислили размер, которым должна быть точка, чтобы вы могли установить gl_PointSize, и поэтому требуется дополнительная работа, если вы хотите, чтобы она масштабировалась со сценой.

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

...