Я очень рекомендую использовать текстуры, как сказал Дейв. Это может быть чем-то вроде боли, но я думаю, что это обеспечит гораздо лучшую производительность.
Вы можете попробовать поискать алгоритмы обнаружения краев . Если вы создаете свои сетки, используя окрашивание вершин сплошными цветами и средними значениями альфа (для небольшой прозрачности), а затем используете шейдер обнаружения краев, это может выглядеть достаточно хорошо. Это было бы совсем не так, но вам это может понравиться еще больше; а может и нет.
В противном случае вы можете рассмотреть двухпроходное решение, рисуя полупрозрачные многоугольники (опять же, установите цвета вершин в сплошной цвет со средним альфа-значением), затем установите glPolygonMode (GL_LINE) и настройте glLineWidth по желанию (возможно, на основе объекта расстояние) и снова нарисуйте полигоны.
Уже немного поздно, и я с трудом читаю это, но обсуждение на форуме указывает на этот PDF: однопроходный рендеринг каркаса . Мои извинения, если это не актуально.
Я знаю, что это, вероятно, не то, что вам нужно, но похоже, что Vector Tanks просто использует текстурированные модели. Текстура выглядит как проволочная рамка, она работает на моем iPod touch, который не поддерживает шейдеры.
источник
Единственный способ, которым я это видел, - это использование текстур с высоким разрешением, в основном черного цвета, таких как в Tron 2.0. Их текстуры почти повсеместно: либо плоский черный с толстой цветной каймой, либо простая текстура шума Перлина.
Они применили простую постобработку для достижения эффекта свечения.
источник
Вы можете попробовать какую-нибудь простую функцию расстояния в пиксельном шейдере. Возможно, что-то вроде барицентрических координат (храните разные RGB в вершинах, и растеризатор сделает большую часть работы за вас).
Тогда ваш пиксельный шейдер будет иметь необходимую информацию о том, где на многоугольнике находится текущий пиксель - около вершины, около ребра или в середине ...
Я подозреваю, что на практике было бы легче текстурировать это все же.
источник
Как насчет этого: возьмите свою модель и нарежьте края, которые вы хотите отобразить в виде контуров. Раскрасьте лица, которые были созданы, ярким непрозрачным зеленым, в то время как все старые лица - темным полупрозрачным зеленым.
Это не требует использования пиксельных шейдеров вообще. (Фактически, никаких текстур тоже нет; только цвета лица). Это требует некоторой предварительной обработки модели с вашей стороны, что может быть или не быть проблемой.
Вы не сможете увидеть контур, когда скошенная поверхность перпендикулярна виду. Если это вас беспокоит, вы можете немного выдавливать скошенную поверхность, окрашивая экструзию так, как бы вы имели скос. Вы можете поиграть с различными степенями скашивания и выдавливания, чтобы сделать более тонкие и толстые линии.
источник