Перемещение + масштабирование отдельных элементов управления OpenGL - PullRequest
1 голос
/ 16 февраля 2011

Я новичок в OpenGL, и я только что прочитал хороший учебник по OpenGL 2.0. Моя цель - OpenGL ES 2.0.

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

Я думаю, что было бы лучше создать единые атрибуты для каждого элемента управления, такие как width / height / left / top / другие атрибуты, определяемые элементами управления, такие как положение ползунка и т. Д. Затем разумно отобразить постоянные вершины на экране с помощью умный шейдер. Затем хост-приложение просто должно было обновить единообразные атрибуты для элемента управления вместо того, чтобы каждый раз загружать новые наборы вершин.

Что вы рекомендуете? Есть ли пример или учебник, посвященный этому?

1 Ответ

1 голос
/ 16 февраля 2011

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

Но и с вершинным шейдером все в порядке. Вы создадите свои вершины, реалистичные по центру. Для 2х2 квадратных вершин будет выглядеть так:

1. -1, -1
2.  1, -1
3.  1,  1
4. -1,  1

Затем вы можете просто переместить центр этой фигуры и установить его масштабирование. Как вы видите, вы просто масштабируете 2D-векторы, легко выполняете задачу и добавляете их в центральное положение ... таким образом, вы получаете 4 позиции в нужном месте и можете нарисовать свой квадрат. Идея этого заключается в том, что вы можете создать любую фигуру (не только прямоугольники, которые возможны с шириной, высотой, сверху, слева ...), и вы можете загрузить эти фигуры в буфер текстур. Для рисования с помощью шейдера вы просто указываете, какая фигура, где находится центр и какой размер ... я думаю, что будет довольно быстро и легко добавлять новые вещи ..

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

...