Каркас OpenGL

18

Нет, я не ищу glPolygonMode. Я ищу метод, возможно, GLSL-шейдер, который бы выглядел в стиле ретро в стиле каркаса для объектов. Какие-либо предложения?

Что-то вроде Vector Tanks было.

http://toucharcade.com/wp-content/uploads/2009/01/picture-111-300x204.png

Предпочтительно решение должно работать и на OpenGL ES 2.0.

Любые намеки и указатели (пока не NULL) приветствуются!

Корнел Киселевич
источник

Ответы:

5

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

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

В противном случае вы можете рассмотреть двухпроходное решение, рисуя полупрозрачные многоугольники (опять же, установите цвета вершин в сплошной цвет со средним альфа-значением), затем установите glPolygonMode (GL_LINE) и настройте glLineWidth по желанию (возможно, на основе объекта расстояние) и снова нарисуйте полигоны.

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

Ricket
источник
+1: было бы проще, если бы я нашел способ как-то сгенерировать текстуры. Невозможно использовать glPolygonMode из-за более позднего нацеливания OpenGL ES (iStuff).
Корнел Киселевич
2

Я знаю, что это, вероятно, не то, что вам нужно, но похоже, что Vector Tanks просто использует текстурированные модели. Текстура выглядит как проволочная рамка, она работает на моем iPod touch, который не поддерживает шейдеры.

Дейв
источник
Я знаю, я знаю, но я мог бы также вставлять изображения Subversion, и он вообще не использует текстуры (AFAIK)
Корнел Киселевич
2

Единственный способ, которым я это видел, - это использование текстур с высоким разрешением, в основном черного цвета, таких как в Tron 2.0. Их текстуры почти повсеместно: либо плоский черный с толстой цветной каймой, либо простая текстура шума Перлина.

Они применили простую постобработку для достижения эффекта свечения.

greyfade
источник
+1: я знал статью, но спасибо за напоминание - это действительно хорошая статья (и помогает со второй проблемой, которую я имел - свечение).
Корнел Киселевич
1

Вы можете попробовать какую-нибудь простую функцию расстояния в пиксельном шейдере. Возможно, что-то вроде барицентрических координат (храните разные RGB в вершинах, и растеризатор сделает большую часть работы за вас).

Тогда ваш пиксельный шейдер будет иметь необходимую информацию о том, где на многоугольнике находится текущий пиксель - около вершины, около ребра или в середине ...

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

JasonD
источник
1

Как насчет этого: возьмите свою модель и нарежьте края, которые вы хотите отобразить в виде контуров. Раскрасьте лица, которые были созданы, ярким непрозрачным зеленым, в то время как все старые лица - темным полупрозрачным зеленым.

Это не требует использования пиксельных шейдеров вообще. (Фактически, никаких текстур тоже нет; только цвета лица). Это требует некоторой предварительной обработки модели с вашей стороны, что может быть или не быть проблемой.

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


источник