Рисование Строк Stippled с помощью OpenGL-ES

У меня есть приложение, которое проводит повышенные линии представления 3-й карты, которые показывают различные функции. Я портирую карту на архитектуру OpenGL-ES, но испытываю немного затруднений при разработке, как отобразить пунктирные линии.

Делая большой поиск с помощью Google, я нашел много ссылок на идею, что проведение пунктирных линий и полигонов было удалено от OpenGL-ES, поскольку они могут быть легко эмулированы с помощью треугольников структур. Это является большим, но я не могу найти никого, который на самом деле делает эту эмуляцию и/или имеет описание включенных шагов.

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

Любой совет относительно того, как достигнуть штриховых строк постоянной ширины в виде в перспективе, очень ценился бы.

8
задан Piklor 20 December 2009 в 23:11
поделиться

1 ответ

Я считаю, что вы можете применить текстуру в линию, а не просто треугольник. Вам необходимо установить координаты текстуры для каждого конца строки; Текстура будет интерполирована линейно вдоль линии.

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

Существует еще одна проблема: тенденция к узоре текстуры, чтобы стать компактной, как линия уходит от камеры. Это происходит, потому что интерполяция координат текстуры - это перспектива - правильная даже для линий (см. Раздел 3.5 Spec GL).

Есть два способа обойти это:

  1. Если вы можете рассчитать координату «q» для вашей текстуры, который отменяет перспективу, вы можете восстановить текстурирование экрана. Эта техника, вероятно, слишком активна - дорого.

  2. Вы можете проецировать текстуру в космическом пространстве глаз (например, Gltexgen).

Генерация координат текстуры, конечно, не доступна в GLES 1.1, но если вы используете вершины по массиву, вы можете подделать его с помощью:

  • Настройка массива координат текстуры, чтобы стать вашим массивом координат вершины и
  • Матрица текстуры для «преобразования» вершины.

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

5
ответ дан 5 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: