Я работаю с cocos2d-x 2.0.4. Я иллюстрирую то, что я пытаюсь сделать с помощью этих двух изображений.
Что я хочу сделать, так это создать размытую границу или границу с градиентом на ней программно. У меня есть две идеи сделать это, но я не уверен, что это правильный способ сделать. Первым решением будет триангуляция многоугольника, содержащего только размытый цвет (в данном случае вогнутый многоугольник с отверстием) и отрисовка цвета на нем с градиентом, вершины снаружи многоугольника будут полностью альфа-каналами, а вершины внутри нулевыми. -альфа. Тогда интерполяция сделает работу градиента. Вторым решением было бы сделать это внутри самого шейдера. Все, что мне нужно, это вычислить расстояние от пикселя и ближайшего к нему края полигона. Затем при определенном пороге я воздействую на белый цвет пикселя с определенным значением альфы в зависимости от этого расстояния (самое короткое расстояние, самая большая альфа).
В любом случае, я очень новичок в openGL, и я боюсь, что второе решение приведет к большому времени обработки, так как мне нужно вычислить расстояние для каждого пикселя многоугольника. Что вы думаете об этом, ребята? Любые идеи, как правило, подтверждают мои догадки, или я полностью ошибаюсь в этом?
РЕДАКТИРОВАТЬ: решение, которое я, наконец, выбрал, состояло в том, чтобы использовать биссектрису каждого угла (легко вычислить с 3 последовательными вершинами) в многоугольнике и взять точку на этой биссектрисе, которая станет вершиной для внутреннего многоугольника. Затем я беру вершину внешнего или внутреннего многоугольника, чтобы построить массив вершин, который может соответствовать параметру GL_TRIANGLE_STRIP. Я поместил изображение ниже, чтобы понять лучше.